Problème VBA If-End If
Bonjour,
J'ai un problème sur une macro, c'est que des fois elle fonctionne très bien mais par moment la macro est interminable et ne fonctionne pas. Voici le code ci-dessous :
l'erreur me renvoie au "End If". Si je veux rajouter une condition "ElseIf", ça peut arriver que ça ne fonctionne pas et que la macro cherche infiniment. Et parfois ça remarche après. Je ne comprends absolument pas pourquoi, je ne pense pas faire mauvaise manip.
Merci pour votre aide
bonjour,
peux-tu mettre ton code entre balise (bouton) </> plutôt qu'une image ?
la syntaxe que tu utilises n'est pas correcte (mais tu t'en doutais).
la syntaxe correcte basée sur ton exemple est
if .... then
cells... ....
elseif .... then
cells....
elseif .... then
cells....
....
end ifBonjour h2so4,
Merci pour t'as réponse j'essayerais avec la nouvelle syntaxe.
Si non voici mon code entre balise :
Sub tes2()
For i = 10 To 5000
If Cells(i, 6) = "..." And Cells(i, 15) = "..." Then
Cells(i, 23) = 200
ElseIf Cells(i, 6) = "..." And Cells(i, 15) = "..." And Cells(i, 19) <= "..." Then Cells(i, 23) = 75
ElseIf Cells(i, 6) = "..." And Cells(i, 15) = "..." And Cells(i, 19) <= "..." Then Cells(i, 23) = 65
ElseIf Cells(i, 6) = "..." And Cells(i, 15) = "..." And Cells(i, 19) > "..." Then Cells(i, 23) = 50
ElseIf Cells(i, 6) = "..." And Cells(i, 15) = "..." And Cells(i, 13) = "..." Then Cells(i, 23) = 50
ElseIf Cells(i, 6) = "..." And Cells(i, 15) = "..." And Cells(i, 13) = "..." Then Cells(i, 23) = 50
ElseIf Cells(i, 6) = "..." And Cells(i, 15) = "..." And Cells(i, 13) = "..." Then Cells(i, 23) = 1000
ElseIf Cells(i, 6) = "..." And Cells(i, 15) = "..." Then Cells(i, 23) = 200
Else
Cells(i, 23) = "NA"
End If
Next
End SubEncore merci
bonjour,
voici une réécriture de ton code qui devrait être correcte du point de vue de la structure et de la syntaxe.
Sub tes2()
For i = 10 To 5000
If Cells(i, 6) = "..." And Cells(i, 15) = "..." Then
Cells(i, 23) = 200
ElseIf Cells(i, 6) = "..." And Cells(i, 15) = "..." And Cells(i, 19) <= "..." Then
Cells(i, 23) = 75
ElseIf Cells(i, 6) = "..." And Cells(i, 15) = "..." And Cells(i, 19) <= "..." Then
Cells(i, 23) = 65
ElseIf Cells(i, 6) = "..." And Cells(i, 15) = "..." And Cells(i, 19) > "..." Then
Cells(i, 23) = 50
ElseIf Cells(i, 6) = "..." And Cells(i, 15) = "..." And Cells(i, 13) = "..." Then
Cells(i, 23) = 50
ElseIf Cells(i, 6) = "..." And Cells(i, 15) = "..." And Cells(i, 13) = "..." Then
Cells(i, 23) = 50
ElseIf Cells(i, 6) = "..." And Cells(i, 15) = "..." And Cells(i, 13) = "..." Then
Cells(i, 23) = 1000
ElseIf Cells(i, 6) = "..." And Cells(i, 15) = "..." Then
Cells(i, 23) = 200
Else
Cells(i, 23) = "NA"
End If
Next i
End Subbonjour,
Cette macro n'est pas optimisée : il est possible que son exécution soit un peu longue.
Dans ce cas si elle doit être exécutée souvent préférez un select case !
A+
Merci h2so4 pour t'as réponse
Bonjour galopin01, comment ça fonctionne un select casse ?
Dans l'immédiat c'est impossible à transposer à cause du manque de précision de ton exemple (on ne peut pas traduire (= ""...") ni ""...") dans des select case donc
voir ici : (à la fin)
https://www.excel-pratique.com/fr/vba/conditions
Pour la route je vous ai fait un exemple absurde mébon...
Option Explicit
DefBool Y
Sub TestSelectCase(a%, Optional b% = 22, Optional c% = 42, Optional d% = 60)
Dim Y(1 To 100), i%, s$
'De 1 à 80 on charge vos cellules
For i = 1 To 20
Y(i) = a = i
Next
For i = 21 To 40
Y(i) = b = i
Next
For i = 41 To 60
Y(i) = c = i
Next
For i = 61 To 80
Y(i) = d = i
Next
'ici ce sont les conditions
Y(99) = Y(1) And Y(21) And Y(41)
Y(98) = Y(1) And Y(22) And Y(42)
Y(98) = Y(1) And Y(23) And Y(45)
Y(97) = Y(2) And Y(23) And Y(63)
Y(96) = Y(2) And Y(42) And Y(65)
Y(95) = Y(5)
'Et maintenant on vérifie les nombres envoyés
Select Case True
Case Y(99): s = "A"
Case Y(98): s = "B"
Case Y(97): s = "C"
Case Y(96): s = "D"
Case Else: s = "E"
End Select
MsgBox s
End Sub
Sub Test() 'Lancer cette macro pour vérifier le fonctionnement
TestSelectCase 1, 21, 41 'renvoi A
TestSelectCase 1, 22, 42 'renvoi E
TestSelectCase 1, 23, 45 'renvoi B
TestSelectCase 2, 22, 42, 65 'renvoi D
TestSelectCase 5 'renvoi E
TestSelectCase 1, 21, 41, 63 'renvoi A
TestSelectCase 2, 42, 42 'renvoi E
TestSelectCase 2, 23, 63 'renvoi E
TestSelectCase 2, 42 'renvoi E
End SubA+