IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Problème Erreur de compilation "For Sans Next"


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 5
    Points : 5
    Points
    5
    Par défaut Problème Erreur de compilation "For Sans Next"
    Bonjour à tous,je suis étudiant en école d'ingénieur et sans connaissance particulière du langage "vba" (c'est ma toute première macro-excel). Après avoir longuement cherché sur internet je suis confronté à une erreur de compilation du type "For sans Next". Mon but à travers la réalisation de cette macro est de réaliser un tri-sélectif en fonction du type d'erreur "warning","error","information" placé dans une colonne d'un classeur excel, en effet dans le classeur initial les informations sont classées par tranche horaire.J'ai donc réalisé le script suivant en m'inspirant de divers forums (en particulier celui-ci).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
     Sub TRITAB()
     
        '1ere Partie du Tri'
     
        Dim TableauInit() As Variant
        Dim i, j, k1, k2, k3, NbLignes, NbColonnes As Integer
        Dim buffer() As Variant
        Dim TableauTri1() As Variant
        Dim TableauTri2() As Variant
        Dim TableauTri3() As Variant
        Dim TableauTri4() As Variant
        Dim temp1, temp2, temp3 As String
        Dim Taille_t1, Taille_t2, Taille_t3 As Long
     
        TableauInit = Range("A:G").Formula
     
     
        temp1 = "Error"
        temp2 = "Warning"
        temp3 = "Information"
        k1 = "0"
        k2 = "0"
        k3 = "0"
        NbColonnes = "7"
        NbLignes = "1044"
     
     
        For i = 1 To NbLignes
             If ((TableauInit(i, 1)) = temp1) Then
     
                buffer = TableauInit(i, 1)
                TableauTri1(k1, j) = buffer
                i = i + 1
                k1 = k1 + 1
     
             End If
             If ((TableauInit(1, 1)) = temp2) Then
     
                buffer = TableauInit(i, 1)
                TableauTri2(k2, j) = buffer
                i = i + 1
                k2 = k2 + 1
     
             End If
             If ((TableauInit(i, 1)) = temp3) Then
     
                buffer = TableauInit(i, 1)
                TableauTri3(k3, j) = buffer
                i = i + 1
                k3 = k3 + 1
     
             End If
     
             Taille_t1 = UBound(TableauTri1)
             Taille_t2 = UBound(TableauTri2)
             Taille_t3 = UBound(TableauTri3)
             Taille = Taille_t1 + Taille_t2 + Taille_t3
     
             ReDim TableauTri4(1 To Taille)
     
     
            'For Z = 1 To Taille_t1'
               'TableauTri4(Z) = TableauTri1(Z)'
            'Next Z '
     
            'For W = 1 To Taille_t2'
              'TableauTri4(Taille_t1 + W) = TableauTri2(W)'
            'Next W'
     
            For Y = 1 To Taille_t3
              TableauTri4(Taille_t2 + Y) = TableauTri3(Y)
            Next Y
     
            Range("A:G").Formula = TableauTri4 '
     
    End Sub
    Cependant celui ci ne fonctionne pas et m'indique une erreur de compilation du type "For Sans Next" ,même quand je place l'ensemble des boucles for (les 3 dernières en commentaire). De plus lorsque l'erreur se manifeste elle sélectionne en bleu le "End Sub" final.
    Voila voila merci d'avance pour votre compréhension et votre aide.

  2. #2
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 951
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 951
    Points : 5 671
    Points
    5 671
    Par défaut
    Bonjour,

    Vérifie bien, moi ça me saute aux yeux !

  3. #3
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Il te faut indenter ton code, de cette façon, c'est plus lisible et tu peux tout de suite voir où manque le Next. Un conseil, quand tu crée une boucle, inscris le For I = 1 to x puis 2 lignes au dessous inscris tout de suite Next I et ensuite, tu écris le code entre ces deux "balises" et applique cette façon de faire à toutes les boucles que tu crée et je te conseille de faire de même pour les If ... End If et Select Case ... End Select :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
     
    Sub TRITAB()
     
        '1ere Partie du Tri'
     
        Dim TableauInit() As Variant
        Dim i, j, k1, k2, k3, NbLignes, NbColonnes As Integer
        Dim buffer() As Variant
        Dim TableauTri1() As Variant
        Dim TableauTri2() As Variant
        Dim TableauTri3() As Variant
        Dim TableauTri4() As Variant
        Dim temp1, temp2, temp3 As String
        Dim Taille_t1, Taille_t2, Taille_t3 As Long
     
        TableauInit = Range("A:G").Formula
     
     
        temp1 = "Error"
        temp2 = "Warning"
        temp3 = "Information"
        k1 = "0"
        k2 = "0"
        k3 = "0"
        NbColonnes = "7"
        NbLignes = "1044"
     
     
        For i = 1 To NbLignes
     
            If ((TableauInit(i, 1)) = temp1) Then
     
                buffer = TableauInit(i, 1)
                TableauTri1(k1, j) = buffer
                i = i + 1
                k1 = k1 + 1
     
            End If
     
            If ((TableauInit(1, 1)) = temp2) Then
     
                buffer = TableauInit(i, 1)
                TableauTri2(k2, j) = buffer
                i = i + 1
                k2 = k2 + 1
     
            End If
     
            If ((TableauInit(i, 1)) = temp3) Then
     
                buffer = TableauInit(i, 1)
                TableauTri3(k3, j) = buffer
                i = i + 1
                k3 = k3 + 1
     
            End If
     
            Taille_t1 = UBound(TableauTri1)
            Taille_t2 = UBound(TableauTri2)
            Taille_t3 = UBound(TableauTri3)
     
            Taille = Taille_t1 + Taille_t2 + Taille_t3
     
            ReDim TableauTri4(1 To Taille)
     
     
            'For Z = 1 To Taille_t1'
            'TableauTri4(Z) = TableauTri1(Z)'
            'Next Z '
     
            'For W = 1 To Taille_t2'
            'TableauTri4(Taille_t1 + W) = TableauTri2(W)'
            'Next W'
     
            For Y = 1 To Taille_t3
     
                TableauTri4(Taille_t2 + Y) = TableauTri3(Y)
     
            Next Y
     
        Next i'<--- c'est ici...!
     
        Range("A:G").Formula = TableauTri4 '
     
    End Sub
    Hervé.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 5
    Points : 5
    Points
    5
    Par défaut Erreur "For Sans Next"
    Ah oui j'avais trop la tête dedans pour le voir.
    Merci beaucoup pour vos réponses rapides.
    Maintenant ce problème résolu je suis confronté à un second problème j'ai une erreur d'exécution cette fois ci lorsque je souhaite concaténer les 3 tableaux en copiant d'abord le 1er dans TableauTri4 (cela fonctionne car je les places en égalité directe sans indice) puis le second dans ce même tableau mais à partir de la Taille_T1 du premier tableau et la sa ne fonctionne plus et de même pour le 3ème tableau .L'erreur est "l'indice n'appartient pas à la sélection".
    De plus lorsque je force le code en placant en commentaire ces deux tableaux (TableauTri2 et TableauTri3) je voulais au moins vérifier que le tri fonctionnait en observant le TableauTri1 cependant il est vide je ne comprend pas surement que ma technique de copie via le buffer ne fonctionne pas.

    Voici mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    Sub TRITAB()
     
        '1ere Partie du Tri'
     
        Dim TableauInit() As Variant
        Dim i, j, k1, k2, k3, NbLignes, NbColonnes As Integer
        Dim buffer() As Variant
        Dim TableauTri1() As Variant
        Dim TableauTri2() As Variant
        Dim TableauTri3() As Variant
        Dim TableauTri4() As Variant
        Dim temp1, temp2, temp3 As String
        Dim Taille_t1 As Integer, Taille_t2 As Integer, Taille_t3 As Integer
     
        TableauInit = Range("A:G").Formula
     
     
        temp1 = "Error"
        temp2 = "Warning"
        temp3 = "Information"
        k1 = "0"
        k2 = "0"
        k3 = "0"
        NbColonnes = "7"
        NbLignes = "1044"
     
        ReDim TableauTri1(1 To NbLignes, 1 To NbColonnes)
        ReDim TableauTri2(1 To NbLignes, 1 To NbColonnes)
        ReDim TableauTri3(1 To NbLignes, 1 To NbColonnes)
     
        For i = 1 To NbLignes
             If ((TableauInit(i, 1)) = temp1) Then
     
                buffer = TableauInit(i, 1)
                TableauTri1(k1, j) = buffer
                i = i + 1
                k1 = k1 + 1
     
             End If
             If ((TableauInit(1, 1)) = temp2) Then
     
                 TableauInit(i, 1) = TableauTri2(k2, j)
                i = i + 1
                k2 = k2 + 1
     
             End If
             If ((TableauInit(i, 1)) = temp3) Then
     
                buffer = TableauInit(i, 1)
                TableauTri3(k3, j) = buffer
                i = i + 1
                k3 = k3 + 1
     
             End If
     
     
     
             Taille_t1 = UBound(TableauTri1)
             Taille_t2 = UBound(TableauTri2)
             Taille_t3 = UBound(TableauTri3)
             Taille = Taille_t1 + Taille_t2 + Taille_t3
     
             ReDim TableauTri4(1 To Taille, 1 To NbColonnes)
     
     
                k2 = "1"
                k3 = "1"
     
     
            TableauTri4 = TableauTri1
     
     
            'For w = 1 To Taille_t2
     
              'TableauTri4(Taille_t1+w) = TableauTri2(w)
     
            'Next w '
     
            'For Y = 1 To Taille_t3'
     
              'TableauTri4(Taille_t1+Taille_t2 + Y, k3) = TableauTri3(Y, k3)'
     
            'Next Y'
     
            Next i
     
            Sheets.Add.Name = "Tri10"
     
            Sheets("Tri1").Range("A:G").Formula = TableauTri4
     
     
     
    End Sub
    Merci d'avance pour vos réponses et le temps que vous m'accordez.

Discussions similaires

  1. Excel vba : Erreur de compilation for sans next
    Par BENNASR dans le forum Excel
    Réponses: 2
    Dernier message: 26/11/2014, 11h05
  2. [XL-2007] Erreur de compilation : Next sans For
    Par benjamin_malaussene dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 12/04/2014, 17h43
  3. Problème! Erreur de compilation Caml.
    Par jocven dans le forum Caml
    Réponses: 6
    Dernier message: 09/01/2012, 01h19
  4. Erreur de compilation Next sans For
    Par November-Oscar dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 12/11/2011, 21h01
  5. maven 2 problème erreur de compilation
    Par jigz77 dans le forum Maven
    Réponses: 5
    Dernier message: 02/08/2007, 12h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo