Problème de boucle if elseif

Résolu/Fermé
siamens_duj - 13 nov. 2015 à 14:44
 siamens_duj - 17 déc. 2015 à 09:11
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

jordane45 Messages postés 38310 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 novembre 2024 4 705
13 nov. 2015 à 15:34
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
siamens_duj
13 nov. 2015 à 16:02
Merci pour votre réponse mais le code que vous avez joint fait exactement ce que fait le mien.
0
jordane45 Messages postés 38310 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 novembre 2024 4 705
13 nov. 2015 à 16:28
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
Merci beaucoup !
0
f894009 Messages postés 17206 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 22 novembre 2024 1 710
13 nov. 2015 à 16:27
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
Merci pour votre réponse
0