Petit souci de macro : instructions if, else if, etc

Salut

Je développe une macro qui permet de tester si des cellules sont vides ou pas.

Si elles sont vides, ça ouvre une inputbox qui permet de renseigner directement l'info manquante.

Bon ça marche bien sauf un test qui bugge, et j'avoue ne pas comprendre du tout pourquoi.

C'est surement simple comme bonjour mais je bidouille dans tous les sens l'ordre de mes if, elseif, end if, et sans résultat.

Je mets donc en pj, pour les âmes charitables, le fichier excel.

Le bug se produit quand la cellule i23 (fournisseur2) est remplie.

Si quelqu'un a une idée... suis preneur

Merci d'avance

Sub test()
'
' test Macro

Dim fournisseur1 As String
Dim tarifournisseur1 As String
Dim produit1 As String

Dim fournisseur2 As String
Dim tarifournisseur2 As String
Dim produit2 As String

Dim fournisseur3 As String
Dim tarifournisseur3 As String
Dim produit3 As String

Dim ajoutfournisseur2 As String
Dim ajoutfournisseur3 As String

If Range("i22") = 0 Then
Range("I22").Select
fournisseur1 = InputBox(Prompt:="Renseigner le fournisseur 1.", Title:="INFO MANQUANTE")
If fournisseur1 = Cancel Then Exit Sub
Range("I22").Value = fournisseur1
End If

If Range("j22") = 0 Then
Range("j22").Select
tarifournisseur1 = InputBox(Prompt:="Renseigner le tarif HT du fournisseur 1.", Title:="INFO MANQUANTE")
If tarifournisseur1 = Cancel Then Exit Sub
Range("j22").Value = tarifournisseur1
End If

'---- c'est entre ces 2 lignes qu'il y a un bug -------------------

If Range("i22") <> 0 And Range("i23") = 0 Then ajoutfournisseur2 = MsgBox("Rajouter un 2e fournisseur ?", vbYesNo)
    If ajoutfournisseur2 = vbYes Then
    Range("i23").Select
    fournisseur2 = InputBox(Prompt:="Renseigner le fournisseur 2.", Title:="INFO MANQUANTE")
    If fournisseur2 = Cancel Then Exit Sub
    Range("i23").Value = fournisseur2

ElseIf Range("i22") <> 0 And Range("i23") <> 0 Then ajoutfournisseur3 = MsgBox("Rajouter un 3e fournisseur ?", vbYesNo)
    If ajoutfournisseur3 = vbYes Then
    Range("i24").Select
    fournisseur3 = InputBox(Prompt:="Renseigner le fournisseur 3.", Title:="INFO MANQUANTE")
    If fournisseur3 = Cancel Then Exit Sub
    Range("i24").Value = fournisseur3
End If
End If

'------------------------------------------------------------------

If Range("i23") <> 0 And Range("j23") = 0 Then
Range("j23").Select
tarifournisseur2 = InputBox(Prompt:="Renseigner le tarif HT du fournisseur 2.", Title:="INFO MANQUANTE")
If tarifournisseur2 = Cancel Then Exit Sub
Range("j23").Value = tarifournisseur2
End If

  MsgBox "La macro s'est terminée correctement"

End Sub
58test.xlsm (17.55 Ko)

Bonjour,

peux tu être plus précis sur le bug. Je crois peut-être que ton erreur peu venir de la façon que tu utilise les If.

- Quand tu écris le code à faire directement après le then, ça clos le IF, ex:

IF condition THEN CodeaFaire
Le code suivant sera executer peut importe le resultat de la condition

en plus il semble y avoir des problèmes avec les end if, est-ce que le code se compile?

Tu pourrais utiliser SELECT CASE pour plus de lisibilité:

If Range("i22") <> 0 And Range("i23") = 0 Then 
    ajoutfournisseur2 = MsgBox("Rajouter un 2e fournisseur ?", vbYesNo)
    SELECT CASE ajoutfournisseur2    
        CASE vbYes
            Range("i23").Select
        CASE ELSE            
            fournisseur2 = InputBox(Prompt:="Renseigner le fournisseur 2.", Title:="INFO MANQUANTE")
            IF fournisseur2 = Cancel then
                Range("i23").Value = fournisseur2
                Exit Sub
            END IF
    END SELECT

ElseIf Range("i22") <> 0 And Range("i23") <> 0 Then 
    ajoutfournisseur3 = MsgBox("Rajouter un 3e fournisseur ?", vbYesNo)
    SELECT CASE ajoutfournisseur3      
        CASE  vbYes
            Range("i24").Select
        CASE ELSE            
            fournisseur3 = InputBox(Prompt:="Renseigner le fournisseur 3.", Title:="INFO MANQUANTE")
            IF fournisseur3 = Cancel then
                Range("i24").Value = fournisseur3
                Exit Sub
            END IF
    END SELECT
End If

Salut Math

Je n'ai pas compris pourquoi ma macro bugguait mais ce que je sais, c'est qu'avec ton idée de SELECT CASE, j'arrive à mes fins.

Pour info, le code qui roule :

    If Range("i22") <> 0 And Range("i23") = 0 Then
        ajoutfournisseur2 = MsgBox("Rajouter un 2e fournisseur ?", vbYesNo)
        Select Case ajoutfournisseur2
            Case vbYes
                Range("i23").Select
                fournisseur2 = InputBox(Prompt:="Renseigner le fournisseur 2.", Title:="INFO MANQUANTE")
                If fournisseur2 = Cancel Then Exit Sub
                    Range("i23").Value = fournisseur2
            Case Else
        End Select
    End If

    If Range("i22") <> 0 And Range("i23") <> 0 Then
        ajoutfournisseur3 = MsgBox("Rajouter un 3e fournisseur ?", vbYesNo)
        Select Case ajoutfournisseur3
            Case vbYes
                Range("i24").Select
                fournisseur3 = InputBox(Prompt:="Renseigner le fournisseur 3.", Title:="INFO MANQUANTE")
                If fournisseur3 = Cancel Then Exit Sub
                    Range("i24").Value = fournisseur3
            Case Else
        End Select
    End If

Merci mille fois !

Rechercher des sujets similaires à "petit souci macro instructions else etc"