Dupliquer des lignes en fonction d'une variable

Bonjour à tous,

Je suis tout nouveau et viens rechercher de l'aide sur Excel afin de progresser.

Sur mon problème actuel, je n'arrive pas à trouver le bon code pour faire ce que je souhaite.

voila je joins le tableau.

J'ai des lignes de 10 colonnes que je voudrais dupliquer dans un nouvel onglet en fonction de la variable de la colonne H

Je n'y arrive pas.

Merci pour votre aide.

Vous avez dans la feuille "promos" les 4 lignes à dupliquer en fonction du nbre de la colonne H

et dans la feuille "duplication" le résultat souhaité

Merci à vous pour votre aide

49test.xlsx (10.92 Ko)

Bonjour

Place ce code dans un module en VBA

Sub test()
Dim dlg As Integer
Dim i As Byte
Dim cel as range
For Each cel In Range("H2:H" & Range("H" & Rows.Count).End(xlUp).Row)
    dlg = Sheets("Duplication").Range("A" & Rows.Count).End(xlUp).Row
    i = 1
    Do While i <= cel.Value
    Range("A" & cel.Row & ":J" & cel.Row).Copy Sheets("Duplication").Range("A" & dlg + 1)
    dlg = dlg + 1
    i = i + 1
    Loop
Next
End Sub

Ensuite positionne toi sur la feuille PROMOS puis exécute le code

N'oublie pas d'enregistrer ton classeur avec l'extension XLSM, sans quoi la macro ne fonctionnera pas.

Si ok, clique sur le V vert à coté du bouton EDITER pour cloturer le fil

Crdlt

Wowwww...

Je pensais pas que ça irait aussi vite !!

Et résultat parfait

Ce qui me chagrine, c'est que je ne comprends les 3/4 des codes utilisés:

je vais essayer de passer du temps à chercher chaque code que je ne comprends pas pour evoluer.

Exemple :

Dim dlg as integer

Dim i as byte

.End (x1Up).Row)

J'ai beaucoup vu le i dans d'autres répondre

bcp vu aussi le .End(xlUp).Row

mais sans trop savoir ce que cela veut dire...

Merci beaucoup

Re,

Dim dlg as integer et Dim i as byte sont des déclarations de variables. Cela permet d'utiliser au mieux la mémoire nécessaire à Excel pour l'exécution du code. Plus tu choisis la bonne déclaration, mieux le code fonctionne. C'est surtout valable lorsque tu as de grosses appli mais vaut mieux s'y habituer à toujours les déclarer.

Vois l'aide excel au sujet des types de variable ou sur ce forum dans les cours VBA

.End (x1Up).Row) : te permet d'aller chercher une ligne depuis le bas de ta feuille vers le haut

Exemple : Range("H" & Rows.Count).End(xlUp).Row)

  • Range("H") pour la colonne H
  • Rows.count permet de compte le nombre de ligne
  • End(xlUp) depuis la fin en remontant vers le haut
  • Row pour la ligne

L'instruction "Range("H" & Rows.Count).End(xlUp).Row)" va donc te donner la dernière ligne remplie en colonne H en partant du bas de ta feuille. Exemple si tu as des données jusque H10, l'instruction te permettra de savoir que la dernière ligne remplie en colonne H est 10

Si pas compris dis moi

Crdlt

Wowwww merci !

Comment ne pas comprendre avec une explication aussi limpide !

J'ai bien bien compris la deuxième partie et surtout ça va me servir pour plus tard !

En revanche la 1ere partie semble plus de l'optimisation pour la macro que réellement nécessaire a la demande. Est-ce bien ce qu'il fallait comprendre ?

re

En revanche la 1ere partie semble plus de l'optimisation...

Tu parles des DIM ?

Oui ceux la

Dim, dlg et i

Dim dlg As Integer

Dim i As Byte

dlg = dlg + 1

i = i + 1

J'avoue que ceux là, j'ai du mal à comprendre à quoi cela correspond

Bonjour à vous,

je répond en passant (en espérant ne pas me faire taper sur les doigts cette fois)

Il s'agit des déclarations et incrémentations des variables si je ne dis pas n'importe quoi.

Bonne journée !

re

Dim dlg As Integer

Dim i As Byte

dlg = dlg + 1

i = i + 1

  • "Dim" correspond à une déclaration de variable. Gitouille t'a donné le lien dont je t'ai parlé dans mon post précédent
  • "dlg" est pour reprer la dernière. Dans la boucle on ajoute 1 pour aller à la ligne suivante. Exemple, enlève le dlg = dlg +1 puis exécute le code tu vas voir ce que cela fait
  • "i" sert à répérer le nombre deduplication à faire en fonction de ce que tu as mis dans ta colonne H. Dans la boucle DO on copie tant que i est inférieure ou égale à la valeur de la cellule en H (c'est ce que j'ai nommé cel.value)

Tiens au fait de variable, j'aurais aussi dû mettre DIM CEL AS RANGE (je vais le rajouter dans le code)

Crdlt

OK super, je comprends (un peu) mais cette partie là est vraiment très très technique pour moi.

Je débute, donc oui, je suis sur le site et les cours VBA, je commence à faire des exercices.

Je passe certaines choses qui me paraissent très simples...mais alors cette partie des variables ...et surtout le code que tu m'as fait, j'ai du mal à l'ingérer !!! lol

autant certaines chose sont très simples autant d'autres sont très compliquées...

J'ai mis une heure sur des forum pour trouver le bon code pour afficher et faire disparaitre automatiquement une boite de dialogue après quelques seconde....mais ça marche.

Le voici (si y'a mieux et plus simple...je suis preneur)

Dim SH As Object

Set SH = CreateObject("WScript.Shell")

SH.Popup "ARRETE D'APPUYER SUR CE BOUTON !!!!", 4, "TEST BOITE DIALOGUE", 48

Set SH = Nothing

Grand merci à vous en tous cas, je vais vite progresser.


au fait, que permettrait de faire DIM CEL AS RANGE que tu souhaitais rajouter dans le code ?

re

au fait, que permettrait de faire DIM CEL AS RANGE que tu souhaitais rajouter dans le code ?

rien de plus, il s'agit simplement de déclarer une variable et ce, dans le même esprit que i et dlg comme je te l'ai expliqué dans un post précédent

Je l'ai rajouté dans le code que j'ai posté

Pour la boite de dialogue, on pouvait faire quelque chose mais là j'ai pas compris de quoi tu pars exactement

Cordialement

Rechercher des sujets similaires à "dupliquer lignes fonction variable"