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 each Next [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 240
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 240
    Points : 213
    Points
    213
    Par défaut boucle For each Next
    Bonjour a tous et toutes,

    J'ai fait un petit programme qui me permet d'analyser les donnees d'un tableau.
    Ce tableau contient une colonne C avec des date de type (jj/mm/aaaa).
    J'ai rajoute une colonne MOIS (colonne B)ou je voulais inserer le mois correspondant a la date situe dans la colonne C :
    Par exemple , si C3 = 08/03/2009 alors B3 = MARS
    si C4= 01/04/2009 alors C4= AVRIL

    Mais le programme bug sur la boucle " For Each Next".
    Il m'annonce " ERREUR D'EXECUTION 1004. La methode' Range' de l'objet 'global'e a echoue"

    Il faut savoir aussi que le tableau n'est pas fige, chaque jour, des lignes nouvelles viennent s'integrer au tableau d'ou la necessite de recourire a la boucle For each Next pour inserer la valeur MOIS.

    Voici la macro .
    Pour des raisons de lecture et de comprehension, j'ai incere uniquement le bout du programme qui pose probleme.

    Merci de votre aide.

    Sub Macro1()

    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
     
     
     ' Insertion du mois dans la colonne B
    Range("B2").Select
    If Range("B3").Value <> "" Then Range("B2").End(xlDown).Select 'Si la cellule B3 n'est pas vide,
    'on selectionne la derniere cellule non vide de la colonne B. Si B3 est libre, la derniere cellule non vide est B2.
    'Il n'est pas necesaire de se deplacer.
     
    ActiveCell.Offset(1, 1).Select 
    'Enfait, on se positionne sur la premiere cellule non vide de la colonne C (colonne date) situe a droite de la premiere cellule vide de la colonne B (colonne MOIS) .
     
     
    LigDeb = ActiveCell.Row 'ligne active qui correspond a la 1er ligne vide de la colonne B ( colonne MOIS)
    LigFin = Range("C2").End(xlDown).Row 'derniere cellule non vide de la colonne C (colonne MOIS)
     
    For Each Cell In Range(LigDeb & LigFin) 
    Cell.Offset(o, -1) = Format(CDate(Cell), "mmmm")
    Next
     
    End Sub

  2. #2
    Membre confirmé Avatar de drakkar_agfa
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    618
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2008
    Messages : 618
    Points : 638
    Points
    638
    Par défaut
    Bonjour,

    Essais ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    For Each Cell In Range("C" & LigDeb & ":C" & LigFin)
    Ce qui donnera "C2:C30" par exemple.

    Bonne chance!

  3. #3
    Membre expérimenté Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Points : 1 512
    Points
    1 512
    Par défaut
    bonjour essai comme cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub es()
    Dim i As Long
    For i = 2 To Range("c65535").End(xlUp).Row
    Cells(i, 2) = MonthName(Month(Cells(i, 3)))
    Next i
    End Sub

  4. #4
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 240
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 240
    Points : 213
    Points
    213
    Par défaut
    Merci drakkar_agfa

    Ca fonctionne a merveille

    Citation Envoyé par drakkar_agfa Voir le message
    Bonjour,

    Essais ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    For Each Cell In Range("C" & LigDeb & ":C" & LigFin)
    Ce qui donnera "C2:C30" par exemple.

    Bonne chance!
    Bonjour laetitia,

    Merci pour cette reponse mais j'avoue que la reponse de drakkar est moins compliquee...

    Citation Envoyé par laetitia Voir le message
    bonjour essai comme cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub es()
    Dim i As Long
    For i = 2 To Range("c65535").End(xlUp).Row
    Cells(i, 2) = MonthName(Month(Cells(i, 3)))
    Next i
    End Sub

  5. #5
    Membre confirmé Avatar de drakkar_agfa
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    618
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2008
    Messages : 618
    Points : 638
    Points
    638
    Par défaut
    Bonjour,

    La méthode de laetita n'est pas très compliquée, il suffit de la regarde pas à pas.
    Voici sa méthode commenté :
    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
    Sub es()
        Dim i As Long 'déclaration du compteur
     
        'boucle de i = 2 à la dernière cellule complété de la colonne C
        'C'est l'équivalent de partir de la cellule C65536 et de faire "CTRL+Fleche du haut" dans excel
        'et avec le .row on obtient le ligne de cette cellule.
        'Regarde dans l'aide pour .End
        For i = 2 To Range("c65535").End(xlUp).Row
     
            'la cellule de la colonne 2, ligne i (i sera bouclé de 2 à la dernière ligne
            'donc toutes les cellules seront complétées.
            Cells(i, 2) = MonthName(Month(Cells(i, 3)))
     
        'Va au i suivant.
        Next i
    End Sub
    Et voila! (personnelement, c'est la méthode que j'utilise.)

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

Discussions similaires

  1. Lenteur d'une boucle For each next
    Par Val2000 dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 27/05/2013, 11h41
  2. [XL-2007] Boucles For Each Next: problème de défilement des feuilles avec lenteur d'exécution
    Par camelia.w dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 24/12/2011, 20h08
  3. boucle for each next : sauter une valeur
    Par scavenger dans le forum VBScript
    Réponses: 1
    Dernier message: 18/02/2009, 10h15
  4. Boucle For Each Next non entrée
    Par Kareg dans le forum VBA Access
    Réponses: 9
    Dernier message: 21/05/2008, 14h35
  5. [VBA-E]PB sur une boucle for each next
    Par rond24 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 31/07/2006, 15h47

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