Erreur de compilation Else sans IF

Exy

XLDnaute Nouveau
Bonjour,

Je découvre le VBA et j'ai un problème.

Je m'explique: j'ai un tableau de 20 emplacements associés à des codes barre, et si on place un x sous l'un des emplacements cela signifie que le produit est manquant. Et je le cherche alors dans une liste de codes barre.
Et j'ai un message d'erreur :"Erreur de compilation : Else sans If"

voilà le code que j'ai tapé :
Code:
Sub CB()
    'Déclaration des variables
    Dim CB As Integer
    Dim ligne As Variant
    Dim c As Variant
    Dim i As Integer
    Dim x As String
    
    
    For i = 2 To 22
    
       
        If IsEmpty(Sheets(2).Cells(4, i)) Then MsgBox "C'est bon pas de manquant"
        
        Else
        Cells(2, i).Value = CB   'Permet de lire le code barre dans l'emplacement
        
        End If
    
    
                 c = Sheets(1).Range("A2:A10000").Find(What:=CB, lookat:=xlWhole)
                'Compare le code barre de la fourniture manquante avec la liste des codes barre
                

        ligne = c.Row 'Détermine la ligne ou se trouve le code barre
    
             
    
        Cells(ligne, 2) = x 'Permet de placer x en face du code barre manquant dans la liste
        
    Next
           
End Sub

Je ne comprends pas d'autant que j'ai cherché à travers ce forum et je n'ai pas trouvé d'excplication adequate à mon problème.

Je vous remercie d'avance pour vos réponses
 

Efgé

XLDnaute Barbatruc
Re : Erreur de compilation Else sans IF

Bonjour Exy et bienvenu sur le forum
Si tu mets la condition sur une seule ligne tu ne peux pas utiliser de Else et il ne faut pas de End IF
donc
VB:
If IsEmpty(Sheets(2).Cells(4, i)) Then
    MsgBox "C'est bon pas de manquant"
Else
    Cells(2, i).Value = CB   'Permet de lire le code barre dans l'emplacement
End If
Cordialement
 

Dranreb

XLDnaute Barbatruc
Re : Erreur de compilation Else sans IF

Bonsoir

Avec la 2ième syntaxe du If, celle où une instruction suit immédiatement le Then sur la même ligne, il est possible de mettre encore plusieurs autres instructions derrière, séparées par des ":" ou même par des Else qu'il est donc ainsi quand même possible d'utiliser (mais pas des ElseIf, Else If en deux mot si, mais pas trop conseillé, utiliser alors plutôt la 1ère syntaxe).
Mais il ne faut pas de End If à la fin: la série d'instructions soumise à la condition s'arrête avec la ligne logique, c'est à dire la dernière ligne physique n'étant plus continuée sur la suivante par un " _". Et ça termine le If, donc un Else situé après ne saurait y correspondre.
 

Zdz16

XLDnaute Occasionnel
Re : Erreur de compilation Else sans IF

Bonjour;

Par expérience, je vous conseille de ne jamais utiliser la syntaxe réduite de If...Then ... End if.
De ne jamais mettre plus d'une instruction par ligne. Cela vous évitera une maintenance fastidieuse et compliquée.
Il est plus facile de relire
If .... Then
... Traitement ...
Else
... Traitement ...
End if

Cordialement
 

Dranreb

XLDnaute Barbatruc
Re : Erreur de compilation Else sans IF

Bonjour.

Pas d'accord. Plusieurs instructions par lignes permettent un code plus tassé permettant de voir d'un coup dans une seule page une bien plus grande partie de l'algorithme, donc de sa structure, et donc de retrouver plus facilement comment il est organisé globalement. Cela permet de plus d'apporter une information, en y mettant de préférence ensembles des instructions en rapport les unes avec les autres. Dans ce contexte la syntaxe réduite du If est très pratique pour des cas simples tenant sur une seule ligne.
 

Zdz16

XLDnaute Occasionnel
Re : Erreur de compilation Else sans IF

Un bon code, est un code structuré, lisible, commenté , facile à maintenir, (sans par exemple des Goto et des étiquettes, c'est une plais), des procédures et fonctions qui ne font que ce qu'on leur demande pas plus ni moins. Ceci dit, les compilateurs s'en moquent de la structure. L'essentiel, c'est que la maintenance et la recherche d'anomalies est rapide.
Je suis effaré lorsque dans un classeur utilisateur, je vois une formule qui prends la moitié de la page de l'éditeur avec des fonctions imbriquées à gogo (J'en vois sur le forum également). Le pire c'est lorsque l'utilisateur fait appelle à nous, car il ne comprend plus ce quil a fait (Ecrit).

C'est l'objet de mes propos.

Cordialement
 

Misange

XLDnaute Barbatruc
Re : Erreur de compilation Else sans IF

