> Tous les forums > Forum Bureautique
 recherche la ligne et passe a la suivante
Ajouter un message à la discussion
Page : [1] 
Page 1 sur 1
aiglon61
  Posté le 21/05/2015 @ 23:26 
Aller en bas de la page 

bonjour a tous

j'ai monter une macro qui recherche la ligne qui correspond a ma demande en feuille recherche réf
et qui passe a la suivante qui a les même référence
enfin je dirais bricoler
mais ca marche

pourrais t'on monter une macro plus sérieuse
avec le bouton en moins qui serait remplacer par enter(pour exécuter la macro)
et un message qui me dirait combien de ligne correspond a ma recherche

je joins mon code

Sub suivante()

'Anti scintillement
With Application
.ScreenUpdating = False
.EnableEvents = False
End With
A = Sheets("Recherche ref").Range("b12")
Sheets("base").Activate
For Each ligne In Range("b5:b6000")
If ligne = A Then
ligne.EntireRow.Copy

'insert une ligne en 1998
Sheets("base").Rows("1998:1998").Insert
ligne.EntireRow.Delete

Const Col As String = "G" 'colonne de Travail désirée, ici colonne G


Dim Fin As Long

On Error Resume Next
Fin = Columns(Col).Find("*", , , , , xlPrevious).Row
Range(Cells(7, Col), Cells(Fin, Col)).SpecialCells(xlCellTypeBlanks).EntireRow.Delete

Sheets("Recherche ref").Activate
Range("b12").Activate

End If
Next

End Sub


merci a ceux qui liront ce message pour leur bonne volonté et leur temps

ps peu t on envoyer un fichier joint et comment

a+
aiglon74

Publicité
ferrand
 Posté le 22/05/2015 à 00:03 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Bonsoir,

C'est effectivement un peu brouillon , et quelques éléments me laissent dubitatif. Un fichier ne serait pas de trop pour éviter des interprétations erronées.

Utiliser http://www.cjoint.com et mettre le lien dans un prochain post.

aiglon61
 Posté le 22/05/2015 à 06:03 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page

bonjour ferrand

je te joins un fichier

et te remerci pour ta réponse

http://cjoint.com/?0Ewf6y2BgDg

bonne journée

A+

aiglon74

ferrand
 Posté le 22/05/2015 à 15:13 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Bonjour,

Pas encore eu le temps de plonger dans le détail de ton fichier. La situation me paraît cependant assez confuse.

D'abord, dans la mesure où il s'agit d'un modèle où presque toutes les données sont numériques, il s'agit de savoir quel est le type de données qui figure en réalité dans ta base. A préciser.

D'autre part, tu disais au départ que ta macro fonctionnait, certes elle fait quelque chose mais je n'ai pas le sentiment qu'elle fait exactement ce qui était prévu...

Il serait d'ailleurs bien que tu indiques le fonctionnement global de ton projet, pour avoir une vue précise de ce qui doit être !

Nous avons un classeur avec une feuille "Base", et 3 feuilles destinées rspectivement à entrer une nouvelle référence, rechercher et supprimer (cette dernière masquée, avec macro manquante affectée à la forme ovale). Les deux autres disposent aussi d'une forme avec macro attachée. Mais en outre on a (éditeur VBA) mention d'un bouton (et d'un ComboBox) qui ne figurent nulle part, dont la macro lancée au clic se balade sur un module standard (ce qui n'est pas sa place), une fonction 'recherche' sans utilisation, du code qui se balade hors procédure. Au premier survol, l'ensemble paraît donc assez chaotique.

Je vais voir si j'arrive à m'y retrouver dans la macro...

ferrand
 Posté le 22/05/2015 à 15:54 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Je crois que j'ai à peu près reconstitué ce qui se passait ! J'y reviens plus tard.

aiglon61
 Posté le 22/05/2015 à 17:10 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page

bonjour ,

type de donné

DESIGNATION REFERENCE OPERATION MATIERE Concatener EMPLACEMENT
CARRURE 5396 M10 OR CARRURE5396M10OR AA1
CARRURE 5960/1 M10 ACIER CARRURE5960/1M10ACIER AA10

