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 :

boucles imbriquées for / do loop [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Femme Profil pro
    Inscrit en
    Février 2009
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2009
    Messages : 174
    Points : 195
    Points
    195
    Par défaut boucles imbriquées for / do loop
    Bonjour à tous,

    Marre de tourner en rond, je sollicite votre aide...

    J'ai une chaine de caractère dans les cellules A2 => FM2 qui se présentent comme suit :
    0 ; 0 ; 0 ; 0 ; 1 ; 1 ; 1; 2; 3 ; 3 ; 3 ; 3 ; 3 ; 3 ; 3 ; 3 ; 4; 4; 4 ...

    je souhaiterais pouvoir fusionner les cellules qui contiennent la même valeur afin d'avoir en range(B2:E2) la valeur 0, puis une cellule fusionnée en range(F2:H2) avec la valeur 1, puis une cellule simple en I2 avec 2, puis de nouveau une fusion sur la valeur 3 pour les cellules suivantes correspondantes...

    Je suis partie de la cellule A2 avec un offset pour incrémenter les valeurs. J'arrive à trouver la valeur à partir de laquelle ça change, mais je ne retrouve plus la valeur précédente ou, à défaut le nb d'itération qu'il a fallu pour arriver à ce changement. Sur l'exemple ci-dessus, je retrouve le 5 correspondant à la 5e colonne "E2", puis le 10 de la 10e colonne "H2", etc... mais si je ne sais pas combien de cellules il me faut fusionner, la manip devient plus compliquée... pour ne pas dire impossible.


    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
     
     Range("A2").Select
     
         For x = 1 To 168
     
        n = 0
     
        Do While ActiveCell.Offset(0, x + n).Value = ActiveCell.Offset(0, x - n - 1).Value And ActiveCell.Offset(0, x + n + 1).Value <> ActiveCell.Offset(0, x + n - 1).Value
           n = n + 1
           v = x + n - 1
     
     
           MsgBox v ' ici si j'arrivais à trouver ma valeur "a" de départ je pourrais alors fusionner de les cellules pour les colonnes de a => v ... mais je n'en suis pas là
     
        If n = 168 Then Exit Do
     
        Loop
     
        Next x
    J'espère avoir été claire ds mes explications. Et vous remercie par avance de l'aide que vous pourrez m'apporter.

  2. #2
    Expert éminent
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Points : 6 699
    Points
    6 699
    Par défaut
    Bonjour,

    Je veux bien passer du temps à résoudre un problème, je ne veux pas en passer à essayer de comprendre le problème que la personne n'a pas pris le temps d'expliquer correctement...

    cordialement,

    Didier

  3. #3
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Bonjour.

    Je ne sais pas à quoi cela sert, mais tu peux essayer cela :
    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
    Sub Lilou()
    Dim sH As Excel.Worksheet
    Dim oCellDeb As Excel.Range, oCellDer As Excel.Range
    Dim oCell1 As Excel.Range, oCell2 As Excel.Range
     
    Set sH = ThisWorkbook.Worksheets("Feuil1")
    Set oCellDeb = sH.Range("A2")
    Set oCellDer = sH.Range("FM2")
     
    Set oCell1 = oCellDeb
    Set oCell2 = oCellDeb
     
    Application.DisplayAlerts = False
    While oCell2.Column <= oCellDer.Column
        If (oCell2.Offset(0, 1).Value = oCell1.Value) And (oCell2.Column < oCellDer.Column) Then
            Set oCell2 = oCell2.Offset(0, 1)
        Else
            If Not oCell2 Is oCell1 Then
                sH.Range(oCell1, oCell2).Merge
            End If
            Set oCell1 = oCell2.Offset(0, 1)
            Set oCell2 = oCell1
        End If
    Wend
    Application.DisplayAlerts = True
     
    Set sH = Nothing
    Set oCellDeb = Nothing
    Set oCellDer = Nothing
    Set oCell1 = Nothing
    Set oCell2 = Nothing
     
    End Sub
    Cordialement,

    PGZ

  4. #4
    Membre habitué
    Femme Profil pro
    Inscrit en
    Février 2009
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2009
    Messages : 174
    Points : 195
    Points
    195
    Par défaut Merci
    Bonjour,

    Merci beaucoup à PQZ pour ta réponse qui correspond tout à fait à mon besoin.

    Désolée Ormonth de n'avoir pas été plus précise ds ma demande.

    Pour la petite histoire, il s'agit de visualiser des plages de temps utilisées de manière identique(une cellule = 1 heure), ici, chaque nombre symbolise une activité machine, si plusieurs heures sont consacrées à une même activité, il me faut donc fusionner les cellules afin de mieux les visualiser.

    Le tout faisant parti d'une grosse macro, j'avais souhaité ne pas vous saturer d'info inutiles.

    En tout cas MERCI BEAUCOUP !!
    Elise

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

Discussions similaires

  1. Boucles imbriquées (nested loops)
    Par SIGMIC dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 01/03/2015, 16h39
  2. Problème avec des boucles while/for imbriquées
    Par Nico820 dans le forum Général Python
    Réponses: 12
    Dernier message: 14/12/2012, 16h24
  3. boucles imbriquées for
    Par aubert22 dans le forum Windows
    Réponses: 7
    Dernier message: 01/11/2008, 20h23
  4. Boucle imbriquée avec for each et while
    Par guen dans le forum Access
    Réponses: 7
    Dernier message: 01/03/2007, 17h36
  5. Boucles imbriquées
    Par Immobilis dans le forum ASP
    Réponses: 28
    Dernier message: 14/01/2005, 13h17

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