Je suis effaré lorsque dans un classeur utilisateur, je vois une formule qui prends la moitié de la page de l'éditeur avec des fonctions imbriquées à gogo (J'en vois sur le forum également). Le pire c'est lorsque l'utilisateur fait appelle à nous, car il ne comprend plus ce quil a fait (Ecrit).

C'est l'objet de mes propos.

Cordialement

Bonjour,
Certaines personnes sont plus à l'aise avec les formules, d'autres avec le VBA, d'autres utilisent l'une ou l'autre approche suivant ce qui est recherché.
Il faut garder en tête qu'une formule est toujours beaucoup plus rapide lorsqu'elle est écrite dans la feuille que lorsque le calcul est effectué en VBA.
Si le calcul doit être fait sur un grand nombre de lignes, et qu'il doit être mis à jour fréquemment, il est et de loin préférable d'utiliser une formule.
Si le calcul ne doit être fait qu'une fois et que le résultat du calcul suffit dans le classeur, il est souvent préférable de le faire par macro, ou de le faire par formule puis de faire un copier/coller valeurs.
 

Zdz16

XLDnaute Occasionnel
Re : Erreur de compilation Else sans IF

Pas de souci, si c'est du One Shot ou du privé/Perso.

Mais si c'est du multi-utilisateurs, dans un contexte de production standardisé et d'utilisation centralisé avec des impactes sur d'autres domaines, il est plus judicieux, à mon avis, de simplifier de sorte que la maintenance et les évolutions soient rapides.
C'est tout ce que je voulais écrire. Je vous avoue, il m'est arrivé de refuser la validation d'une application à cause de cela, car imaginer que quelqu'un d'autre prend la suite derrière (Telle est la question mes chers).

Cordialement
(Bon échange d'avis)
 

Efgé

XLDnaute Barbatruc
Re : Erreur de compilation Else sans IF

Bonjour à tous,
Quelque soit la méthode choisie, si l'on est dans un contexte de suivi d'un code, la seule manière d'être compréhensible est de documenter son projet.
Après, les if Then Else sur une ligne ou plusieurs, franchement, ne faison pas de mal aux Diptères communs
Cordialement
 

Zdz16

XLDnaute Occasionnel
Re : Erreur de compilation Else sans IF

Salut les amis;
Vous trouvez normal qu'on écrit un code comme suit (Exemple réel dans une application, j'ai simplement changé le nom de la procédure) :
Code:
Sub Main()
    Call UneProc
Fin:
End Sub

Sub UneProc()
On Error GoTo Fin: Application.ScreenUpdating = False
Dim pt As PivotTable: Dim pf As PivotField
Set pt = ActiveSheet.PivotTables(1): pt.ManualUpdate = True: With pt
.InGridDropZones = True: .RowAxisLayout xlTabularRow: .TableStyle2 = ""
.DisplayContextTooltips = False: .ShowDrillIndicators = False: End With
For Each pf In pt.PivotFields: pf.AutoSort xlAscending, pf.Name: pf.Subtotals(1) = True: pf.Subtotals(1) = False: Next
For Each pf In pt.DataFields: pf.Function = xlSum: pf.NumberFormat = "#,##0.00_);[Red](#,##0.00)": Next
With pt.PivotFields("Tot de Mnt"): .Caption = "Total Mnt": GoTo 250: End With
With pt.PivotFields("Cum de Mnt")
    .Caption = "Tot mnt"
End With
250: pt.ManualUpdate = False
Application.ScreenUpdating = True
pt.PivotCache.MissingItemsLimit = xlMissingItemsNone
End Sub

Cordialement
 

Si...

XLDnaute Barbatruc
Re : Erreur de compilation Else sans IF

salut

@Zdz16 : un code hors contexte n'est guère fait pour arranger les choses ; la discussion peut partir dans tous les sens (pour qui, quand, comment...) :D!

Commenter ou pas ?
- pour les procédures simples : je laisse du boulot aux autres.
- pour les procèdures longues et compliquées : je n'aime pas en alourdir la lecture avec des lignes et des lignes d'explication. Le débutant a plutôt intérêt à commencer par des choses simples. L'utilisateur non averti, à la recherche simplement d'un outil, n'en aura que faire.

Pour en revenir à la demande initiale :

Je ne rédige pas une page de « Codes pour les Nuls » et je préfère dire à Exy que la macro écrite présente à mes yeux beaucoup de point noirs (obscures).

Code VBA.png

J’ai annoté quelques lignes mais n’ai pas fourni une correction totale (j’aurais eu besoin du contexte).
Toutefois un point est essentiel pour moi : savoir où la macro est écrite et quelle sont les feuilles concernées !
 

Discussions similaires

Réponses
29
Affichages
990

Statistiques des forums

Discussions
312 393
Messages
2 087 961
Membres
103 686
dernier inscrit
maykrem