Recherche find
risama
Messages postés
8
Date d'inscription
Statut
Membre
Dernière intervention
-
risama Messages postés 8 Date d'inscription Statut Membre Dernière intervention -
risama Messages postés 8 Date d'inscription Statut Membre Dernière intervention -
Bonjour à tous,
Je suis nouvelle inscrite sur ce forum qui m'a déjà été très utile dans le passé.
Je rencontre un soucis sur un bout de code avec une recherche find.
Actuellement, je recherche avec find une seule valeur fixe mais j'ai plusieurs lignes dans mon fichier avec à chaque fois des valeurs différentes à chercher et des retours multiples.
voici le code que j'ai essayé de modifier mais la recherche find me renvoie "Nothing":
Est ce que vous auriez une idée de comment je dois faire?
De plus je souhaiterais ne pas avoir à taper à chaque fois Workbooks("Classeur1").Worksheets("Feuil1") car le nom du classeur peut changer et comme j'ai 4 classeurs différents, ca fait pas mal de modifications.
Est-ce que ça serait possible de faire quelque chose comme
Set wb = Workbooks("Classeur1")
Set ws = Worksheets("Feuil2")
Merci d'avance!
Je suis nouvelle inscrite sur ce forum qui m'a déjà été très utile dans le passé.
Je rencontre un soucis sur un bout de code avec une recherche find.
Actuellement, je recherche avec find une seule valeur fixe mais j'ai plusieurs lignes dans mon fichier avec à chaque fois des valeurs différentes à chercher et des retours multiples.
voici le code que j'ai essayé de modifier mais la recherche find me renvoie "Nothing":
Sub test() Dim plage_recherchee As Range, pointeur As Integer, n As Integer, Val_cherchee Worksheets("Feuil2").Activate 'pour cherchée la valeur une ligne après l'autre For n = Range("A" & Rows.Count).End(xlUp).Row To 1 Step -1 pointeur = 0 With Workbooks("Classeur1").Worksheets("Feuil1") derligc = .Range("A" & Rows.Count).End(xlUp).Row 'valeur cherchée qui change en fonction de la ligne Val_cherchee = Range("A" & n) With .Range("A1:A" & derligc) Set C = .Find(Val_cherchee, LookIn:=xlValues, LookAt:=xlWhole) If Not C Is Nothing Then firstaddress = C.Address Do Range("B" & pointeur) = C.Offset(, 2) pointeur = pointeur + 1 Set C = .FindNext(C) 'ajouter une ligne pour chaque valeur trouvée If Not C Is Nothing And C.Address <> firstaddress Then Rows(pointeur).Insert shift:=xlShiftDown End If Loop While Not C Is Nothing And C.Address <> firstaddress End If End With End With Next n End Sub
Est ce que vous auriez une idée de comment je dois faire?
De plus je souhaiterais ne pas avoir à taper à chaque fois Workbooks("Classeur1").Worksheets("Feuil1") car le nom du classeur peut changer et comme j'ai 4 classeurs différents, ca fait pas mal de modifications.
Est-ce que ça serait possible de faire quelque chose comme
Set wb = Workbooks("Classeur1")
Set ws = Worksheets("Feuil2")
Merci d'avance!
A voir également:
- Recherche find
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Find and mount - Télécharger - Récupération de données
- Rechercher ou entrer l'adresse mm - recherche google - Guide
- Recherche photo - Guide
- Je recherche une chanson - Guide
9 réponses
Bonjour
pointeur = 0
puis
Range("B" & pointeur) = C.Offset(, 2)
Au premier passage, il ne trouvera jamais la cellule B0, il faut initialiser le pointeur à 1.
Pourquoi partir de la Feuille2, aller sur la feuille 1 si vous ne revenez jamais sur la feuille 2.
Si tout se déroule sur le même classeur, inutile de préciser le nom du classeur,
With Workbooks("Classeur1").Worksheets("Feuil1") à supprimer
et remplacez With .Range("A1:A" & derligc) par With activesheet.Range("A1:A" & derligc).
Range("B" & pointeur)= C.Offset(, 2).Value remplacer par Range("B" & pointeur).value= C.Offset(x, 2).Value (vous avez oublié le N° de ligne dans le décalage, remplacez le x par le N° de ligne)
Voici le code corrigé (n'oubliez pas de remplacé la valeur x).
bonne journée
cdlt
pointeur = 0
puis
Range("B" & pointeur) = C.Offset(, 2)
Au premier passage, il ne trouvera jamais la cellule B0, il faut initialiser le pointeur à 1.
Pourquoi partir de la Feuille2, aller sur la feuille 1 si vous ne revenez jamais sur la feuille 2.
Si tout se déroule sur le même classeur, inutile de préciser le nom du classeur,
With Workbooks("Classeur1").Worksheets("Feuil1") à supprimer
et remplacez With .Range("A1:A" & derligc) par With activesheet.Range("A1:A" & derligc).
Range("B" & pointeur)= C.Offset(, 2).Value remplacer par Range("B" & pointeur).value= C.Offset(x, 2).Value (vous avez oublié le N° de ligne dans le décalage, remplacez le x par le N° de ligne)
Voici le code corrigé (n'oubliez pas de remplacé la valeur x).
Sub test() Dim plage_recherchee As Range, pointeur As Integer, n As Integer, Val_cherchee 'pour cherchée la valeur une ligne après l'autre For n = Range("A" & Rows.Count).End(xlUp).Row To 1 Step -1 pointeur = 1 derligc = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row 'valeur cherchée qui change en fonction de la ligne Val_cherchee = Range("A" & n) With ActiveSheet.Range("A1:A" & derligc) Set C = .Find(Val_cherchee, LookIn:=xlValues, LookAt:=xlWhole) If Not C Is Nothing Then firstaddress = C.Address Do Range("B" & pointeur).Value = C.Offset(x, 2).Value pointeur = pointeur + 1 Set C = .FindNext(C) 'ajouter une ligne pour chaque valeur trouvée If C.Address <> firstaddress Then Rows(pointeur).Insert shift:=xlShiftDown Loop While Not C Is Nothing And C.Address <> firstaddress End If End With Next n End Sub
bonne journée
cdlt
Bonjour Frenchie83,
Tout d'abord, merci d'avoir pris le temps de répondre à ma question.
Après avoir posté ma question, j'ai continué à travailler dessus et j'ai obtenu le bout de code suivant, qui fonctionne:
Pour répondre à une de vos questions, je travaille avec plusieurs classeurs excel.
J'ai d'ailleurs un autre soucis à ce propos. Le nom de mes fichiers dans lesquels je vais chercher mes valeurs seront partiellement connus, de type "classeur1 S32" classeur1 étant connu et S32 variable. Avec le code précédent, je n'arrive pas à utiliser le nom de fichier variable avec With.
Est ce que vous auriez une idée?
Merci
Tout d'abord, merci d'avoir pris le temps de répondre à ma question.
Après avoir posté ma question, j'ai continué à travailler dessus et j'ai obtenu le bout de code suivant, qui fonctionne:
Dim plage_recherchee As Range, pointeur As Integer, l As Integer, Val_cherchee For l = Range("B" & Rows.Count).End(xlUp).Row To 9 Step -1 pointeur = 0 Val_cherchee = Range("B" & l) With Workbooks("Classeur2").Worksheets("Feuil1") derligc = .Range("A" & Rows.Count).End(xlUp).Row With .Range("A1:A" & derligc) Set C = .Find(Val_cherchee, LookIn:=xlValues, LookAt:=xlWhole) If Not C Is Nothing Then firstAddress = C.Address Do 'recherche n° Range("N" & l) = C.Offset(, 1) pointeur = pointeur + 1 l = l + 1 Set C = .FindNext(C) If Not C Is Nothing And C.Address <> firstAddress Then Rows(l).Insert shift:=xlShiftDown End If Loop While Not C Is Nothing And C.Address <> firstAddress End If End With End With l = l - pointeur Next l
Pour répondre à une de vos questions, je travaille avec plusieurs classeurs excel.
J'ai d'ailleurs un autre soucis à ce propos. Le nom de mes fichiers dans lesquels je vais chercher mes valeurs seront partiellement connus, de type "classeur1 S32" classeur1 étant connu et S32 variable. Avec le code précédent, je n'arrive pas à utiliser le nom de fichier variable avec With.
Sub test2() Dim chemin As String Dim VariableFeuille As Workbook Dim plage_recherche As Range, point As Integer, Val_cherche chemin = ThisWorkbook.Path & "\" Workbooks.Open Filename:=chemin & Dir(chemin & "Classeur1 *.xls") Set VariableFeuille = Activeworkbooks.Name point = 0 Val_cherche = Range("B2") With Workbooks(VariableFeuille).Sheets("Feuil1") derligc = .Range("A" & Rows.Count).End(xlUp).Row .... End with End sub
Est ce que vous auriez une idée?
Merci
Bonjour
Workbooks.Open Filename:=chemin & Dir(chemin & "Classeur1 *.xls")
Si vous mettez "Classeur1 *.xls", Excel ouvre le premier classeur qui trouve, mais comment va -t-il faire pour les suivants? Vous devez créer une variable pour ouvrir chaque classeur et remplacer * par la variable, cette variable sera incrémentée à chaque passage.
Avec ça, vous devriez pouvoir vous en sortir
cdlt
Workbooks.Open Filename:=chemin & Dir(chemin & "Classeur1 *.xls")
Si vous mettez "Classeur1 *.xls", Excel ouvre le premier classeur qui trouve, mais comment va -t-il faire pour les suivants? Vous devez créer une variable pour ouvrir chaque classeur et remplacer * par la variable, cette variable sera incrémentée à chaque passage.
VarClass="Classeur1 S" & le N° de classeur & ".xls" Workbooks.Open Filename:=chemin & Dir(chemin & VarClass) point = 0 Val_cherche = Range("B2") With ActiveWorkbook.Sheets("Feuil1")
Avec ça, vous devriez pouvoir vous en sortir
cdlt
J'ai essayé malheureusement j'ai une erreur d'exécution 9 "L'indice n'appartient pas à la sélection", à la ligne With ActiveWorkbook.Sheets("Feuil1")
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour,
Au dessus de mon code j'ai: avec en gras la ligne où j'ai une erreur
Au dessus de mon code j'ai: avec en gras la ligne où j'ai une erreur
Sub test() Dim chemin As String Dim plage_recherche As Range, point As Integer, Val_cherche chemin = ThisWorkbook.Path & "\" Workbooks.Open Filename:=chemin & Dir(chemin & "Commande *.xls") point = 0 Val_cherche = Range("B2") With ActiveWorkbook.Sheets("Feuil1") derligc = .Range("A" & Rows.Count).End(xlUp).Row With .Range("A1:A" & derligc) Set C = .Find(Val_cherche, LookIn:=xlValues, LookAt:=xlWhole) If Not C Is Nothing Then firstAddress = C.Address
Bonjour
Workbooks.Open Filename:=chemin & Dir(chemin & "Commande *.xls")
Comment s'appelle le fichier que vous voulez ouvrir?
Telle que vous l'avez saisie, il cherche le fichier qui s'appelle
"Commande *.xls", or, je ne pense pas que ayez pu enregistrer un fichier sous cette forme, il faut remplacer * par une valeur.
la ligne appropriée devrait plutôt avoir la forme suivante:
Workbooks.Open Filename:=chemin & Dir(chemin & "Commande xxx.xls")
mettez le vrai nom du fichier et réessayez.
A+
Workbooks.Open Filename:=chemin & Dir(chemin & "Commande *.xls")
Comment s'appelle le fichier que vous voulez ouvrir?
Telle que vous l'avez saisie, il cherche le fichier qui s'appelle
"Commande *.xls", or, je ne pense pas que ayez pu enregistrer un fichier sous cette forme, il faut remplacer * par une valeur.
la ligne appropriée devrait plutôt avoir la forme suivante:
Workbooks.Open Filename:=chemin & Dir(chemin & "Commande xxx.xls")
mettez le vrai nom du fichier et réessayez.
A+
Alors, je vous propose via la macro, d'appeler une boîte de dialogue dans laquelle vous rentrerez le N° de la semaine devotre choix.
remplacez la ligne "Workbooks.Open Filename:=chemin & Dir(chemin & "Commande *.xls")" par:
remplacez la ligne "Workbooks.Open Filename:=chemin & Dir(chemin & "Commande *.xls")" par:
Dim Sem As lng Semaine = "Sélectionnez un N° de semaine" Sem = InputBox(Semaine) Workbooks.Open Filename:=chemin & Dir(chemin & "Commande S" & Sem & ".xls"), essayez et dites-moi si ça marche
J'ai essayé mais j'obtiens toujours la même erreur: "l'indice n'appartient pas à la sélection" sur la ligne With Workbooks("Commande S" & Sem).Sheets("Feuil1").
Dim chemin As String Dim plage_recherche As Range, point As Integer, Val_cherche Dim Sem As Long chemin = ThisWorkbook.Path & "\" Semaine = "Sélectionner un n° de semaine" Sem = InputBox(Semaine) Workbooks.Open Filename:=chemin & Dir(chemin & "Commande S" & Sem & ".xls") point = 0 Val_cherche = ThisWorkbook.Sheets("Tableau").Range("B2") With Workbooks("Commande S" & Sem).Sheets("Feuil1") derligc = .Range("A" & Rows.Count).End(xlUp).Row