VBA Find

Résolu/Fermé
dudu - 9 févr. 2011 à 11:29
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 - 9 févr. 2011 à 15:13
Bonjour,

avant d'ouvrir une ligne dans une liste pour une nouvelle valeur je voudrai vérifier si elle n'existe pas dèjà dans la liste.
J'ai écrit le code suivant. Quand la valeur est absente j'ai l'erreur 91.
Pouvez-vous m'aider ?
Merci d'avance

Dim ProjetRecherché As Range
Dim Boucle1 As Long
Dim Dernièreligne As Long
Dim Posit As Range
Dim Plage As Range

Set Plage = Workbooks("V1106.xls").Sheets("Version").Range(Cells(3, 2), Cells(Dernièreligne, 2))
Set ProjetRecherché = Workbooks("PSICE-Pilotage version transverse.xls").Sheets("Donnees version").Cells(Boucle1, 9)
Posit = Plage.Find(ProjetRecherché)



4 réponses

lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
9 févr. 2011 à 12:25
Bonjour,
Et quand la valeur existe, tu n'a pas d'erreur ? parce que d'après ton code, Boucle1 =0 ?
L'erreur 91 n'est pas en rapport avec ce que tu dis...
Erreur 91 = "Variable objet ou variable de bloc With non définie"
Donc je pense que c'est bien a cause de Boucle1 qui est à 0
A+
0
Boucle1 est bien valorisé.
Voilà tout le code, j'avais mis seulement un extrait.
Lorsque la valeur cherchée est présente le code "Posit = Plage.Find(ProjetRecherché)" fonctionne, Posit prend la valeur de ProjetRecherché qui a été trouvé).
Lorsque la valeur est absente, le code "Posit = Plage.Find(ProjetRecherché)" déclenche l'erreur 91.
Dim ProjetRecherché As Range
Dim Boucle1 As Long
Dim Dernièreligne As Long
Dim Posit As Long
Dim Plage As Range


Sub récupversion()

Version = Workbooks("V1106.xls").Sheets("Paramètre").Cells(2, 2)
Boucle1 = 4
ligne = 2


' recherche de la dernière ligne de la feuille V1103.xls\version
For ligne = 2 To 9999
If Workbooks("V1106.xls").Sheets("Version").Cells(ligne, 1) = "" Then
Dernièreligne = ligne - 1
ligne = 99999
End If
Next

' enrichissement de la liste V1103.xls\version à partir de la liste PSICE-Pilotage version transverse.xls\Donnees version
While Boucle1 < 9999

If Workbooks("PSICE-Pilotage version transverse.xls").Sheets("Donnees version").Cells(Boucle1, 7) = Version And _
Workbooks("PSICE-Pilotage version transverse.xls").Sheets("Donnees version").Cells(Boucle1, 13) <> "UPFC" Then
Set Plage = Workbooks("V1106.xls").Sheets("Version").Range(Cells(3, 2), Cells(Dernièreligne, 2))
Set ProjetRecherché = Workbooks("PSICE-Pilotage version transverse.xls").Sheets("Donnees version").Cells(Boucle1, 9)
Posit = Plage.Find(ProjetRecherché)
If Posit < 0 Then
Dernièreligne = Dernièreligne + 1
Workbooks("V1106.xls").Sheets("Version").Cells(Dernièreligne, 1) = Version
Workbooks("V1106.xls").Sheets("Version").Cells(Dernièreligne, 2) = Workbooks("PSICE-Pilotage version transverse.xls").Sheets("Donnees version").Cells(Boucle1, 9)
Workbooks("V1106.xls").Sheets("Version").Cells(Dernièreligne, 3) = Workbooks("PSICE-Pilotage version transverse.xls").Sheets("Donnees version").Cells(Boucle1, 2)
Workbooks("V1106.xls").Sheets("Version").Cells(Dernièreligne, 4) = Workbooks("PSICE-Pilotage version transverse.xls").Sheets("Donnees version").Cells(Boucle1, 13)
Workbooks("V1106.xls").Sheets("Version").Cells(Dernièreligne, 5) = Workbooks("PSICE-Pilotage version transverse.xls").Sheets("Donnees version").Cells(Boucle1, 61)
Workbooks("V1106.xls").Sheets("Version").Cells(Dernièreligne, 6) = Workbooks("PSICE-Pilotage version transverse.xls").Sheets("Donnees version").Cells(Boucle1, 14)
GoTo fin
End If
End If

If Workbooks("PSICE-Pilotage version transverse.xls").Sheets("Donnees version").Cells(Boucle1, 7) = "" Then
Boucle1 = 9998
End If
fin:
Boucle1 = Boucle1 + 1
Wend

End Sub
0
Bonjour,

    If Not (Plage.Find(ProjetRecherché) Is Nothing) Then
        Set Posit = Plage.Find(ProjetRecherché)
    Else
        MsgBox "Introuvable"
    End If
    
    Adresse = Resul.Address


Info
0
merci ça marche mieux comme ça
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
9 févr. 2011 à 15:13
Je n'ai pas ton classeur alors je sais pas tester mais tu pourrais éventuellement mettre...
    On Error Goto Fin
    Posit = Plage.Find(ProjetRecherché)
    On Error Goto 0
Et tu ferais bien d'un peu étudier les mots clés "With" et "End With" ça te ferais un code plus lisible et surtout beaucoup plus cour.
A+
0