en feuille base je récupère les données de la feuille nouvelle référence ou je doit pouvoir efface une ligne en recherchant son emplacement

et la macro "suivante "me servirait de passer d'une ligne a l'autre celle qui on les mêmes

DESIGNATION REFERENCE OPERATION MATIERE

je joins mon fichier réel

http://cjoint.com/?0EwrhlviKZH

A+

aiglon74

ferrand
 Posté le 22/05/2015 à 19:18 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Re,

Voyons la macro 'suivante', sur laquelle la question est posée (à partir du modèle)

- elle désactive la mise à jour de l'affichage (mais pas de réactivation en fin d'opération, ce qui serait logique) et inhibe les actions liées aux évènements (on ne voit pas pourquoi, vu qu'il n'y a aucune évènementielle)

- elle affecte à une variable (non déclarée) la valeur de B12 (feuille recherche)

- active la feuille base (non nécessaire, sous réserve de qualifier les références d'objets dans le code)

- initie une boucle sur les cellules B5 à B6000 (feuille base), y recherche la valeur A (=B12 [feuille recherche])

A ce stade, il faut noter qu'il y a dans le fichier modèle 6 lignes qui répondent à la condition (valeur de la colonne B = variable A (B12) = 1) : les lignes 13 à 15 et 1995 à 1997), situation qui résulte certainement d'une exécution antérieure de la macro). Notons les valeurs de la colonne G pour ces 6 lignes (AA suivi d'un nombre) : pour les lignes 13à 15 : 15, 14, 1 ; pour les autres : 16, 4, 23. Nous somme dans les actions suivantes au 1er tour de la boucle.

- si trouvée (au 1er tour : ce sera donc ligne 13), elle copie la ligne pour l'insérer en position 1998 (?), et supprime la ligne initiale (l'insertion se retrouve donc en ligne 1997)

- déclare une constante pour désigner la colonne (inutile) et un variable de type long (déclarations en milieu de procédure, pas à leur place)

- introduit un gestionnaire destiné à masquer les erreurs susceptibles de survenir (aïe !)

