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

  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é
    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
    Content que ça ai résolu ton problème !

    Pour ce qu'il en est de ton nouveau problème, pour commencer tu peux changer ton "Goto test" par un "Exit For", l'effet sera le meme puisque ton label se situe juste apres la boucle (et puis j'aime pas trop les goto :p)

    Ensuite pour ton problème d'objet, tu essais d'assigner une référence à l'application excel "CreateObject("Excel.Application")" dans des variables de type string, c'est normal que ça plante ! :p Retire toutes les lignes contenant "CreateObject("Excel.Application")" elle n'ont pas d'utilité...

  7. #7
    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

  8. #8
    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

  9. #9
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    181
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 181
    Par défaut
    Citation Envoyé par Godzestla Voir le message
    Salut Decondelite
    Courageux. toujours. mais pour ce genre d'assistance ou il fait traire le client, pour moi c'est pas lol. Désolé pour lui.
    c pas que tu dois me traire pour t'expliquer, mais c'est tous ce que j'ai, visual basic m'affiche cette erreur sans me signaler ou ça se trouve. donc ...

    Citation Envoyé par Fouinard Voir le message
    le compilateur ne te donne pas une ligne ? ou ne bloque pas sur une lors de l'erreur ?
    oui il ne me signale aucune ligne

  10. #10
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut
    Citation Envoyé par nsqualli Voir le message
    c pas que tu dois me traire pour t'expliquer, mais c'est tous ce que j'ai, visual basic m'affiche cette erreur sans me signaler ou ça se trouve. donc ...
    Dans ce cas, tu cliques le bouton <Debug> de la fenêtre d'erreur et il saute à la ligne qui plante.

  11. #11
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    181
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 181
    Par défaut
    Citation Envoyé par Godzestla Voir le message
    Dans ce cas, tu cliques le bouton <Debug> de la fenêtre d'erreur et il saute à la ligne qui plante.
    Génial non ?
    y'a pas de debug

  12. #12
    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
    normalement quand ça plante t'as une fenetre qui s'affiche et qui t'inique l'erreur, et en bas t'as le choix entre fin et debugage

    avec ce que je t'ai indiqué ça ne marche toujours pas ?

  13. #13
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    181
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 181
    Par défaut
    Citation Envoyé par Fouinard Voir le message
    normalement quand ça plante t'as une fenetre qui s'affiche et qui t'inique l'erreur, et en bas t'as le choix entre fin et debugage

    avec ce que je t'ai indiqué ça ne marche toujours pas ?
    apparement pas chez moi, car j'ai une fenetre avec ok et aide .

    mais sinon j'ai toujours la meme erreur

  14. #14
    Expert confirmé

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    contenu = Active.Range.Formula



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    contenu = ActiveCell.Formula

  15. #15
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    181
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 181
    Par défaut dsl
    desole si je te fais vomir, mais c'est la premiere fois que je manipule les macros excel

  16. #16
    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
    Godzestla voulait dire que si on n'expose pas tout le problème quand on le demande, il n'aime pas poser des tas de questions (et parfois plusieurs fois les mêmes) pour ENFIN avoir les éléments nécessaires pour plancher et répondre.

    En ce qui concerne Like, je te suggère de relire l'aide Visual Basic en ce qui concerne cet opérateur: il est fait pour être utilisé avec des caractères spéciaux, sinon il sert à illustrer le proverbe "pourquoi faire simple quand on peut faire compliqué".

    C'est une erreur d'exécution que tu as maintenant, plus une erreur de compilation.
    Ton problème c'est toujours le goto: bannis les goto, ou au moins ne mets jamais de goto qui envoie vers un point extérieur à la boucle.

  17. #17
    Expert confirmé

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Par défaut
    Ce n'est pas moi que cela fait vomir...
    C'est là que se situe l'erreur d'objet que tu as.
    Il n'existe pas d'objet Active. L'interpréteur VBE te vomit son message d'erreur, mais, si tu remplace ton Active.Range par un objet qui existe, ActiveCell, alors là, il est content !


    Je pense avoir une idée de ce que tu veux faire.
    Ceci n'y correspondrait-il pas ?
    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
    Option Explicit
    Option Compare Text
     
    Sub renseigner()
        Dim ornCellule As Range
        Const DistF2T As Long = 9       'nombre de décalages pour passer de F à T
        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 ornCellule In Range("F1").EntireColumn.Cells
            'Si la valeur de la ornCellulelule est EVO
            If ornCellule.Value = "Evo" Then
                'Alors, selon le cas de la valeur de la ornCellulelule de la même ligne, colonne T
                Select Case ornCellule.Offset(0, 9).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 ornCellulelule correspondante dans la colonne B
                        ornCellule.Offset(0, DistF2B).Font.Color = vbRed
                End Select
            'si la ornCellulelule de la colonne F n'équivaut pas EVO
            Else
                'il n'y a rien à faire non plus
            End If
        Next
    End Sub

  18. #18
    Expert confirmé

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Par défaut
    Citation Envoyé par nsqualli Voir le message
    y'a pas de debug
    C'est "Débogage" en français

  19. #19
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    181
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 181
    Par défaut Meri bcp
    Merciiii bcpppppp ça marche a merveille, c'est vraiment ce que je voulais.
    milles merci

  20. #20
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    181
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 181
    Par défaut autre question
    si je veux faire un if avec plusieurs conditions du genre " if condition1 and condition2" comment je peux le faire en VBA?
    merci

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

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