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 :

Choix de boucle dans macro [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Femme Profil pro
    retraitée
    Inscrit en
    Juin 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : retraitée

    Informations forums :
    Inscription : Juin 2006
    Messages : 147
    Points : 80
    Points
    80
    Par défaut Choix de boucle dans macro
    bonjour à tous,

    j'hésite dans le choix de boucle à faire pour dire :

    Dans la feuille excel, j'ai :
    COL A = CODE ART
    COL B = TABLEAU
    COL C = QTE
    COL D = DESCRIPTION 1 de l'article
    COL E = DESCRIPTION 2 de l'article

    pour un même TABLEAU, je peux avoir plusieurs articles qui le composent :
    exemple :

    TABLEAU VERT est composé de : ARTICLE 1, 2 et 3
    TABLEAU JAUNE est composé de : ARTICLE 5
    TABLEAU ROUGE est composé de : ARTICLE 7, 8, 9 et 10

    à chaque changement dans B (TABLEAU)
    • action 1
    • action 2 SI plusieurs lignes d'articles
    • action 3


    dois-je opter pour DO WHILE, FOR EACH NEXT ou autre boucle
    quelle est la plus appropriée ?
    d'avance merci pour votre aide

  2. #2
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Salut
    Quel est le but? Tu veux obtenir quoi a la fin
    Vu la structure de tes données, elles semble imbriqué les une dans les autres, je pense que l'appel récursif à une fonction serait approprié. Si j'ai bien compris, dans la colonne B, tu peux avoir un article, lui même composé de plusieurs articles, c'est ça?
    Donne nous plus de détail, voir un fichier exemple (oui j'aime bien avoir un support claire )
    Le TABLEAU il est représenté comment? c'est une autre feuille? une liste de code article?....

    Pour moi Do While, je l'utilise peu, il faut souvent incrémenter une variable a coté pour contrôler la progression de lecture de cellule, colonne, ligne ou autre.
    For each je l'aime bien, elle permet de pointer sur un objet et de pouvoir travailler avec cet objet facilement, ça réduit souvent l’écriture dans la boucle, par contre gros inconvénient, il n'est pas possible de parcourir les objet en sens inverse, par exemple tu ne peut pas parcourir les cellules de A18 à A2 ... ce qui est fort ennuyeux si tu veux supprimer des lignes par exemple.
    Pour ça tu as For avec l'utilisation de Step.
    ++
    Qwaz

  3. #3
    Membre régulier
    Femme Profil pro
    retraitée
    Inscrit en
    Juin 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : retraitée

    Informations forums :
    Inscription : Juin 2006
    Messages : 147
    Points : 80
    Points
    80
    Par défaut
    bonjour à tous et merci de ta réponse Qwazerty !

    Oui effectivement, un "tableau" peut être composé (et c'est le cas quasi tout le temps) de plusieurs "articles" qui comportent 1, voire 2 description
    j'ai fait un fichier test que je joins pour voir précisément ce qu'il en est
    je n'aurais pas le problème de suppression de lignes dans cette feuille, les lignes éventuellement inutiles sont supprimées dans une autre feuille, par contre lorsque je génère le ppt, les slides sont en ordre inverse du fichier, ce qui pose problème, car le tableau 1 doit être le premier slide et non le dernier
    dans la macro "BoucleTest2conditions" j'ai mis tous les commentaires de ce que je souhaite obtenir
    ton aide m'est très précieuse car je dois absolument trouver la solution....
    d'avance merci

  4. #4
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Salut
    Stp, peux tu rajouter un ppt avec l'organisation souhaitée.
    Merci

    [Edit]
    Bon après reflections essai comme ça
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    Option Explicit 'T'oblige a declarer toutes les variables que tu utilises
     
    Sub BoucleTest2Conditions()
    'Active dans les references (menu option) la ligne "Microsoft PowerPoint x.x Object Library",
    'si tu veux, tu pourras par la suite remettre les Objects pour ne pas avoir a activer cette reference sur les autre postes
    'Mais pour developper c'est plus simple
    Dim objPPT As PowerPoint.Application  'Object
    Dim objPres As PowerPoint.Presentation ' Object
    Dim objSld As PowerPoint.SlideRange ' Object
    Dim objShp As PowerPoint.Shape ' Object
    Dim shp As PowerPoint.Shape
    Dim Tablo As Variant
    Dim x As Integer, i As Integer, y As Integer
     
     
    With Sheets("Feuil1") 'Il faut presiser le "." dans la suite du code pour y faire reference
        Tablo = .Range("A2:Z" & .Cells(Rows.Count, "A").End(xlUp).Row).Value
    End With
     
    Set objPPT = CreateObject("Powerpoint.Application")
    objPPT.Visible = True
     
    Set objPres = objPPT.Presentations.Open(ThisWorkbook.Path & "\note2.pptm")
    objPres.SaveAs ThisWorkbook.Path & "\test3.ppt"
     
     
     
    For i = 1 To UBound(Tablo)
        'duplique le slide 1
        Set objSld = objPres.Slides(1).Duplicate
        'On le place au dessous de tout
        objSld.moveto objPres.Slides.Count
        'remplit le tableau du slide avec les données
        For Each objShp In objSld.Shapes
            If objShp.HasTable Then
                With objShp.Table
                    .Cell(1, 1).Shape.TextFrame.TextRange.Text = Tablo(i, 2) 'Tableau
                    '.Cell(4, 1).Shape.TextFrame.TextRange.Text = Tablo(i, 3) 'Qte
                    '.Cell(4, 2).Shape.TextFrame.TextRange.Text = Tablo(i, 4) 'Description1
                    '.Cell(5, 2).Shape.TextFrame.TextRange.Text = Tablo(i, 5) 'Description2
                    '=============================================================================
                    'nouvelle condition :
                    'si la cellule B = G, alors
                    x = 0
                    Do
                        'Attention boucle sans fin ne pas executer ce code
                        'Je ne vois pas comment placer les info dans ton slide
    '                        jhfsd
     
                        'copie la ligne 2 et 3 du tableau du slide et ajoute les à la suite
                        '.Row (4) & Row(5).Copy
                        'et remplit les avec les données
                        If x > 0 Then
                            .Rows.Add
                            .Rows.Add
                        End If
                        .Cell(4 + (2 * x), 1).Shape.TextFrame.TextRange.Text = Tablo(i, 3) 'Qte
                        .Cell(4 + (2 * x), 2).Shape.TextFrame.TextRange.Text = Tablo(i, 4) 'Description1
                        .Cell(5 + (2 * x), 2).Shape.TextFrame.TextRange.Text = Tablo(i, 5) 'Description2
                        'et autant de fois qu'il y a de lignes où cell B = G
                        i = i + 1
                        x = x + 1
                        If i > UBound(Tablo) Then Exit Do
                    Loop While Tablo(i, 2) = Tablo(i - 1, 2)
                End With
            End If
        Next
    Next
     
    objPres.Slides(1).Delete
    objPres.Save
    objPres.Close
     
    End Sub
    Par contre il faudra surement revoir la condition de la boucle Do While, initialement celle de ta boucle If, je n'ai pas bien compris... ha si je viens de comprendre je vais modifier (voila c'est fait).
    [Edit]
    ++
    Qwaz

  5. #5
    Membre régulier
    Femme Profil pro
    retraitée
    Inscrit en
    Juin 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : retraitée

    Informations forums :
    Inscription : Juin 2006
    Messages : 147
    Points : 80
    Points
    80
    Par défaut
    un immense merci Qwazerty !

    tu as tout compris et c'est magique, quel as, car ce n'était pas gagné, tout au moins pour moi qui suis loin d'être une développeuse aguerrie, mais voilà à chaque fois j'apprends un tas de choses que je garde précieusement pour d'autres utilisations.

    j'espère que ce modèle servira à d'autres

    merci encore et sûrement à plus car je n'ai pas fini tout mon appli et suis sûre d'être encore obligée à demander de l'aide !

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

Discussions similaires

  1. [XL-2013] Boucle non fonctionnelle et question à choix dans macro.
    Par Akhlan dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 01/05/2013, 10h42
  2. [XL-2003] boucles dans une Macro Excel?
    Par answer3 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 23/12/2009, 20h07
  3. Suppression des doublons par une boucle dans une macro
    Par axamen dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/02/2009, 09h37
  4. Problème pour réaliser une macro "de boucles" dans VBA
    Par philou7176 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 15/12/2008, 15h41
  5. Boucle dans macro SAS avec BY
    Par fafabzh6 dans le forum Macro
    Réponses: 5
    Dernier message: 17/06/2008, 12h08

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