- la variable précédemment déclarée est destinée à recueillir le numéro de la dernière ligne de la base (en colonne G) en utilisant la méthode Find (c'est atypique...) : cependant une erreur 91 survient sur cette ligne (le gestionnaire fait passer outre)...

- la commande suivante : suppression des lignes pour lesquelles la colonne G est vide, dont on s'attendrait à ce qu'elle ne soit pas exécutée, l'est ! (je suis encore surpris par VBA , malgré l'erreur, la procédure continue (normal) avec la valeur de la dernière ligne (1997) affectée à la variable (oh ! malgré l'erreur) et malgré le fait que la lettre G soit portée à la place du numéro de colonne (7)

On noterait donc à l'issue de ce 1er tour que les 6 lignes précitées se retrouve aux positions 13 à 18 : les numéros en colonnes G étant successivement 14, 1, 16, 4, 23, 15, soit la succession initiale (mais en lignes consécutives) le 15 étant passé de la première position à la dernière. Rien aux lignes 1995 à 1997. Je n'aurais pas parié sur l'exécution conforme de la procédure dans ces conditions, mais elle s'exécute bien !

- Mais le 1er tour n'est pas terminé, il se poursuit par l'activation de la feuille 'recherche' (on se demande pourquoi) avant de passer au tour suivant.

- Au 2e tour, la procédure reprend sur la ligne suivante répondant à la condition (ligne 14) mais la feuille active n'est plus Base, donc la ligne insérée en 1998 va y rester, les lignes vides intermédiaires n'étant plus supprimées (si la feuille recherche n'était pas protégée, son contenu serait d'ailleurs effacé puisqu'il s'agit de la feuille active). On obtient donc en colonne G, aux lignes 13 à 17 les valeurs 14, 16, 4, 23, 15 ; et 1 en ligne 1997 (qui occupait la ligne 14 au tour précédent).

- 3e tour, ligne suivante répondant à la condition = ligne 15. On obtient (en G) ligne 13 à 16 : 14, 16, 23, 15 ; et 1 en ligne 1996, 4 (antérieurement en 15) en ligne 1997.

- 4e tour, ligne suivante répondant à la condition = ligne 16. On obtient ligne 13 à 15 : 14, 16, 23 ; et 1 en ligne 1995, 4 en 1996 et 15 (en 16 au tour précédent) en 1997.

- 5e tour, ligne suivante répondant à la condition = ligne 1995. Les ligne 13 à 15 ne bougent plus ; les lignes 1995 à 1997 deviennent 4, 15, 1 (le 1 antérieurement en 1995 est repassé en fin de trio).

- 6e tour, ligne suivante répondant à la condition = ligne 1996. Les lignes 1995 à 1997 deviennent : 4, 1, 15 (le 15 était antérieurement en 1996).

- 7e tour, ligne suivante répondant à la condition = ligne 1997. Le 15, alors en 1997, est déplacé pour y revenir. Plus d'autre ligne répondant à la condition, cela ne bougera donc plus.

Il ne semble pas que ce résultat soit exactement la situation recherchée. La procédure a pour effet de regrouper les lignes ayant la même valeur en col. B, comme on le note au 1er tour, dans le contexte spécifique du modèle. Ensuite, les choses dévient en raison de l'absence de qualificateurs (déjà signalée) et du fait qu'on procède à des suppressions dans une boucle croissante (on le fait toujours dans une boucle décroissante pour éviter que des lignes soient inévitablement ignorées si la boucle est croissante).

Avant de se lancer dans des rectifications, il est indispensable d'établir ce que doit être le résultat final de cette procédure : simple regroupement comme aperçu ? à quel endroit ? quel est l'objet de la recherche ? (pour regrouper, un simple tri suffirait).

la macro "suivante "me servirait de passer d'une ligne a l'autre celle qui on les mêmes

Excuse-moi mais pour moi l'objectif n'est pas clair !

aiglon61
 Posté le 23/05/2015 à 00:11 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page

bonsoir

l'objectif et de ma recherche la valeur b12 d12 f12 h12 en feuille recherche réf allez le chercher en feuille base

puis l'afficher le résultat en feuille recherche réf e17 résultat étant G en feuille base

au lieu d'appuyer sur le bouton suivante pour passer a la ligne suivante qui correspond a la recherche je voudrais appuyer sur enter

idéal serait d'avoir un message qui me dirait 1er solution sur X 2eme solution sur X ECT..

A+

aiglon74

ferrand
 Posté le 23/05/2015 à 01:08 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

A quoi donc sert la formule en E17 alors ?

Je ne vois pas de rapport avec ce que fait la macro !

Que veut dire 'passer à la ligne suivante' ? La macro ne fait rien de la sorte !

Et que sont ces différentes solutions qui apparaissent pour la première fois ?

Je comprends de moins en moins ce que tu veux !

Quant à vouloir lancer une macro avec la touche Entrée, tu oublies !

Une macro peut se lancer manuellement avec la boîte macro, en la sélectionnant puis clic sur Exécuter (ou touche Entrée puisque ce bouton est sélectionné par défaut), ou par une combinaison de touche que tu définis, ou en l'attachant à un bouton ou autre contrôle, ou en faisant en sorte qu'elle se lance toute seule à partir d'un évènement.

Pour l'instant, ce qui serait bien, serait de savoir quel doit être le résultat de l'exécution de la macro : quelle modification elle apporte à la feuille base ? Et qu'est-ce qu'elle doit faire apparaître ou modifier sur la feuille recherche ? Dans le détail autant que possible.

Publicité
ferrand
 Posté le 23/05/2015 à 02:48 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Il me semble avoir compris ce que tu peux rechercher, en examinant ton fichier "réel".

Quelque chose comme ça peut-être ?

Si c'est le cas, pas besoin de macros, on l'obtient avec des formules.

aiglon61
 Posté le 23/05/2015 à 09:18 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page

bonjour ferrand

ta solution te mettre tous les emplacements sur la même ligne ok

je vais réfléchir a la formule

mille merci pour ton aide

A+

aiglon74

ferrand
 Posté le 23/05/2015 à 16:33 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Bonjour,

Voilà mes suggestions pour ton fichier (à l'exception de la procédure d'impression que je n'ai pas du tout regardée).

Côté formules -

Pour la recherche par références :

• en A17 : =SI(BASE!J1<>"";SOMMEPROD(--(BASE!F:F=BASE!J1));0)

elle calcule le nombre de références correspondant à la demande.

• en B16 : =SI(COLONNE()-2<$A$17;EQUIV(BASE!$J$1;DECALER(BASE!$F:$F;A16;;6000);0)+A16;"")

qui définit la ligne où se trouve le premier emplacement correspondant à la demande dans la base.
Tirée sur la ligne jusqu'en I16, les cellules suivantes en ligne 16 définissent les emplacements suivants s'il y en a d'autres.

• en C17 : =SI(B16<>"";INDEX(BASE!$G:$G;B16);"")

affiche le premier emplacement détecté.
Recopiée jsuqu'en J17 pour afficher les emplacements suivants s'il y en a.

Les cellules H17 à J17 ne sont pas pré-mises en forme : se mettront en forme par MFC s'il y a lieu (si le nombre d'emplacements dépasse 5).

Pour la recherche par emplacement :

Modifications proposées pour alléger formules antérieures et inhiber l'affichage de valeurs d'erreur.

• en A12 : =SIERREUR(EQUIV(E17;BASE!G:G;0);"")

renvoie le numéro de ligne de l'emplacement dans la base.

• en B12 : =SI($A$12<>"";INDIRECT("BASE!"&CAR(COLONNE()/2+65)&$A$12);"")

renvoie la référence "désignation" de l'emplacement.
Recopiée sur D, F, H et J12 pour renvoyer les autres références.

Même aménagement des formules pour la suppression emplacement.

Côté macros -

Un peu de nettoyage et de remise en ordre.

Remplacement des diverses macros de déplacement vers les feuilles et retour par une seule.

Cette macro est affectée à tous les "boutons" concernés (elle définit le bouton l'ayant appelé pour agir en conséquence).

Les "boutons" ont été renommés à cette fin de façon que le numéro d'ordre inclus dans le nom soit 1 à 4 pour chacune des 4 feuilles appelables et 5 pour tous les boutons "retour".

Macro de suppression allégée + message pour faire confirmer avant exécution.

Macro d'enregistrement de nouvelles références également allégée + tri de la base sur la colonne emplacement après chaque insertion.

Activation de la feuille d'accueil à l'ouverture du classeur.

L'allègement a consisté à expurger tout le code superflu issu principalement de l'enregistrement de macros (sélections et activations à répétition, éviter généralement le copier-coller au profit d'autres méthodes, etc.)

La remise en ordre porte, elle, sur la mise en forme du code : déclaration des variables, et en tête de procédure, indentations systématiques pour faciliter la lecture, etc.

A noter que toutes les macros (très peu nombreuses) pourraient être regroupées sur un même module...

Bonne utilisation.

http://cjoint.com/?EExqHzRBT3n



Modifié par ferrand le 23/05/2015 16:35
aiglon61
 Posté le 24/05/2015 à 10:19 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page

Bonjour,

impressionné milles mercis pour ce cour EXCEL

tes explications tip top

tout fonctionne a merveille

A+

aiglon74

Page : [1] 
Page 1 sur 1

Vous devez être connecté pour poster des messages. Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !


Sujets relatifs
Recherche de mot de passe fichier Excel 2010
Recherche et relever des indications de la ligne
Utiliser N° ligne après recherche pour sélection
Recherche de la dernière valeur d'une ligne
recherche efface ligne
Mon diaporama ne passe pas a la diapo suivante !!
Supprimer le mot de passe d'un fichier.
Quel agenda en ligne choisir
Recherche exemple CV
Office prétend qu'il est protégé par mot de passe
Plus de sujets relatifs à recherche la ligne et passe a la suivante
 > Tous les forums > Forum Bureautique