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 Do While


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    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
    Par défaut Boucle Do While
    Bonjour à tous,

    voici un moment que je ne vous ai pas sollicité afin d'avoir votre aide...je suis bloquée sur une boucle que je n'arrive pas à finaliser.

    j'ai tout d'abord créer un code afin de supprimer le contenu d'une cellule toutes les 11 lignes avec le code ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Do While numeroL <= nbLignes
     ActiveSheet.Cells(numeroL, 5).ClearContents
    numeroL = numeroL + 11
    Loop
    Cela fonctionne parfaitement

    Mais j'ai voulu ajouter une condition supplémentaire et plus rien de fonctionne.

    J'ai voulu dans un premier temps cumuler les boules pour ne pas les imbriquer mais cela ne fonctionne 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
    30
    31
    32
    33
    34
    Do While numeroL <= nbLignes
     ActiveSheet.Cells(numeroL, 5).ClearContents
    numeroL = numeroL + 11
    Loop
     
    Do While numeroL <= nbLignes
     ActiveSheet.Cells(numeroL, 6).ClearContents
    numeroL = numeroL + 11
    Loop
     
    Do While numeroL <= nbLignes
     ActiveSheet.Cells(numeroL, 7).ClearContents
    numeroL = numeroL + 11
    Loop
     
    Do While numeroL <= nbLignes
     ActiveSheet.Cells(numeroL, 8).ClearContents
    numeroL = numeroL + 11
    Loop
     
    Do While numeroL <= nbLignes
     ActiveSheet.Cells(numeroL, 9).ClearContents
    numeroL = numeroL + 11
    Loop
     
    Do While numeroL <= nbLignes
     ActiveSheet.Cells(numeroL, 10).ClearContents
    numeroL = numeroL + 11
    Loop
     
    Do While numeroL <= nbLignes
     ActiveSheet.Cells(numeroL, 11).ClearContents
    numeroL = numeroL + 11
    Loop
    J'ai donc voulu essayer d'imbriquer mais cela ne fonctionne pas non plus...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Do While numeroL <= nbLignes
    Do While numeoC <= 11
     ActiveSheet.Cells(numeroL, 5).ClearContents
    numeroL = numeroL + 11
    Loop
    numeroC = numeroC + 1
    Loop
    Je remercie celles et ceux qui prendront le temps de m'aider.

  2. #2
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    Une seconde boucle n'est pas nécessaire.
    Il suffit de cibler correctement la plage de cellules à effacer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Do While numeroL <= nbLignes
       ActiveSheet.Range(Cells(numeroL, 5), Cells(numeroL, 11)).ClearContents
       numeroL = numeroL + 11
    Loop

  3. #3
    Membre confirmé
    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
    Par défaut
    Citation Envoyé par pijaku Voir le message
    Bonjour,

    Une seconde boucle n'est pas nécessaire.
    Il suffit de cibler correctement la plage de cellules à effacer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Do While numeroL <= nbLignes
       ActiveSheet.Range(Cells(numeroL, 5), Cells(numeroL, 11)).ClearContents
       numeroL = numeroL + 11
    Loop
    Bonjour Franck,

    Merci pour votre retour,

    cependant, j'ai un message d'erreur d'exécution lors du lancement (erreur d'exécution 1004 : erreur définie par l'application ou par l'objet).
    Je tente de réexpliquer ce que je souhaite faire :
    numeroL = 12
    numeroC =5
    Soit L12C5
    Supprimer le contenu de la cellule L12C5, L12C6, L12C7, L12C8, L12C9, L12C10, L12C11, soit + 1 à la colonne pendant 6 colonnes -attention cellule par cellule et non la plage
    puis faire la même chose en ligne + 11

    Sur votre code, je ne vois pas la même chose, c'est pour cette raison que je me suis permise de réexpliquer.
    En vous remerciant d'avance,

    Cordialement,

    Nadège

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    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 : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    L'approche de Franck était correcte mais il a oublié le "." devant .Cells d'où l'erreur 1004.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub t()
      Dim numeroL As Long
      Dim nbLignes As Long
      Dim Ecart As Integer
      numeroL = 1: nbLignes = 55
      Ecart = 11
      Do While numeroL <= nbLignes
         With ActiveSheet
         .Range(.Cells(numeroL, 5), .Cells(numeroL, 11)).ClearContents
          numeroL = numeroL + Ecart
         End With
      Loop
    End Sub
    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

  5. #5
    Membre confirmé
    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
    Par défaut
    Bonjour ,

    Cela fonctionne, merci bcp. Par contre cette formulation me pose un autre problème.

    Lors du code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Do While numeroL <= nbLignes
     ActiveSheet.Cells(numeroL, 5).ClearContents
    numeroL = numeroL + 11
    Loop
    Donc la cellule L12C5 était bien vidée ainsi que la L23C5 et ainsi de suite... Dans une autre partie de ma macro, il est indiqué que si le contenu de ces cellules est vidé, cela supprime également celui des cellules 6 autres en dessous. Lorsque de ma boucle qui ne fonctionnait que sur une seule colonne, cela fonctionnait toujours, c'est à dire qu'il supprimait bien le contenu de L13C5 : L18C5.
    Cependant avec le code indiqué, cela ne fonctionne plus comme si c'était la plage qui était sélectionné et non cellule par cellule.

    Vous me comprenez ?

    Merci d'avance,

    Cordialement,

    Nadège

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    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 : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Dans une autre partie de ma macro, il est indiqué que si le contenu de ces cellules est vidé, cela supprime également celui des cellules 6 autres en dessous. Lorsque de ma boucle qui ne fonctionnait que sur une seule colonne, cela fonctionnait toujours, c'est à dire qu'il supprimait bien le contenu de L13C5 : L18C5.
    Vous me comprenez ?
    Pas trop.

    Le SI (en rouge) me perturbe car on efface une plage de cellules d'une ligne et de plusieurs colonnes toutes les 11 lignes donc il n'y a pas de raison de vérifier si on les a effacées sauf si une condition m'échappe.
    S'il faut en plus effacer plusieurs lignes d'une ou plusieurs colonnes dans la même boucle, il suffit de le faire en même temps mais ce n'est pas clair pour moi.

    [EDIT]

    Exemple
    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
    Sub t()
      Dim numeroL As Long    ' Compteur de lignes
      Dim StopLignes As Long ' Jusqu'à quelle ligne
      Dim NbLignes           ' Nbre de lignes à effacer après
      Dim Ecart As Integer   ' Ecart du nombre de lignes
      numeroL = 1: StopLignes = 55: NbLignes = 6
      Ecart = 11
      Do While numeroL <= StopLignes
         With ActiveSheet
         .Range(.Cells(numeroL, 5), .Cells(numeroL, 11)).ClearContents
         .Range(.Cells(numeroL + 1, 5), .Cells(numeroL + NbLignes, 5)).ClearContents
          numeroL = numeroL + Ecart
         End With
      Loop
    End Sub
    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

Discussions similaires

  1. Boucle Do ..while
    Par parp1 dans le forum Général Python
    Réponses: 2
    Dernier message: 11/06/2006, 13h32
  2. Réponses: 13
    Dernier message: 20/03/2006, 16h26
  3. [VBA] Boucle Do While
    Par jmde dans le forum Access
    Réponses: 4
    Dernier message: 16/10/2005, 20h23
  4. probleme de recordset dans une boucle do while
    Par Shoryu dans le forum ASP
    Réponses: 18
    Dernier message: 05/07/2004, 15h30
  5. Appel recurssif et boucle Do...While
    Par zsoh dans le forum Langage
    Réponses: 6
    Dernier message: 31/05/2004, 18h01

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