Recherche find
Fermé
risama
Messages postés
8
Date d'inscription
mardi 6 août 2013
Statut
Membre
Dernière intervention
2 septembre 2013
-
Modifié par risama le 23/08/2013 à 15:10
risama Messages postés 8 Date d'inscription mardi 6 août 2013 Statut Membre Dernière intervention 2 septembre 2013 - 2 sept. 2013 à 17:40
risama Messages postés 8 Date d'inscription mardi 6 août 2013 Statut Membre Dernière intervention 2 septembre 2013 - 2 sept. 2013 à 17:40
A voir également:
- Recherche find
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Recherche adresse - Guide
- Recherche musique - Guide
- Recherche par image - Guide
- Recherche privée - Guide
9 réponses
Frenchie83
Messages postés
2240
Date d'inscription
lundi 6 mai 2013
Statut
Membre
Dernière intervention
11 août 2023
338
24 août 2013 à 10:49
24 août 2013 à 10:49
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
risama
Messages postés
8
Date d'inscription
mardi 6 août 2013
Statut
Membre
Dernière intervention
2 septembre 2013
30 août 2013 à 16:39
30 août 2013 à 16:39
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
Frenchie83
Messages postés
2240
Date d'inscription
lundi 6 mai 2013
Statut
Membre
Dernière intervention
11 août 2023
338
30 août 2013 à 17:48
30 août 2013 à 17:48
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
risama
Messages postés
8
Date d'inscription
mardi 6 août 2013
Statut
Membre
Dernière intervention
2 septembre 2013
30 août 2013 à 18:32
30 août 2013 à 18:32
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")
Frenchie83
Messages postés
2240
Date d'inscription
lundi 6 mai 2013
Statut
Membre
Dernière intervention
11 août 2023
338
30 août 2013 à 18:44
30 août 2013 à 18:44
et au-dessus, qu'est-ce qu'il y a?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
risama
Messages postés
8
Date d'inscription
mardi 6 août 2013
Statut
Membre
Dernière intervention
2 septembre 2013
2 sept. 2013 à 08:25
2 sept. 2013 à 08:25
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
Frenchie83
Messages postés
2240
Date d'inscription
lundi 6 mai 2013
Statut
Membre
Dernière intervention
11 août 2023
338
2 sept. 2013 à 09:12
2 sept. 2013 à 09:12
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+
risama
Messages postés
8
Date d'inscription
mardi 6 août 2013
Statut
Membre
Dernière intervention
2 septembre 2013
Modifié par risama le 2/09/2013 à 11:13
Modifié par risama le 2/09/2013 à 11:13
C'est justement mon problème. Le nom du fichier n'est pas fixe, toutes les semaines il changera, uniquement le début du nom reste le même. Par exemple, "Commande S32" "Commande S33". Dans mon code pour "Commande *.xls" * correspond au texte que je ne connait pas, qui varie toutes les semaines.
Frenchie83
Messages postés
2240
Date d'inscription
lundi 6 mai 2013
Statut
Membre
Dernière intervention
11 août 2023
338
2 sept. 2013 à 11:58
2 sept. 2013 à 11:58
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
risama
Messages postés
8
Date d'inscription
mardi 6 août 2013
Statut
Membre
Dernière intervention
2 septembre 2013
2 sept. 2013 à 12:55
2 sept. 2013 à 12:55
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
Frenchie83
Messages postés
2240
Date d'inscription
lundi 6 mai 2013
Statut
Membre
Dernière intervention
11 août 2023
338
2 sept. 2013 à 13:04
2 sept. 2013 à 13:04
Il y a 2 fois le chemin
Workbooks.Open Filename:=chemin & "Commande S" & Sem & ".xls"
Workbooks.Open Filename:=chemin & "Commande S" & Sem & ".xls"
risama
Messages postés
8
Date d'inscription
mardi 6 août 2013
Statut
Membre
Dernière intervention
2 septembre 2013
2 sept. 2013 à 13:13
2 sept. 2013 à 13:13
Mon problème persiste avec le bloc With
Frenchie83
Messages postés
2240
Date d'inscription
lundi 6 mai 2013
Statut
Membre
Dernière intervention
11 août 2023
338
2 sept. 2013 à 13:18
2 sept. 2013 à 13:18
With Sheets("Feuil1")
risama
Messages postés
8
Date d'inscription
mardi 6 août 2013
Statut
Membre
Dernière intervention
2 septembre 2013
2 sept. 2013 à 17:40
2 sept. 2013 à 17:40
Super ça fonctionne!
Merci beaucoup!
Merci beaucoup!