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 :

Boucle for


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    181
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 181
    Par défaut Boucle for
    bonjour,
    j'utilise office 2003, et j'ai un probleme dans ma macro avec la boucle for:

    j'ai une erreur qui resort ("erreur de compilation: next sans for")
    pourtant le for existe.

    merci d'avance

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 45
    Par défaut
    Salut,

    tu dois avoir un If (ou autre...) non fermée à l'intérieur de ta boucle entre For et Next

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Par défaut
    Sans le code on ne pourra pas t'aider...

  4. #4
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    181
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 181
    Par défaut probleme resolu
    bon pour ce bleme c'est resolu


    là j'en ai un autre, avec l'erreur suivante ("erreur d'execussion '424': objet requis")

    bon voila le code macro que j'ai ecris , qui sert a travers des regles de gestion de tester si une cellule est renseignée ou non, si non on colore le contenu de la cellule Bi:

    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
    Sub renseigner()
     
    'définition d'une cellule
    Dim cel As Range
     
    Dim contenu As String
    contenu = CreateObject("Excel.Application")
     
    Dim ligne As String
    ligne = CreateObject("Excel.Application")
     
    Dim dev As Double
    'dev = CreateObject("Excel.Application")
     
    Dim numero As String
    numero = CreateObject("Excel.Application")
     
    'declaration d'une var pour le debut de la boucle
    'Dim debut As Range
    'debut = Range("F" & 1).Select
     
    'declaration d'une var pour la fin de la boucle
    'Dim fin As Range
    'fin = Range("F" & 171).Select
     
              '---------------boucle pour tester si devis de développement doit etre reinseigner ou non-----------------
    For Each cel In Range("F" & 1).EntireColumn
     
        'mettre le contenu de la cellule dans la var contenu
        contenu = Active.Range.Formula
     
        'comparaison entre contenu et la chaine de caractere "Evo"
        If contenu Like "Evo" Then
        GoTo Test
        End If
     
    Next cel
     
               '---------teste sur les regles de gestion------------
     
    Test:
            ligne = Range("T1:T171").Formula
            'dev = Range("AG1:AG171").Formula ------ 'deplacer dans le corps du code avant son test
     
            'condition sur la difference avec Check-in
                If ligne <> "CHK" Then
     
                    'condition sur la difference avec Check-in OK
                    If ligne <> "CHK-OK" Then
     
                        'condition sur la difference avec ANA
                        If ligne <> "ANA" Then
     
                            'condition sur la difference avec ANU
                            If ligne <> "ANU" Then
     
                                'condition sur la difference avec ATT
                                If ligne <> "ATT" Then
     
                                    'verifier si devis developpement est mal renseigné
     
                                    dev = Range("AG1:AG171").Formula
                                    If dev Like " " Then
                                                            numero = Range("B1:B171").Formula.Select
                                                            Selection.Font.ColorIndex = 12
                                    End If
                                End If
                            End If
                        End If
                    End If
                End If
    End Sub

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Par défaut
    N'oublie pas de mettre ton code entre 2 balises de CODE, sinon c'est illisible.

    Avant de continuer, faut que tu m'expliques qu'est-ce que c'est que ces CreateObject("Excel.Application") que tu nous a collé partout au début...

    PS: salut godz.
    T'es pas très courageux aujourd'hui non?

  6. #6
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    181
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 181
    Par défaut
    bein vraiment je ne sais pas ou il se situ, car c la seule chose que je reçois apres la compilation .

    merci fouinard pour le next
    pour l'autre probleme j'ai enlevé tous les creatOblect mais j'ai toujours le meme probleme et la meme erreur

    plutot merci pour le go to loool

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 45
    Par défaut
    le compilateur ne te donne pas une ligne ? ou ne bloque pas sur une lors de l'erreur ?

    ensuite je viens de voir, tu peux virer tous tes If et n'en laisser qu'un avec des or entre chaque expression : ligne <> "CHK" OR ligne <> "CHK-OK" OR etc.

    ensuite change
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("F" & 1).EntireColumn
    en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("F1").EntireColumn
    ou alors met cstr(xxx) xxx correspondant à un entier.

    Ensuite change ton test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If contenu Like "Evo" Then
    en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If contenu = "Evo" Then
    et en

  8. #8
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut nsqualli et le forum
    Comme j'arrive après le début de la bataille, mes remarques sont sur la macros existante au temps de la réponse.

    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
    For Each cel In Range("F" & 1).EntireColumn
        contenu = Active.Range.Formula
        If contenu Like "Evo" Then
         GoTo Test
        End If
     
    Next cel
     
               '---------teste sur les regles de gestion------------
     
    Test:
            ligne = Range("T1:T171").Formula
            'dev = Range("AG1:AG171").Formula ------ 'deplacer dans le corps du code avant son test
     
            'condition sur la difference avec Check-in
                If ligne <> "CHK" Then
     
                    'condition sur la difference avec Check-in OK
                    If ligne <> "CHK-OK" Then
     
                        'condition sur la difference avec ANA
                        If ligne <> "ANA" Then
     
                            'condition sur la difference avec ANU
                            If ligne <> "ANU" Then
     
                                'condition sur la difference avec ATT
                                If ligne <> "ATT" Then
     
                                    'verifier si devis developpement est mal renseigné
     
                                    dev = Range("AG1:AG171").Formula
                                    If dev Like " " Then
                                                            numero = Range("B1:B171").Formula.Select
                                                            Selection.Font.ColorIndex = 12
                                    End If
                                End If
                            End If
                        End If
                    End If
                End If
    End Sub

  9. #9
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    181
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 181
    Par défaut Probleme resolu
    Bon a tous ceux qui m'ont vraiment aider
    le probleme est resolu et voila le code final, si ça peut aider quelqu'un d'autre:

    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
    Option Explicit
    Option Compare Text
     
    Sub renseigner2()
        Dim Cel As Range
        Dim var As Range
        Const DistF2T As Long = 14      'nombre de décalages pour passer de F à T
        Const DistF2AG As Long = 27       'nombre de décalages pour passer de F à AG
        Const DistF2B As Long = -4      'nombre de décalages pour passer de F à B
     
                  '---------------boucle pour tester si devis de développement doit etre renseigner ou non-----------------
     
        For Each Cel In Range("F1:F" & Range("F65000").End(xlUp).Row)
     
            'Si la valeur de la Cel est EVO et la cellule du devis est vide
            If Cel.Value = "Evo" And Cel.Offset(0, DistF2AG) = "" Then
                'Alors, selon le cas de la valeur de la cel de la même ligne, colonne T
                Select Case Cel.Offset(0, DistF2T).Value
                    'si l'on a l'une des valeurs suivantes : "CHK", "CHK-OK", "ANA", "ANU", "ATT"
                    Case "CHK", "CHK-OK", "ANA", "ANU", "ATT"
                        'il n'y a rien à faire
                    'sinon
                    Case Else
                        'colorer la Cel correspondante dans la colonne B
                        Cel.Offset(0, DistF2B).Font.Color = vbRed
                End Select
            'si la Cel de la colonne F n'équivaut pas EVO
            Else
                'il n'y a rien à faire non plus
            End If
        Next
    End Sub
    bon courage

  10. #10
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut nsqualli et le forum
    Comme j'arrive après le début de la bataille, mes remarques sont sur la macros existante au temps de la réponse.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    For Each cel In Range("F" & 1).EntireColumn
       contenu = Active.Range.Formula
       If contenu Like "Evo" Then
         GoTo Test
       End If
    Next cel
    Test:
    en le simplifiant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For Each cel In Columns(6)
        If cel = "Evo" Then Exit For
    Next cel
    But de cette boucle ? Trouver "Evo", ça, je crois que je comprends, mais... Que tu le trouve ou pas, tu te retrouves après le "next cel". Tu ne mémorises pas la réponse pour la tester, tu ne fais pas un saut pour éviter le reste du traitement ?

    Quelques Remarques :
    La déclaration des variables est effectuée par Excel lors d'un premier passage => sert à rien d'émailler ton code de Dim. Regroupes-les au début de la macro, ça t'évitera des recherches inutiles et rendra ton code plus lisible.

    Toujours dans le même esprit de lisibilité (quoique un intervenant disait d'être feignant, alors je met en pratique ), évite les ".Formula". Avec du texte ou des valeurs brutes, ça donne le contenu, mais ce que tu cherche est un contenu, pas la formule de la cellule. Donc demande le contenu (.Value) ou rien, parce que value est la propriété par défaut

    Tu parcoures toute la colonne F (s'il n'y a pas de bonne réponse). C'est une perte de temps, le micro a autre chose à faire! Comme tu connais la limite :
    - soit tu ne testes que la plage concernée et pas les autres cellules (il y a d'autres moyens, mais celle-ci est compréhensible) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each cel In Range([F1],[F171])
    - Soit tu testes jusqu'à la dernière cellule non-vide de F
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each cel In Range([F1], [F65536].end(xlup))
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Test:
    ligne = Range("T1:T171").Formula
        If ligne <> "CHK" Then
    ....
    ??? qu'est-ce que tu cherches à faire ??? Comprends pas du tout : tu colles les formules de T1 à T171 dans une variable et tu t'étonnes que tu ais des problèmes.
    Tu fais la même erreur si la variable dev.

    Expliques le but de ta macro : on essayera de t'aider.

    Si tu débutes, ne commence pas à faire une macro intégrale d'un seul coup. À mon d'être un génie, tu te planteras. Il vaut mieux faire une partie de la macro finale, la tester (avec un point d'arrêt et <F8>) et seulement si la partie fait ce que tu espères, tu continues. Sinon tu dépannes, mais comme c'est une petite partie, c'est plus simple. Après tu en refais un bout, et ainsi de suite.
    A+
    PS évite de modifier sans arrêt ton poste initial : comment veux-tu t'y retrouver si les postes ne correspondent à rien de ce que tu as dans ta question!

    Edit :comme il n'y a pas eu de poste entre temps, je continue sur le même :
    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
    Option Explicit
    Option Compare Text
     
    Sub renseigner2()
    Dim Cel As Range
     
    For Each Cel In Range([F1], [F65536].End(xlUp))
        If Cel = "Evo" And Cells(Cel.Row, "AG") = " " And _
           Cells(Cel.Row, "T") <> "CHK" And _
           Cells(Cel.Row, "T") <> "CHK-OK" And _
           Cells(Cel.Row, "T") <> "ANA" And _
           Cells(Cel.Row, "T") <> "ANU" And _
           Cells(Cel.Row, "T") <> "ATT" Then Cel.Offset(0, -4).Font.Color = vbRed
    Next
    End Sub
    Si on a Evo en F et un espace en AG (?) on colorie en rouge le texte de la cellule B

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Boucle for dans un script cmd
    Par nicolas.ganache dans le forum Développement
    Réponses: 4
    Dernier message: 19/07/2004, 16h07
  2. Réponses: 3
    Dernier message: 06/07/2004, 10h21
  3. [Debutant] Batch et Boucle for
    Par ludovic.fernandez dans le forum Scripts/Batch
    Réponses: 8
    Dernier message: 06/05/2004, 19h21
  4. [Swing][boucles] for, do, if .....comment faire simple?
    Par chastel dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 02/05/2004, 22h49
  5. [langage] boucle "for" modification du pas
    Par K-ZimiR dans le forum Langage
    Réponses: 4
    Dernier message: 29/04/2004, 11h54

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