VBA Find

Résolu
dudu -  
lermite222 Messages postés 9042 Statut Contributeur -
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

  1. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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
    1. 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
  2. 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
  3. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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