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
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 conditionen 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 IfSalut 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 IfMerci mille fois !