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 :

image

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 if

Bonjour 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 Sub

Encore 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 Sub

bonjour,

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 Sub

A+

Rechercher des sujets similaires à "probleme vba end"