[VBA] Erreur de compilation d'une boucle For Each ... Next

WaamO

XLDnaute Nouveau
Bonjour à toutes et à tous.

Je développe une macro VBA sous Excel 2007 (compatible 2003) afin de traiter un fichier CSV.
Ce fichier comporte des lignes dont une seule colonne est utilisée que je souhaite supprimer.

J' ai donc crée une boucle afin d'effectuer cette tâche mais losque je veux la tester j' obtiens une erreur :
"Erreur de compilation, Next sans For".
Pourtant Next est bien précédé de For et tous blocs If dans la boucle sont bien fermés.

Voici le code en question :
Code:
Application.StatusBar = " Suppression des sauts de ligne..."
Set plage = Range("E:E")
For Each Cel In plage
    If x = 0 Then 
        If Cel <> "" And Cel.Offset(0, 1) = "" Then  
            If Cel <> "" And Cel.Offset(1, 1) = "" Then  
                x = 1                                         
                a = Cel.Row                                   
                Rows(a).Select                              
            Else                                                  
               a = Cel.Row                                     
               Rows(a).Select                               
               Selection.Delete Shift:=xlUp               
           End If  
       ElseIf Cel = "" And Cel.Offset(0, 1) = "" Then          
           Exit For                                            
       End If  
   If x = 1 Then                                     
       If Cel <> "" And Cel.Offset(0, 1) = "" Then  
           If Cel <> "" And Cel.Offset(1, 1) = "" Then  
               b = Cel.Row                                
               Rows(b).Select                            
           Else                                           
               b = Cel.Row                             
               Rows(a & ":" & b).Select                   
               Selection.Delete Shift:=xlUp               
               x = 0                                      
           End If  
       Else                                      
           x = 0                                   
           Exit For                                 
       End If  
    End If  
Next Cel
Range("E:E").Select
Selection.Delete Shift:=xlToLeft

J' ai retourné la boucle dans tous les sens et je dois bien admettre que je ne sais pas d'où provient l'erreur.
Mon niveau étant très limité, il se peut que la réponse soit évidente pour une personne avertie, merci donc par avance de votre indulgence et de votre aide.


P.S. Cette boucle est la dernière d'une série qui soit tournaient sans fin soit ne remplissaient pas correctement leur fonction soit étaient vraiment trop lentes.
Il se peut donc que cette version soit aussi boguée car je n'ai pas encore pu la tester.
 

job75

XLDnaute Barbatruc
Re : [VBA] Erreur de compilation d'une boucle For Each ... Next

Bonjour,

Quand vous voulez la valeur de la cellule Cel, il faut toujours préciser .Value : Cel.Value = "" par exemple.

C'est impératif dans les boucles For Each Cel.

A+
 
Dernière édition:
G

Guest

Guest
Re : [VBA] Erreur de compilation d'une boucle For Each ... Next

Bonjour Waamo, Job,


Il manquait un End if dans :

Code:
For Each Cel In plage
    If x = 0 Then 
        If Cel <> "" And Cel.Offset(0, 1) = "" Then  
            If Cel <> "" And Cel.Offset(1, 1) = "" Then  
                x = 1                                         
                a = Cel.Row                                   
                Rows(a).Select                              
            Else                                                  
               a = Cel.Row                                     
               Rows(a).Select                               
               Selection.Delete Shift:=xlUp               
           End If  
       ElseIf Cel = "" And Cel.Offset(0, 1) = "" Then          
           Exit For                                            
       End If  
[SIZE=4][COLOR=red]  End IF 'x=0[/COLOR][/SIZE]
   If x = 1 Then                                     
       If Cel <> "" And Cel.Offset(0, 1) = "" Then  
           If Cel <> "" And Cel.Offset(1, 1) = "" Then  
               b = Cel.Row                                
               Rows(b).Select                            
           Else                                           
               b = Cel.Row                             
               Rows(a & ":" & b).Select                   
               Selection.Delete Shift:=xlUp               
               x = 0                                      
           End If  
       Else                                      
           x = 0                                   
           Exit For                                 
       End If  
    End If  
Next Cel
Range("E:E").Select
Selection.Delete Shift:=xlToLeft

A bientôt
 

WaamO

XLDnaute Nouveau
Re : [VBA] Erreur de compilation d'une boucle For Each ... Next

Quand vous voulez la valeur de la cellule Cel, il faut toujours préciser .Value : Cel.Value = "" par exemple.

Bonjour job75,

Ma macro contient d'autre boucle For Each de même structure qui fonctionnent parfaitement comme celle-ci:

Code:
For Each Cel In plage
    If Cel = "" Then
        Exit For
    ElseIf Cel = "SAV Client" Then
        If x = 0 Then
            a = Cel.Row
            Rows(a).Select
            x = x + 1
        Else
           b = Cel.Row
           Rows(b).Select
        End If
    End If
Next Cel
Rows(a & ":" & b).Select
Selection.Cut
Selection.End(xlDown).Offset(1, 0).Activate
ActiveSheet.Paste
Rows(a & ":" & b).Select
Selection.Delete Shift:=xlUp

J'ai cependant essayé de modifié ma boucle en ajoutant .Value à chaque variable Cel, ce qui n'a malheureusement pas résolu mon problème de compilation.

Merci de votre réponse.
Crdt.
 

00123456789

XLDnaute Nouveau
Re : [VBA] Erreur de compilation d'une boucle For Each ... Next

bonjour
complément d'information.
J'ai une trés vieux fichier (version 95) ou les userform sont dans des onglets mais pas reconnu en temps qu'onglet dans la boucle for each (version 2007). la boucle next est en erreur 13 puisqu'il y a 29 onglets dont 26 lisible.
solution trouvé
PHP:
Sub proctection_blocage()
Dim w As Worksheet
compteur_d_onglet = ActiveWorkbook.Sheets.Count - 3
i = 0
    For Each w In ActiveWorkbook.Sheets
        w.Protect Password:="password", AllowFiltering:=True
        i = i + 1
        If compteur_d_onglet = i Then Exit For
    Next
End Sub

et celà ce passe sans erreur
Merci à tous les foromiens
Un peu de savoir dans un monde de brut.
 

Discussions similaires

Réponses
2
Affichages
176

Statistiques des forums

Discussions
312 493
Messages
2 088 956
Membres
103 990
dernier inscrit
lamiadebz