VBA Find

Résolu
dudu -  
lermite222 Messages postés 8724 Date d'inscription   Statut Contributeur Dernière intervention   -
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é)



A voir également:

4 réponses

lermite222 Messages postés 8724 Date d'inscription   Statut Contributeur Dernière intervention   1 191
 
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
dudu
 
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
Info
 
Bonjour,

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


Info
0
dudu
 
merci ça marche mieux comme ça
0
lermite222 Messages postés 8724 Date d'inscription   Statut Contributeur Dernière intervention   1 191
 
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