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


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 68
    Par défaut boucle
    Bonjour à tous!

    J'ai un souci sur mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub macro2()
    DerniereLigne = ActiveSheet.UsedRange.Rows.Count
    For x = DerniereLigne To 1 Step -1
     
    If Not Range("C" & x + 1) = "" Then Range("A" & x & ":B" & x).Copy
     
        Do While Not Range("C" & x + 1).Value = ""
        x = x + 1
        Range("A" & x & ":B" & x).PasteSpecial
        Loop
     
    Next
    End Sub
    apparement le probleme vient de Do While, je voudrai juste lui dire :

    Tant que le contenu de la cellule ("C" & x +1) n'est pas vide x = x +1
    et copy des cellules ("A" & x & ":B" & x).

    Je sais que c'est une boucle dans une boucle, je sais pas si on a le droit..?

    Merci de votre aide!

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut.

    Imbriquer un do while qui modifie le x testé dans la boucle for ...next n'est pas une bonne idée. De plus, tu réalises deux fois un test sur Cx alors qu'un seul suffit.

    Essaie plutôt ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    For x = DerniereLigne To 1 Step -1
        If Not Range("C" & x + 1) = "" Then range("a" & x & ":b" & x).copy destination:=range("a" & x + 1)
    next x
    J'ai copié-collé directement car tu ne réalises pas de pastespecial.

    Précise si tu dois effectuer un collage spécial.
    Si oui, tu pourras utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    For x = DerniereLigne To 1 Step -1
        If Not Range("C" & x + 1) = "" Then 
            range("a" & x & ":b" & x).copy
            range("a" & x + 1).pastespecial ...
        end if
    next x
    en remplaçant les points de suspension par la constante voulue en fonction du collage spécial que tu souhaites réaliser.

    Ok?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 68
    Par défaut
    Merci pour la réponse si rapide!

    J'ai bien noté ton code merci pour la rectification mais j'ai quand meme besoin d'une 2eme boucle, parce qu'avec une condition "if" le probleme c'est que ca s'arrete ou bout d'une fois moi je voudrai qu'il continue jusqu'a une cellule ("C" & x) non vide de ma colonne.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 68
    Par défaut
    Voila le code refait et le code que je veux avoir mais qui ne marche pas..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    DerniereLigne = ActiveSheet.UsedRange.Rows.Count
    For x = DerniereLigne To 1 Step -1
     
    If Range("A" & x) = "" Then GoTo fin
     
    If Not Range("C" & x + 1) = "" Then Range("A" & x & ":B" & x).Copy Destination:=Range("A" & x + 1 & ":B" & x + 1)
     
    fin:
    Next x

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    DerniereLigne = ActiveSheet.UsedRange.Rows.Count
    For x = DerniereLigne To 1 Step -1
     
    If Range("A" & x) = "" Then GoTo fin
     
    Do While Not Range("C" & x + 1) = ""
    Range("A" & x & ":B" & x).Copy Destination:=Range("A" & x + 1 & ":B" & x + 1)
    Loop
     
    fin:
    Next x

  5. #5
    Membre émérite
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Par défaut
    Je me semble que le problème vient de la boucle qui part du dernier élément pour terminer au premier.
    Si tu es au dernier élément (départ de ta boucle), l'élément x+1 est de toute façon vide.

    Je me trompe peut être.

    Salutations

  6. #6
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Citation Envoyé par speslurp Voir le message
    Voila le code refait et le code que je veux avoir mais qui ne marche pas..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
        DerniereLigne = ActiveSheet.UsedRange.Rows.Count
        For x = DerniereLigne To 1 Step -1
     
            If Range("A" & x) = "" Then GoTo fin
     
            Do While Not Range("C" & x + 1) = ""
                Range("A" & x & ":B" & x).Copy Destination:=Range("A" & x + 1 & ":B" & x + 1)
            Loop
     
    fin:
        Next x
    Constatation... tant que la cellule Cx+1 n'est pas vide...
    Si elle n'est pas vide ta boucle tourne indéfiniment
    Je ne comprend pas le but de ta macro mais si tu veux la faire tourner il faut employer une variable supplémentaire..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        DerniereLigne = ActiveSheet.UsedRange.Rows.Count
        For x = DerniereLigne To 1 Step -1
     
            If Range("A" & x) = "" Then GoTo fin
            x1 = X + 1
            Do While Not Range("C" & x1) = ""
                Range("A" & x & ":B" & x).Copy Destination:=Range("A" & x + 1 & ":B" & x + 1)
                x1 = x1 + 1
            Loop
     
    fin:
        Next x
    Mais ta macro ne veux rien dire du tout, essaye d'expliquer avec des mots et non du code ce que tu veux faire.
    A+

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par speslurp Voir le message
    Merci pour la réponse si rapide!

    J'ai bien noté ton code merci pour la rectification mais j'ai quand meme besoin d'une 2eme boucle, parce qu'avec une condition "if" le probleme c'est que ca s'arrete ou bout d'une fois moi je voudrai qu'il continue jusqu'a une cellule ("C" & x) non vide de ma colonne.
    Sauf erreur, mon If... End If ne modifie pas la boucle, et le décompte des x va de la dernière ligne à la ligne 1...

    As-tu démarré ta macro en mode pas à pas pour vérifier les valeurs de x à l'entrée de la boucle et durant le déroulement de la macro?

    Je rejoins LeForestier dans sa perplexité. Explique-nous en français ce que tu souhaites réaliser, et nous pourrons probablement mieux t'aider.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 68
    Par défaut
    salut!
    oki oki, je m'explique correctement :

    j'ai 3 colonnes A,B,C dans la colonne C y'a des blocks aléatoire de date.
    La colonne A : des chiffres et B du texte, tous ecrits sur juste une ligne et enfin la ligne des chiffres et des lettres sont sur la meme ligne du début d'un block de date. j'esprere que vous suivez!

    petit graph :

    colonne A | colonne B | colonne C

    65465655 | qzdqfqfeff| 01/02/07
    ligne vide |ligne vide | 03/09/07
    ligne vide |ligne vide | 21/08/07
    ligne vide | ligne vide | 18/04/07

    Mon but :

    colonne A | colonne B | colonne C

    65465655 | qzdqfqfeff | 01/02/07
    65465655 | qzdqfqfeff | 03/09/07
    65465655 | qzdqfqfeff | 21/08/07
    65465655 | qzdqfqfeff | 18/04/07

    Voila, sachant que le block de date varie toujours en nombre de ligne.
    je crois que c'est pas trop compliquez a faire mais je m'enbrouille vite en VBA..

    Merci de vos aides!

  9. #9
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 514
    Par défaut
    Bonjour,

    Essaye ceci, en adaptant la plage de cellules.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub Remplir()
        With Range("A1:C4").SpecialCells(xlCellTypeBlanks)
            .FormulaR1C1 = "=R[-1]C"
            .Value = .Value
        End With
    End Sub
    Cordialement,

    Tirex28/

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

Discussions similaires

  1. [XSLT] Faire une boucle sur une variable [i]
    Par PoT_de_NuTeLLa dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 07/06/2010, 12h45
  2. [langage] if et boucle { ..}
    Par kacedda dans le forum Langage
    Réponses: 15
    Dernier message: 28/04/2003, 17h25
  3. [directsound] boucle de traitement de son
    Par gargle dans le forum DirectX
    Réponses: 5
    Dernier message: 24/03/2003, 10h47
  4. Sortir d'un progamme qui boucle ou qui refresh
    Par mikevador02 dans le forum C
    Réponses: 12
    Dernier message: 14/12/2002, 09h38
  5. Réponses: 2
    Dernier message: 29/05/2002, 20h43

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