VBA Find (encore)
Résolu/Fermé
A voir également:
- VBA Find (encore)
- Vba attendre 1 seconde ✓ - Forum VB / VBA
- Vba récupérer valeur cellule ✓ - Forum VB / VBA
- Mkdir vba ✓ - Forum VB / VBA
- Excel compter cellule couleur sans vba - Guide
- Ava find - Télécharger - Divers Utilitaires
5 réponses
lermite222
Messages postés
8724
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 190
12 févr. 2011 à 15:27
12 févr. 2011 à 15:27
Bonjour,
'On Error Resume Next JAMAIS METTRE DÉTECTION ERREUR QUAND ONT CRÉE LA MACRO
Workbooks.Open Filename:=RDSI
'Workbooks(NomRDSI).Activate Pas besoin, le dernier fichier ouvert est le fichier actif.
' recherche de la dernière ligne de la feuille RDSI
Ta boucle je comprend pas ce que tu veux faire.
A+
'On Error Resume Next JAMAIS METTRE DÉTECTION ERREUR QUAND ONT CRÉE LA MACRO
Workbooks.Open Filename:=RDSI
'Workbooks(NomRDSI).Activate Pas besoin, le dernier fichier ouvert est le fichier actif.
' recherche de la dernière ligne de la feuille RDSI
LastLigne = Sheets("RDSI").[A999999].End(XlUp).Row
Ta boucle je comprend pas ce que tu veux faire.
A+
lermite222
Messages postés
8724
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 190
12 févr. 2011 à 16:40
12 févr. 2011 à 16:40
J'ai penser que tu avais Excel 2007 ou +
Pour la suite, plus le temps maintenant.
A=
LastLigne = Sheets("RDSI").[A65536].End(XlUp).Row
Pour la suite, plus le temps maintenant.
A=
du coup j'ai allégé le code - ci-après
Sub liensRDSI()
' initialisation des variables
Nom = ActiveWorkbook.Name
Feuille1 = ActiveWorkbook.ActiveSheet.Name
Chemin = Application.ThisWorkbook.Path
RDSI = Chemin & "\RDSI.xls"
FeuilleRDSI = "RDSI"
NomRDSI = "RDSI.xls"
Version = Workbooks(Nom).Sheets("Paramètre").Cells(2, 2)
Boucle1 = 3
ligne = 2
' recherche de la dernière ligne + 1 de la feuille V----.xls\version
DernièreLigne = Workbooks(Nom).Sheets(Feuille1).[B65536].End(xlUp).Row + 1
'ouverture de Extract RDSI
'On Error Resume Next
Workbooks.Open Filename:=RDSI
' recherche de la dernière ligne de la feuille RDSI.xls\version
' si Excel 2007 et + ==> LastLigne = Sheets(FeuilleRDSI).[A999999].End(xlUp).Row
LastLigne = Sheets("RDSI").[A65536].End(xlUp).Row
'Set Plage = Workbooks(Nom).Sheets("version").Range(Cells(2, 1), Cells(LastLigne, 3))
Set Plage = Workbooks(NomRDSI).Sheets(FeuilleRDSI).Range(Cells(2, 1), Cells(LastLigne, 3))
While Boucle1 < DernièreLigne
Set ProjetRecherché = Workbooks(Nom).Sheets(Feuille1).Cells(Boucle1, 3)
If Not (Plage.Find(ProjetRecherché) Is Nothing) Then
Workbooks(Nom).Sheets(Feuille1).Cells(Boucle1, 9) = "inexistant"
Else
Workbooks(Nom).Sheets(Feuille1).Cells(Boucle1, 9) = "non"
End If
Boucle1 = Boucle1 + 1
Wend
End Sub
Sub liensRDSI()
' initialisation des variables
Nom = ActiveWorkbook.Name
Feuille1 = ActiveWorkbook.ActiveSheet.Name
Chemin = Application.ThisWorkbook.Path
RDSI = Chemin & "\RDSI.xls"
FeuilleRDSI = "RDSI"
NomRDSI = "RDSI.xls"
Version = Workbooks(Nom).Sheets("Paramètre").Cells(2, 2)
Boucle1 = 3
ligne = 2
' recherche de la dernière ligne + 1 de la feuille V----.xls\version
DernièreLigne = Workbooks(Nom).Sheets(Feuille1).[B65536].End(xlUp).Row + 1
'ouverture de Extract RDSI
'On Error Resume Next
Workbooks.Open Filename:=RDSI
' recherche de la dernière ligne de la feuille RDSI.xls\version
' si Excel 2007 et + ==> LastLigne = Sheets(FeuilleRDSI).[A999999].End(xlUp).Row
LastLigne = Sheets("RDSI").[A65536].End(xlUp).Row
'Set Plage = Workbooks(Nom).Sheets("version").Range(Cells(2, 1), Cells(LastLigne, 3))
Set Plage = Workbooks(NomRDSI).Sheets(FeuilleRDSI).Range(Cells(2, 1), Cells(LastLigne, 3))
While Boucle1 < DernièreLigne
Set ProjetRecherché = Workbooks(Nom).Sheets(Feuille1).Cells(Boucle1, 3)
If Not (Plage.Find(ProjetRecherché) Is Nothing) Then
Workbooks(Nom).Sheets(Feuille1).Cells(Boucle1, 9) = "inexistant"
Else
Workbooks(Nom).Sheets(Feuille1).Cells(Boucle1, 9) = "non"
End If
Boucle1 = Boucle1 + 1
Wend
End Sub
lermite222
Messages postés
8724
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 190
Modifié par lermite222 le 13/02/2011 à 13:21
Modifié par lermite222 le 13/02/2011 à 13:21
J'ignore la cause, mais avec la solution Finf je ne parvient pas à faire une sélection valable..
Par exemple recherche = B et qu'il trouve Bleu il retourne que c'est trouvé.
Essaye quand même...
Mais j'ai employer une autre solution qui fonctionne bien.
Note : possible une ou deux faute de syntaxe, j'ai tester avec les noms de mes classeurs.
A+
L'expérience instruit plus sûrement que le conseil. (André Gide)
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Ça doit se passer sur le forum pour que tous puisse y participer ou en profiter.
Par exemple recherche = B et qu'il trouve Bleu il retourne que c'est trouvé.
Essaye quand même...
Sub TesterFind1() Dim Plage As Range, Wks As Workbook Dim Cel As Range, Chemin As String Dim DerLigne As Long, R As String Set Wks = ThisWorkbook Chemin = Wks.Path Workbooks.Open (Chemin & "\RDSI.xls") DerLigne = Sheets("RDSI").Range("A65536").End(xlUp).Row Set Plage = Sheets("RDSI").Range("A1:A" & DerLigne) Wks.Activate Sheets("Version").Select DerLigne = Range("C65536").End(xlUp).Row For Each Cel In Range("C1:C" & DerLigne) If Not Plage.Find(Cel.Text) Is Nothing Then R = "NON" Else R = "Inexistant" Cells(Cel.Row, 9) = R Next Cel End Sub
Mais j'ai employer une autre solution qui fonctionne bien.
Sub testerFind2() Dim PlageExt As Range, PlageInt As Range Dim Nom As String Dim CelExt As Range, CelInt As Range Dim Chemin As String, B As Boolean Nom = ThisWorkbook.Name Chemin = ThisWorkbook.Path Workbooks.Open (Chemin & "\RDSI.xls") Sheets("RDSI").Select Set PlageExt = Range("A1:A" & Range("A65536").End(xlUp).Row) Workbooks(Nom).Activate Sheets("Version").Select Set PlageInt = Range("C1:C" & Range("C65536").End(xlUp).Row) For Each CelInt In PlageInt B = True For Each CelExt In PlageExt If CelInt = CelExt Then Cells(CelInt.Row, 9) = "NON" B = False: Exit For End If Next CelExt If B Then Cells(CelInt.Row, 9) = "Inexistant" Next CelInt End Sub
Note : possible une ou deux faute de syntaxe, j'ai tester avec les noms de mes classeurs.
A+
L'expérience instruit plus sûrement que le conseil. (André Gide)
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Ça doit se passer sur le forum pour que tous puisse y participer ou en profiter.
Merci
Impossible de faire fonctionner ces fonction. CelExt renvoi systématiquement nothing !!!
Du coup je suis revenu à la programmation clmassique avec une boucle de comparaison à chaque occurence du fichier de départ.; 166 X 1500 ... C'est long, mais ça marche.
Merci pour l'aide
A+
Pour acquérir de l'expérience rien ne vaut l'apprentissage auprès d'experts chevronnés, patients et passionnés par le transferts de compétence. (mon Grandpère)
Si tu te tapes sur les doigts avec ton marteau, ne t'en veux pas, c'est le métier qui rentre. (toujours mon Grandpère)
;-)
Impossible de faire fonctionner ces fonction. CelExt renvoi systématiquement nothing !!!
Du coup je suis revenu à la programmation clmassique avec une boucle de comparaison à chaque occurence du fichier de départ.; 166 X 1500 ... C'est long, mais ça marche.
Merci pour l'aide
A+
Pour acquérir de l'expérience rien ne vaut l'apprentissage auprès d'experts chevronnés, patients et passionnés par le transferts de compétence. (mon Grandpère)
Si tu te tapes sur les doigts avec ton marteau, ne t'en veux pas, c'est le métier qui rentre. (toujours mon Grandpère)
;-)
lermite222
Messages postés
8724
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 190
14 févr. 2011 à 16:39
14 févr. 2011 à 16:39
Les 2 codes FONCTIONNENT, je vois pas ce qui pourrait donner cette erreur
Et me semble que tu te décourage asser vite.
Sur quel ligne l'erreur ?
Et me semble que tu te décourage asser vite.
Sur quel ligne l'erreur ?
J'avais un peu de taf et devais arriver à un résultat rapide.
C'est fait.
Je reviens donc sur ton code.
Il ne fait pas d'erreur, mais il ne trouve aucune valeur de PlageInt dans PlageExt. Alors qu'il devrait.
En testant, j'ai vu que l'instruction Range("A65536").End(xlUp).Row remontait 1 alors qu'il y plus de 14000 lignes.
Je l'ai remplacé par :
LastLigne = Sheets("RDSI").[A65536].End(xlUp).Row
Set PlageExt = Range("A2:A" & LastLigne)
et là c'est ok.
Mais, CelExt n'est jamais renseigné. je me suis mis un compteur et un test sur la valeur de ligne à partir de laquelle je devrai trouver le 1er CelInt (11865) :
For Each CelInt In PlageIn
B = True
For Each CelExt In PlageExt
a = a + 1
If a > 11865 Then
MsgBox (a & " " & CelInt & " " & CelExt)
End If
If CelInt = CelExt Then
Cells(CelInt.Row, 9) = "oui"
B = False: Exit For
End If
Next CelExt
If B Then Cells(CelInt.Row, 9) = "non
Next CelInt
le display donne : 11866 006024
la valeur de a, la valeur de CelInt, mais pas de valeur pour CelExt.
??
C'est fait.
Je reviens donc sur ton code.
Il ne fait pas d'erreur, mais il ne trouve aucune valeur de PlageInt dans PlageExt. Alors qu'il devrait.
En testant, j'ai vu que l'instruction Range("A65536").End(xlUp).Row remontait 1 alors qu'il y plus de 14000 lignes.
Je l'ai remplacé par :
LastLigne = Sheets("RDSI").[A65536].End(xlUp).Row
Set PlageExt = Range("A2:A" & LastLigne)
et là c'est ok.
Mais, CelExt n'est jamais renseigné. je me suis mis un compteur et un test sur la valeur de ligne à partir de laquelle je devrai trouver le 1er CelInt (11865) :
For Each CelInt In PlageIn
B = True
For Each CelExt In PlageExt
a = a + 1
If a > 11865 Then
MsgBox (a & " " & CelInt & " " & CelExt)
End If
If CelInt = CelExt Then
Cells(CelInt.Row, 9) = "oui"
B = False: Exit For
End If
Next CelExt
If B Then Cells(CelInt.Row, 9) = "non
Next CelInt
le display donne : 11866 006024
la valeur de a, la valeur de CelInt, mais pas de valeur pour CelExt.
??
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
lermite222
Messages postés
8724
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 190
Modifié par lermite222 le 14/02/2011 à 20:24
Modifié par lermite222 le 14/02/2011 à 20:24
le display donne : 11866 006024
Ce qui veux dire que ta donnée est en texte, Si dans l'autre c'est un nombre.. 6024, tu ne trouvera jamais de concordance.
Mais ton test n'est pas bon
Regarde où se trouve la même donnée dans l'autre classeur
et tu remplace le XX par le N° de la ligne
L'expérience instruit plus sûrement que le conseil. (André Gide)
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Ça doit se passer sur le forum pour que tous puisse y participer ou en profiter.
Ce qui veux dire que ta donnée est en texte, Si dans l'autre c'est un nombre.. 6024, tu ne trouvera jamais de concordance.
Mais ton test n'est pas bon
Regarde où se trouve la même donnée dans l'autre classeur
et tu remplace le XX par le N° de la ligne
Sub testerFind2() Dim PlageExt As Range, PlageInt As Range Dim Nom As String Dim CelExt As Range, CelInt As Range Dim Chemin As String, B As Boolean Nom = ThisWorkbook.Name Chemin = ThisWorkbook.Path Workbooks.Open (Chemin & "\RDSI.xls") Sheets("RDSI").Select Set PlageExt = Range("A2:A" & Range("A65536").End(xlUp).Row) Workbooks(Nom).Activate Sheets("Version").Select Set PlageInt = Range("C1:C" & Range("C65536").End(xlUp).Row) For Each CelInt In PlageInt B = True For Each CelExt In PlageExt If CelInt.Row = 11185 & CelExt.Row = XX Then MsgBox ( CelInt.Value & " " & CelExt.Value) End If If CelInt = CelExt Then Cells(CelInt.Row, 9) = "NON" B = False: Exit For End If Next CelExt If B Then Cells(CelInt.Row, 9) = "Inexistant" Next CelInt End Sub
L'expérience instruit plus sûrement que le conseil. (André Gide)
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Ça doit se passer sur le forum pour que tous puisse y participer ou en profiter.
12 févr. 2011 à 15:50
Merci de ton aide
NB : quand j'exécute ta commande pour trouver la dernière ligne, j'ai erreur 424 objet requis ???