Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

pb boucle if then else

2 réponses
Avatar
Daniel
Bonjour,

Est-ce qu'une âme charitable pourrait me dire pourquoi lorsque je lance
la boucle ci-dessous, j'ai un message me disant "erreur de compilation
Else sans if" or il y a bien un if...

'mes variables
Dim lg As Long
Dim j As Integer

lg = ActiveWorkbook.Sheets("Effectif").Range("A" &
Rows.Count).End(xlUp)(1).Row


'Vérification des valeurs en colonne E

For j = 5 To lg
If Range("E" & j).Value = "Cas1" Or Range("E" & j).Value =
"Cas2" Or Range("E" & j).Value = "Cas3" Then j = j + 1
Else: MsgBox ("Le contenu de la cellule E" & j & " ne
correspond pas à Cas1 ou Cas2 ou Cas3")
Range("E" & j).Select
j = j - 1
End If


et l'aide microsoft... ne m'est pas d'un grand secours ;-(

Else sans If
Office 2013 and later

Une instruction Else doit être précédée d’une instruction If. Cette
erreur est associée à la cause et à la solution suivantes :

Une instruction Else a été utilisée sans instruction If associée.
Vérifiez la structure des autres contrôles de la structure If...End If
et vérifiez qu’ils correspondent bien. Vérifiez également que le blocIf
est correctement formaté.

Pour plus d’informations, sélectionnez l’élément en question et appuyez
sur F1 (dans Windows) ou AIDE (sur Macintosh).

Est-ce qu'une boucle Do until ou while/Wend serait mieux adaptée ?

Je précise que dans le cas présent, je ne peux pas utiliser la
validation des données lors de la saisie (sinon je ne serai pas passé
par une macro).

Merci d'avance d'une aide bienvenue.
Daniel

2 réponses

Avatar
isabelle
bonjour Daniel,
If Range("E" & j).Value = "Cas1" Or Range("E" & j).Value = "Cas2" Or Range("E"
& j).Value = "Cas3" Then
j = j + 1
Else
MsgBox ("Le contenu de la cellule E" & j & " ne correspond pas à Cas1 ou
Cas2 ou Cas3")
Range("E" & j).Select
j = j - 1
End If
isabelle
Le 2017-02-26 à 12:28, Daniel a écrit :
Bonjour,
Est-ce qu'une âme charitable pourrait me dire pourquoi lorsque je lance la
boucle ci-dessous, j'ai un message me disant "erreur de compilation Else sans
if" or il y a bien un if...
'mes variables
Dim lg As Long
Dim j As Integer
lg = ActiveWorkbook.Sheets("Effectif").Range("A" & Rows.Count).End(xlUp)(1).Row
'Vérification des valeurs en colonne E
For j = 5 To lg
If Range("E" & j).Value = "Cas1" Or Range("E" & j).Value = "Cas2" Or
Range("E" & j).Value = "Cas3" Then j = j + 1
Else: MsgBox ("Le contenu de la cellule E" & j & " ne correspond pas à
Cas1 ou Cas2 ou Cas3")
Range("E" & j).Select
j = j - 1
End If
et l'aide microsoft... ne m'est pas d'un grand secours ;-(
Else sans If
Office 2013 and later
Une instruction Else doit être précédée d’une instruction If. Cette erreur est
associée à la cause et à la solution suivantes :
Une instruction Else a été utilisée sans instruction If associée. Vérifiez
la structure des autres contrôles de la structure If...End If et vérifiez qu’ils
correspondent bien. Vérifiez également que le blocIf est correctement formaté.
Pour plus d’informations, sélectionnez l’élément en question et appuyez sur F1
(dans Windows) ou AIDE (sur Macintosh).
Est-ce qu'une boucle Do until ou while/Wend serait mieux adaptée ?
Je précise que dans le cas présent, je ne peux pas utiliser la validation des
données lors de la saisie (sinon je ne serai pas passé par une macro).
Merci d'avance d'une aide bienvenue.
Daniel
Avatar
MichD
Bonjour Daniel,
Isabelle a donné la réponse...
Si tu mets ceci sur la même ligne, L’IF... End If est complet.
If Range("E" & j).Value = "Cas1" Or Range("E" & j).Value = "Cas2" Or Range("E" & j).Value =
"Cas3" Then j = j + 1
Le Else... end if ... n'est pas possible, car il n'y a pas de "If"
Dans la boucle, les "Ranges" vont faire référence à la feuille active
non nécessairement à la feuille "Effectif" ou au classeur actif
si tu as plusieurs classeurs actifs.
Une autre manière d'écrire la même chose :
'--------------------------------------------------------
Sub test()
'mes variables
Dim Lg As Long
Dim L As Integer
With ActiveWorkbook
With .Sheets("Effectif")
Lg = .Range("A" & Rows.Count).End(xlUp)(1).Row
For j = 5 To Lg
Select Case LCase(.Range("E" & j).Value)
Case Is = "cas1", "cas2", "cas3"
j = j + 1
Case Else
MsgBox "Le contenu de la cellule E" & j & _
" ne correspond pas à Cas1 ou Cas2 ou Cas3"
.Range("E" & j).Select
j = j - 1
End Select
Next
End With
End With
End Sub
'--------------------------------------------------------
MichD