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 :

macro pour créer un tableau avec des répétitions


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    macro pour créer un tableau avec des répétitions
    Bonjour,

    je n'ai jamais fait de macro excel et j'aimerais en faire une pour réaliser la manipulation suivante (mon fichier contient beaucoup plus de lignes et colonnes, ici c'est un exemple):

    j'aimerais ajouter une colonne "année" à droite de la colonne variété et reporter les valeurs de rendement pour chaque année afin d'avoir à la fin 3 colonnes: variété , puis une colonne année puis une colonne rendement. Donc les variétés se répétent pour les différentes années.

    A la main c'est beaucoup trop long et je me suis dit qu'une macro pourrait faire ça.

    Quelq'un pourrait m'aider SVP?

    J'ai mis un fichier "exemple" en PJ, colones A à D = le tableau initial et colones G à I, le tableau que j'aimerais obtenir.

    Merci par avance pour votre aide.
    Bien à vous,
    Margot.

  2. #2
    Membre éprouvé
    Hello,

    Désolé mais je n'ouvre pas les pièces jointes pour des raison évidentes de sécurité.
    Au vu de ce que vous expliquez dans votre énoncé , ou plutôt de ce que je comprends de celui-ci, le tableau de synthèse pourrait être réalisé sans macro via un tableau tableau croisé dynamique.

    Bav,
    MFoxy

  3. #3
    Expert éminent sénior
    Pas besoin de macro pour faire ça.

    Mets en I2 la formule :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    =INDEX($B$3:$D$5;EQUIV(G2;$A$3:$A$5;0);EQUIV(H3;$B$2:$D$2;0))

    Copie I2 vers le bas autant que nécessaire.

    Lire ça :
    https://support.microsoft.com/fr-fr/...2-b56b061328bd
    https://support.microsoft.com/fr-fr/...9-533f4a37673a
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  4. #4
    Membre à l'essai
    Citation Envoyé par Menhir Voir le message

    Bonsoir,

    merci pour le retour mais mettre cette formule en I2 ne fonctionne pas pour créer les 3 colonnes comme je veux, je crois que j'ai finalement trouvé une solution avec une macro.

    Merci pour le message.

    Citation Envoyé par mfoxy Voir le message

    Bonsoir MFoxy,

    merci pour le retour.
    Un tableau croisé dynamique ne suffit pas pour faire ce que je veux (peut-être que c'est possible mais je n'y suis pas arrivée), j'ai finalement trouvé une solution macro pour passer de mon tableau 1 à mon tableau 2 (je les ai copié dessous). Vous pensez vraiment que c'est possible avec un TCD? même si j'ai trouvé une solution macro, cela m'intéresse.

    Merci par avance.
    Bien à vous,
    Margot.

    Tableau 1:


    [TH="colspan:4"]rendement[/TH]
    [TH]variété[/TH]
    [TH]année1[/TH]
    [TH]année2[/TH]
    [TH]année3[/TH]
    var1 2 3 4
    var2 na na 5
    var3 6 5 7

    Tableau 2:


    [TH]variété[/TH]
    [TH]année[/TH]
    [TH]rendement[/TH]
    var1 année1 2
    var2 année1 3
    var3 année1 4
    var1 année2 na
    var2 année2 na
    var3 année2 5
    var1 année3 6
    var2 année3 5
    var3 année3 7

  5. #5
    Community Manager

    Salut,

    Il est possible de le faire sans macro, mais avec Power Query disponible en add on si votre version Excel est 2013 et 2010, mais disponible en natif sur 2016 et plus.

    1. Convertir le tableau initial en tableau structuré
    2. lancer Power Query via le menu Données==> A partir d'un Tableau
    3. Se positionner sur la première colonne==> Faire un Clic Droit==> Choisir Dépivoter les autres colonnes


    4. Cliquer sur le menu Fermer et Charger.



    L'avantage c'est que tu n'as pas besoin de lignes de code, et la mise à jour de ton tableau sera automatiquement intégrée, et pour cela il faut juste faire un Clic-Droit sur ton tableau final, et choisir Actualiser.
    Vous avez envie de contribuer au sein du Club Developpez.com ? Contactez-nous maintenant !
    Vous êtes passionné, vous souhaitez partager vos connaissances en informatique, vous souhaitez faire partie de la rédaction.
    Il suffit de vous porter volontaire et de nous faire part de vos envies de contributions :
    Rédaction d'articles/cours/tutoriels, Traduction, Contribution dans la FAQ, Rédaction de news, interviews et témoignages, Organisation de défis, de débats et de sondages, Relecture technique, Modération, Correction orthographique, etc.
    Vous avez d'autres propositions de contributions à nous faire ? Vous souhaitez en savoir davantage ? N'hésitez pas à nous approcher.

  6. #6
    Membre à l'essai
    Bonjour Malick,

    merci pour les explications. J'ai excel 2016 mais ça ne fonctionne pas.

    J'arrive jusqu'ici:


    je clic droit sur la colonne variété et je fais "dépivoter les colonnes" comme ceci:


    et ça me donne ça:

    je n'arrive pas à obtenir un tableau comme vous comme ça:


    ou est-ce que je fais faux?

    Merci par avance pour votre aide,
    Margot.

  7. #7
    Expert éminent sénior
    Citation Envoyé par Margotte02 Voir le message
    merci pour le retour mais mettre cette formule en I2 ne fonctionne pas pour créer les 3 colonnes comme je veux, je crois que j'ai finalement trouvé une solution avec une macro.
    Mets en G2 la formule :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    =INDEX(A$3:A$5;MOD(LIGNE()-2;NBVAL(A$3:A$5))+1)


    Mets en H2 la formule :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    =INDEX(B$2<img src="images/smilies/icon_biggrin.gif" border="0" alt="" title=":D" class="inlineimg" />$2;ENT((LIGNE()+1)/NBVAL(B$2<img src="images/smilies/icon_biggrin.gif" border="0" alt="" title=":D" class="inlineimg" />$2)))


    Copie G2:I2 vers le bas autant que nécessaire.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  8. #8
    Membre à l'essai
    Bonjour,

    merci,
    ça fonctionne pour G et H mais ça ne mets pas les bons chiffres en I, ça donne ça:

    var1 année1 2
    var2 année1 na
    var3 année1 5
    var1 année2 3
    var2 année2 na
    var3 année2 7
    var1 année3 4
    var2 année3 5
    var3 année3 #N/A

  9. #9
    Community Manager

    Salut,

    Citation Envoyé par Margotte02 Voir le message
    Bonjour Malick,

    merci pour les explications. J'ai excel 2016 mais ça ne fonctionne pas.
    Il faut se positionner sur la première colonne et choisir Dépivoter les autres colonnes
    Vous avez envie de contribuer au sein du Club Developpez.com ? Contactez-nous maintenant !
    Vous êtes passionné, vous souhaitez partager vos connaissances en informatique, vous souhaitez faire partie de la rédaction.
    Il suffit de vous porter volontaire et de nous faire part de vos envies de contributions :
    Rédaction d'articles/cours/tutoriels, Traduction, Contribution dans la FAQ, Rédaction de news, interviews et témoignages, Organisation de défis, de débats et de sondages, Relecture technique, Modération, Correction orthographique, etc.
    Vous avez d'autres propositions de contributions à nous faire ? Vous souhaitez en savoir davantage ? N'hésitez pas à nous approcher.

  10. #10
    Expert éminent sénior
    Citation Envoyé par Margotte02 Voir le message
    ça fonctionne pour G et H mais ça ne mets pas les bons chiffres en I, ça donne ça:
    Il suffit de changer H3 en H2 dans la formule de ma première réponse.

    Franchement, tu pourrais faire un minimum d'effort pour essayer d'étudier les réponses qui te sont données.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  11. #11
    Responsable
    Office & Excel

    Salut.

    Si c'est un oneshot, on peut accepter les dernières formules de Menhir, mais comme il le dit, il faudra les tirer vers le bas jusqu'à avoir toutes les données => nombres de lignes * nombre d'années à dépivoter.

    Perso, je préfère de loin la solution de Malick avec Power Query. Si c'est du oneshot, on rompt la liaison après la manip, et si le travail est à répéter, il suffit de mettre à jour.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Une fois pour toutes, je donne mon avis. Je ne vais pas le répéter à chaque message...
    Si je propose une solution générique sur votre solution spécifique, c'est parce que, fainéant de nature, je privilégie le réutilisable...
    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...
    ---------------

###raw>template_hook.ano_emploi###