En entrée j’ai un tableau excel avec plusieurs Colonnes et plusieurs Lignes. Sur chaque ligne j’ai des cellules comportant du texte qui est souvent identique à d’autres cellules ( Gestion du personnel ). Ce que j’aurais souhaité, c’est que la macro parcourt chaque ligne de mon tableau et si elle tombe sur la valeur que je souhaite rechercher, elle passe à la ligne suivant tout en me copiant la ligne entière où a été trouvé la valeur correspondante vers une autre feuille.
Je vous remercie de l’aide que vous pourrez m’apporter
Edité le 17/05/2008 à 10:33
Tu affectes un objet range à la zone à parcourir
Pour la première recherche, tu utilises sur cet objet la méthode .find pour trouver la première occurence, .findnext pour les suivantes
exemple tiré de l’aide en ligne excel pour chercher la valeur “aaaa”:
With Worksheets(1).Range("a1:a500")
Set c = .Find("aaaa", lookin:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
xxxxxxxxx
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With
A la place des xxxx, tu mets tes lignes pour copier ta sélection dans le fichier de destination.
Pour avoir la ligne entière à partir de la cellule c, tu utilises c.EntireRow
J’ai effectivement tester le code ci dessus et la recherche se fait sans problème. Seul un petit problème persiste au niveau du résultat de ma copie. En effet sur une ligne je peux avoir plusieurs fois la valeur recherchée mais néanmoins une fois la première valeur trouvée je souhaiterai qu’il passe directement à la ligne du dessus. Ayant fouillé sur la méthode find, je pense qu’il doit exister une astuce. Je vous remercie pour l’aide apportée en tout cas
Tu veux passer à la ligne du dessus ou du dessous ?
Dans le second cas, il suffit que mémorise le numero de la ligne (c.row) et que tu ne fasses rien tant qu’il n’a pas changé
J’y avais pensé pendant un moment mais je m’y étais mal pris sans doute car cela ne donnait aucun résultat. Je réessaie demain dans la journée sur mon lieu de travail et revient donner plus de nouvelles demain soir. Merci beaucoup
Me revoilà car j’ai à nouveau un problème sur ma méthode de recherche.
Je m’explique :
Je remplis une Combobox à partir d’une feuille. Jusque là pas de problèmes. Une cellule est de la forme “CED + CT” . Quand j’effectue ma recherche il faudrait qu’il me recherche toutes les cellules correspondantes à CED et à CT. Là mon code fonctionne seulement pour une valeur soit CED où alors CT. Je vous remercie de l’aide que vous pourrez m’apporter.
Mon code de recherche est celui ci.
Dim cpt As Integer
Dim Ligne As Integer
cpt = 8
'On définit la plage pour commencer à rechercher uniquement à partir de la colonne correspondant aux années
'Pour ne pas trouver la valeur cherchée dans un nom d’employé
'Exemple : Andre contient DR
'On parcourt une nouvelle fois le tableau pour tester si la valeur
'Correspond dans le potentiel pour également la copier
'Dans la feuille de synthèse
For i = 8 To ThisWorkbook.Worksheets("Tableau").UsedRange.Rows.Count
If ThisWorkbook.Worksheets("Tableau").Cells(i, 4).Value = Choix_Recherche.ComboBox1.Value Then
ThisWorkbook.Worksheets("Tableau").Cells(i, 4).EntireRow.Copy ThisWorkbook.Worksheets(Choix_Recherche.ComboBox1.Value).Cells(ThisWorkbook.Worksheets(Choix_Recherche.ComboBox1.Value).UsedRange.Rows.Count + 1, 1)
End If
Next i
Evite les goto dans tes fonctions.
D’autant plus qu’ici c’est complètement inutile : puisque le but est de sortir, mets directement un exit sub
Où fais-tu le choix de tes valeurs CED et CT ?
Que contient exactement ta combox ?
ce n’est pas très clair
Ma combobox contient les valeurs définies dans une source car j’ai besoin de faire des sommes pour certaines combinaisons de cellules. Par exemple ma combobox contient “CF” “CE + CT”. En fin de compte par exemple j’ai besoin qu’il recherche toute les celluels corespondantes à CE et à CT bien que dans la combobox il n’y est qu’une seule ligne “CE + CT”.
C’est la même chose
A moins que tu n’aies voulu dire à CE OU à CT ?
Dans ce cas tu n’y arriveras pas directement.
Il faut que parses ta valeur d’entrée sur le +, et que tu fasses la recherche sur le premier critère, puis sur le second.
Il y a peut-être aussi une solution du côté de REGEX.FIND
Tout ca me paraît bien compliqué.
Personnellement, toujours après avoir séparé mes deux critères, j’appliquerais tout simplement un filtre automatique au tableau (possible de lui entrer deux critères traités en OU), et je copierais le réultat obtenu dans la feuille résultante.
Tu peux le faire en macro automatique et t’en inspirer pour écrire ensuite du code propre.