Problème de boucle if elseif

Résolu
siamens_duj -  
 siamens_duj -
Bonjour,

J'ai un soucis.
J'ai fais un petit code avec une condition If elseif cependant quand j'execute mon code j'ai une erreur.
En fait j'ai une InputBox "reference", quand j'ecris une valeur dans cette inputbox, cela va regarder toutes mes lignes de la colonne D de 5 à 200.
Si la reference entré correspond à une valeur dans la colonne D alors le contenue de toute la ligne se colorie en bleu sinon cela met " Cette reference n'existe pas".

Mon code ne fonctionne pas trop mal, le seul soucis c'est que, même quand la valeur correspond il m'affiche la MsgBox mais colorie bien la ligne en bleu ..

Reference = InputBox("Saisie de la référence de la pièce : ", Recherche)

For i = 5 To 200

If Reference = Cells(i, 4).Value Then

Cells(i, 4).EntireRow.Font.Color = RGB(4, 139, 154)

ElseIf Reference <> Cells(i, 4).Value Then GoTo fin
fin: MsgBox "Cette référence n'existe pas"
Exit Sub

2 réponses

  1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
     
    bonjour,

    Reference = InputBox("Saisie de la référence de la pièce : ", Recherche)
    
    For i = 5 To 200
    
    If Reference = Cells(i, 4).Value Then
      Cells(i, 4).EntireRow.Font.Color = RGB(4, 139, 154)
    ElseIf Reference <> Cells(i, 4).Value Then 
      MsgBox "Cette référence n'existe pas"
      Exit Sub
    End if
    
    


    Par contre, si tu travailles sous Excel VBA ... plutôt que de faire des boucles pour faire des recherches... regardes la méthode FIND

    https://forums.commentcamarche.net/forum/affich-37621992-methode-find-dans-vba-recherche-de-donnees-sous-excel

    1
    1. siamens_duj
       
      Merci pour votre réponse mais le code que vous avez joint fait exactement ce que fait le mien.
      0
    2. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      Oupsss...
      Essayes ça :
      Sub test()
      
      Dim valCel As String
      
      Reference = InputBox("Saisie de la référence de la pièce : ", Recherche)
      
      For i = 5 To 200
      valCel = Cells(i, 4).Value
      
      If Reference = valCel Then
        Cells(i, 4).EntireRow.Font.Color = RGB(4, 139, 154)
      Else
        MsgBox "Cette référence n'existe pas"
        Exit Sub
      End If
      
      Next
      
      End Sub
      
      

      Mais par contre j'insiste... regardes la méthode FIND ...

      
      
      Sub test2()
      
      Dim celTrouve As Range
      Dim Valeur_Cherchee As Variant
      Dim PlageDeRecherche As Range
      Dim I As Long
      
      Valeur_Cherchee = InputBox("Saisie de la référence de la pièce : ", Recherche)
      Set PlageDeRecherche = ActiveSheet.Range("D1:D200")
      
      Set celTrouve = Cherche(Valeur_Cherchee, PlageDeRecherche)
      If Not celTrouve Is Nothing Then
         I = celTrouve.Row
         Cells(I, 4).EntireRow.Font.Color = RGB(4, 139, 154)
      Else
        MsgBox "Cette référence n'existe pas"
        Exit Sub
      End If
      
      End Sub
      
      Function Cherche(ByVal Valeur_Cherchee, ByVal PlageDeRecherche As Range) As Range
      'déclaration des variables :
      Dim Trouve As Range
      Dim AdresseTrouvee As String
      
      'méthode find, ici on cherche la valeur exacte (LookAt:=xlWhole)
      Set Trouve = PlageDeRecherche.Cells.Find(what:=Valeur_Cherchee, LookAt:=xlWhole)
      
      'traitement de l'erreur possible : Si on ne trouve rien :
      If Trouve Is Nothing Then
          'ici, traitement pour le cas où la valeur n'est pas trouvée
          AdresseTrouvee = Valeur_Cherchee & " n'est pas présent dans " & PlageDeRecherche.Address
          Cherche = Nothing
      Else
          Set Cherche = Trouve
      End If
      Set PlageDeRecherche = Nothing
      Set Trouve = Nothing
      End Function
      
      
      
      0
    3. siamens_duj
       
      Merci beaucoup !
      0
  2. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour a vous deux,
    Le code de jordane45 marche tres bien (en dehors du elseif pas utile), pas comme le votre de depart

    votre code modifie:
    Sub test()
        Reference = InputBox("Saisie de la référence de la pièce : ", Recherche)
        For i = 5 To 200
            If Reference = Cells(i, 4).Value Then
                Cells(i, 4).EntireRow.Font.Color = RGB(4, 139, 154)
                Exit Sub
            End If
        Next i
        MsgBox "Cette référence n'existe pas"
    End Sub


    autre methode Find:

    Sub test1()
        Reference = InputBox("Saisie de la référence de la pièce : ", Recherche)
        Nb = Application.CountIf(Range("D5:D200"), Reference)
        If Nb = 1 Then
            lig = 1
            lig = Columns(4).Find(Reference, Cells(lig, 4), , xlWhole).Row
            Cells(lig, 4).EntireRow.Font.Color = RGB(4, 139, 154)
        Else
            MsgBox "Cette référence n'existe pas"
        End If
    End Sub
    1
    1. siamens_duj
       
      Merci pour votre réponse
      0