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


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Femme Profil pro
    Gestionnaire de paies
    Inscrit en
    Octobre 2016
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Gestionnaire de paies
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Octobre 2016
    Messages : 77
    Points : 23
    Points
    23
    Par défaut Boucle For Each Next
    Bonjour,

    Je souhaiterais faire une boucle avec for each ... next mais je n'arrive pas à poser mon code

    Voici ce que je souhaite faire :

    Sur la feuille active,
    si C12 est différent de ""
    si A1 = "SEM A"
    alors je copie les cellules B8 -> H14 (soit range("B8").resize(6,6)) de la feuille "SEM A" en E12 -> K18 de la feuille active
    Voici un debut de code...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Set Cell = c12
    Dim Cell As String
    For Each Cell In ActiveSheet
    If Cell = "" Then
    If ("A1") = "SEM A" Then
    Sheets("SEM A").Range("B8").Resize(6, 6).Copy
    Cell.Offset(0, 2).Paste
    En suite je souhaite boucler toutes les 11 cellules vers le bas, soit offset (11,0) soit :
    si C23 est différent de ""
    si A1 = "SEM A"
    alors je copie les cellules B19 -> H25 (soit range("B19").resize(6,6)) de la feuille "SEM A" en E23 -> K29 de la feuille active

    Et je boucle jusqu’à ce que une cellule est soit vide.

    Merci à tous ceux qui pourront m'aider...

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 773
    Points : 28 634
    Points
    28 634
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Comme tu as certainement dû le constater, cette procédure renvoie une erreur dès la deuxième ligne si tu n'as pas mis l'instruction Option Expilcit en tête de module et dès la première ligne si tu as placé cette instruction
    Règle n°1 : On déclare une variable avant de lui passer une valeur.

    Autre erreur une boucle For Each Object In Collection.... Next parcoure une collection ou une plage de cellule.
    Il faudra donc déclarer la variable Cell comme un objet Range et non pas comme un String

    Je me suis arrêté là dans la lecture
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre à l'essai
    Femme Profil pro
    Gestionnaire de paies
    Inscrit en
    Octobre 2016
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Gestionnaire de paies
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Octobre 2016
    Messages : 77
    Points : 23
    Points
    23
    Par défaut
    Effectivement... Merci Philippe
    J'ai donc modifié et mis :

    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
     
     
    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
     
     
    Dim Cell As Range
    Set Cell = Range("c12")
     
    If [B1] = "DUP" Then
     
    For Each Cell In ActiveSheet
    If Cell = "" Then
    If ("A1") = "SEM A" Then
    Sheets("SEM A").Range("B8").Resize(6, 6).Copy
    Cell.Offset(0, 2).Paste
     
     
    Next
     
     
    End If
     
    End Sub

  4. #4
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour
    Avant d'aller plus loin :
    As-tu une idée de ce que va parcourir ta boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each Cell In ActiveSheet
    ?
    On n'écrit jamais sans savoir avec précision de ce cela signifie exactement
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  5. #5
    Membre à l'essai
    Femme Profil pro
    Gestionnaire de paies
    Inscrit en
    Octobre 2016
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Gestionnaire de paies
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Octobre 2016
    Messages : 77
    Points : 23
    Points
    23
    Par défaut
    Oui je souhaite parcourir la feuille active toutes les 11 lignes à compter du la cellule C12.

  6. #6
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Oui je souhaite parcourir la feuille active
    1) est un non-sens. On ne parcourt pas une feuille, mais ses cellules. ActiveSheet est une feuille, ses cellules sont activesheet.Cells
    2) parcourir la totalité des cellules d'une feuille ? Sous office 2007 ou ultérieur, tu aurais le temps d'aller prendre un café, voire un repas complet, même en ne faisant que parcourir, sans rien faire d'autre !
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  7. #7
    Membre à l'essai
    Femme Profil pro
    Gestionnaire de paies
    Inscrit en
    Octobre 2016
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Gestionnaire de paies
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Octobre 2016
    Messages : 77
    Points : 23
    Points
    23
    Par défaut
    Donc que me conseilles-tu ?

  8. #8
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Impossible de te conseiller avec précision sans plus de précisions.
    Je devine que tu ne souhaites traiter que les cellules de la colonne C ne sont pas vides. J'ignore à ce propos si leur contenu est ou non le résultat de formules ou une valeur "simple" (auquel cas on procèderait autrement)
    Tu peux toujours ne parcourir que les cellules de la colonne C, de la première ligne à la dernière ligne remplie (Range("C" & Rows.count).end(xlup).row)
    Dans ce parcours, tu vérifies si la cellule parcourue est ou non remplie et regardes ce qu'il y a en colonne A (utilise Offset(0,-2) et écris les instructions si lectures satisfaisantes.
    Enfin : plutôt que de parcourir par une boucle For Each, parcours donc avec une boucle For ... to ... Next (de la première à la dernière ligne remplie). Une telle boucle te permet de définir un "pas" de saut (11, donc, pour toi).
    A toi de jouer.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  9. #9
    Membre à l'essai
    Femme Profil pro
    Gestionnaire de paies
    Inscrit en
    Octobre 2016
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Gestionnaire de paies
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Octobre 2016
    Messages : 77
    Points : 23
    Points
    23
    Par défaut
    Bonjour Unparia,

    Après quelques temps d'absences car trop occupée, je me relance dans mon fichier, j'ai relu toutes les réponses faites, j'essaie de retourner la macro dans tous les ses mais cela ne fonctionne pas...

    Je me permet de joindre un fichier exemple qui reprend mon problème et qui sera plus clair pour exprimer mes attentes...

    Deux onglets : SEM A et Feuil2

    Si dans Feuil 2 est sélectionné TOUS dans la cellule B1, alors :
    je fais un test sur la colonne C, a partir de la cellule C12, toutes les 11 lignes jusqu'a la ligne 397.
    Si la cellule n'est pas vide, je souhaite copier les cellules de la feuille SEM A correspondante au salarié dans la feuil 2, soit (Sheets("SEM A").Range("B8").Resize(6, 6).Copy,
    et les coller dans la feuil 2 ("C12".Offset(0, 2).Paste),
    Pour information, les employés sont dans le même ordre dans SEM A et Feuil2

    En gros la boucle doit faire :
    Feuil2 Si C12 <> ""; alors (Sheets("SEM A").Range("B8").Resize(6, 6).Copy,
    ("C12".Offset(0, 2).Paste),

    Je descend de 11 lignes, si C23 <> ""; alors (Sheets("SEM A").Range("B19").Resize(6, 6).Copy,
    ("C23".Offset(0, 2).Paste), (si C23 est = "" on arrête la boucle)

    Je descend de 11 lignes, si C34 <> ""; alors (Sheets("SEM A").Range("B30").Resize(6, 6).Copy,
    ("C34".Offset(0, 2).Paste), (si C34 est = "" on arrête la boucle)

    ......
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. [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
  2. [XL-2003] boucle For each Next
    Par facteur dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 11/11/2009, 16h41
  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