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 :

Automatiser la création d'une suite de tableau [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 54
    Par défaut Automatiser la création d'une suite de tableau
    Bonjour,

    j'ai besoin de votre aide étant nulle part dans les macros..

    J'aimerais créer une macro qui génère un feuille de rapport (dans le document attaché, feuille "DOC") basé sur des infos dans des TCD (qui se trouvent sur d'autres feuilles).
    Le principe serait de créer le premier tableau (avec les champs du TCD de la première feuille), ensuite de passer une ligne pour continuer avec le deuxième tableau reprenant les champs du TCD de la feuille numéro deux etc.
    Tout en tenant compte du fait que la taille des différents TCD (en terme de lignes) pourra varier d'une fois à l'autre.

    En attachement, le fichier dont je parle, pour illustrer.

    J'espère avoir été claire.

    D'avance, un tout grand merci pour votre aide,

    Jenna

    test.xlsx


    Voilà, le petit code sur lequel je travaille (je n'ai jamais fait de macro, un début pour moi..) Le problème rencontré est la cellule A10 se copie colle, mais pas la A11, A12, A13 etc.

    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
    Sub Macro1()
    ''
        Dim i As Integer
        Dim j As Integer
        Dim k As Integer
        Dim l As Integer
     
        Dim a As Integer
        Dim b As Integer
        i = 5
        j = 2
        k = 10
        l = 1
        a = 6
        b = 1
     
        ActiveWindow.ScrollWorkbookTabs Position:=xlLast
        Sheets("New Demands SDD").Select
           While Not IsEmpty(Cells(a, b))
     
        Sheets("New Demands SDD").Select
        Cells(i, j).Select
        Selection.Copy
        Sheets("Doc").Select
        Cells(k, l).Select
        ActiveSheet.Paste
         Do
     
         i = i + 1
         j = j + 1
         Loop While i < 11
     
         b = b + 1
     
        Wend
    End Sub

  2. #2
    Membre chevronné
    Homme Profil pro
    Ingénieur Industrialisation
    Inscrit en
    Mai 2015
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Industrialisation
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2015
    Messages : 222
    Par défaut
    Bonjour Jenna,

    Je ne suis pas certain d'avoir compris le besoin, mais j'ai déjà quelques petites remarques sur le code. Il s'agit juste de conseils et mon point de vue n'est pas forcément le meilleur

    -Je pense que tu utilises beaucoup de variables et la plupart semblent être constantes. En plus, leurs noms sont trop basiques et rendent le code assez compliqué à lire, je trouve.
    Si j'étais toi, j'utiliserais des noms du type ligneSSD, ColonneDoc, ColDoc...
    - Tu pourrais aussi utiliser des variables objets, par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Dim ShDoc as worksheet
    Dim CellDoc as range
     
    Set ShDoc = Sheets("Doc")
    Set CellDoc = ShDoc.range("A5")
     
    'Puis ensuite, tu peux décaler la CellDoc ainsi :
     
    Set CellDoc = CellDoc.offset(1,0) 'Pour sélectionner la cellule en dessous.
    Ensuite, tu peux simplifier l'écriture du type "macro automatique" (on apprend tous comme ça )

    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        Sheets("New Demands SDD").Select
        Cells(i, j).Select
        Selection.Copy
        Sheets("Doc").Select
        Cells(k, l).Select
        ActiveSheet.Paste
    Peut être changé ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("New Demands SDD").Cells(i, j).Copy Destination:=Sheets("Doc").Cells(k, l)
    Je n'ai pas bien compris le

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Do
           i = i + 1
           j = j + 1
    Loop While i < 11
    Qui équivaut simplement à écrire i = 11 et j = 8 (vu qu'au début i = 5 et j = 2)... cette boucle se fait une fois dans le vent !

    D'ailleurs, je ne sais pas si tu as déjà utilisé ceci, mais c'est très pratique : Lance ta macro en mode pas à pas avec le bouton F8, ça te permettra de mieux visualiser la lecture du code et ainsi d'éliminer tout ce qui est inutile .

    Je regarde encore un peu si j'ai le temps. Ce que je t'ai dit ne corrige pas ton problème, malheureusement, et d'autres te conseilleront peut-être autre chose, ceci n'est que mon avis.

    Bon courage !

    PS : Le fichier joint est en .xlsx, format ne supportant pas les macros ! Enregistre plutôt au format .xlsm pour éviter de perdre tes macros à la fermeture du fichier.

    Quentin.

  3. #3
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    ceci donne le résultat de la feuille Doc du fichier que tu as transmis

    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
    Sub Macro1()
     
    Dim TabFeuilles()
    Dim ShSource As Worksheet
    Dim ShDest As Worksheet
    Dim i As Integer
     
    ' pour boucler sur les feuilles
    TabFeuilles = Array("New Demands SDD", "New Demands SCT-MTS", "New Problems SDD")
     
    Set ShDest = ThisWorkbook.Worksheets("Doc")
    ' nettoyage de la feuille de destination
    ShDest.Cells.Delete
     
    ' pour chaque feuille
    For i = LBound(TabFeuilles) To UBound(TabFeuilles)
        Set ShSource = ThisWorkbook.Worksheets(TabFeuilles(i))
        With ShSource
            ' si la dernière ligne est supérieure à 5 = il y a des données dans le TCD
            If .UsedRange.Rows.Count > 5 Then
                ' copie de la plage du TCD dans la feuille de destination
               .Range(.Cells(5, 1), .Cells(.UsedRange.Rows.Count, .UsedRange.Columns.Count)).Copy _
                            ShDest.Cells(ShDest.UsedRange.Row + ShDest.UsedRange.Rows.Count + 1, 1)
            End If
        End With
    Next i
     
    Set ShSource = Nothing
    Set ShDest = Nothing
     
    End Sub

  4. #4
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 54
    Par défaut
    Un tout grand merci à vous deux!

    Joe, ça fonctionne parfaitement!

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 29/08/2012, 11h05
  2. [PowerShell] [Exchange] Automatiser la création d'une boîte aux lettres
    Par PatStan17 dans le forum Scripts/Batch
    Réponses: 4
    Dernier message: 14/09/2011, 18h57
  3. Réponses: 6
    Dernier message: 02/04/2007, 16h34
  4. comment automatiser la création d'une source ODBC ?
    Par belmansour tidjani dans le forum Windows
    Réponses: 2
    Dernier message: 22/02/2006, 10h10
  5. Réponses: 4
    Dernier message: 28/10/2005, 20h58

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