Copier et insertion de lignes en fonction d'un nombre

Bonjour,

Débutant sous excel, je souhaite faire un travail qui consiste à recopier des lignes en les insérant juste en-dessous en fonction d'une valeur qui varie d'une ligne à l'autre.

Exemple : (Dans le fichier joint)

La ligne secourisme correspond à 8 places pour la formation. Je voudrais que cette ligne soit dupliquée 7 fois juste en dessous ce qui me fera en tout 8 lignes (car 8 places) "secourisme" 7 dupliquées + l'initiale. Ensuite j'arrive à la ligne "natation" qui devra être dupliquée elle 5 fois pour que je puisse avoir 6 ligne qui correspondent à 6 places dans lesquelles je pourrais ensuiteentrer les noms des personnes. Pour la ligne cyclisme idem et ainsi de suite jusqu'à la fin de mon tableau qui comprend environs 300 lignes de formations. La fin du tableau correspondra lorsque la colone "type de formation" est vide de formation.

Le problème dans le cas de ces insertions c'est le décalage des formatin. La ligne "natation" qui au départ est en L4A4 sera située après l'insertion de la formatin "secourisme" à la ligne L11A11 car la formation "secourisme" occupera les 8 lignes au-dessus (7+1).

Voilà mon problème et j'espère que c'est assez clair. Je pourrais le faire manuellement ce qui devrait me prendre deux à trois heures minimum mais c'est dommage car je suis sûr qu'il doit y avoir une solution plus rapide mais il faut passer par du VBA et là je ne connais pas.

Par avance merci à celui qui pourra m'apporter une solution.

Cordialement.

Philippe

39exemple.xlsx (10.56 Ko)

Bonsoir,

Bon je répond hors sujet car je ne sais pas faire, mais à mon humble avis, en utilisant F4 pour répéter les insertions de lignes puis en sélectionnant la ligne à dupliquer et en tirant la poignée (en bas à gauche de la sélection), je pense que tu en auras pour 30 min à tout casser.

Mais ceci dit le défi reste intéressant pour un bon VBAteur

Merci samestoy pour l'utilisation de la touche F4 mais j'avais commencé à faire de la sorte et ça devient très très vite lassant si ce n'est pas autre chose

L'avantage si une solution par ligne de commande est trouvée c'est qu'au-dela du fait que le travail sera fait automatique cela me permettra de comprendre un peu ce langage.

Bonjour et bienvenue sur le forum

Bonjour à tous

Un essai à tester. Te convient-il ?

Bye !

35exemple-v1.xlsx (10.56 Ko)

Bonjour,

Gmb semble s'être trompé de fichier ou a détruit son code...

Comme ça ne demande que peu de code, ça t'évitera d'attendre :

Sub Dupliquer()
    Dim n%, i%, nf%
    With Worksheets("Feuil1")
        n = .Cells(.Rows.Count, 1).End(xlUp).Row
        Application.ScreenUpdating = False
        For i = n To 3 Step -1
            nf = .Cells(i, 8) - 1
            If nf > 0 Then
                .Cells(i, 1).Resize(, 11).Copy
                .Cells(i + 1, 1).Resize(nf, 11).Insert xlShiftDown
            End If
        Next i
    End With
    Application.CutCopyMode = False
End Sub

Cordialement.

Bonjour à tous

En effet, mon étourderie s'est encore manifestée et je n'ai pas joint le bon fichier.

Merci à MFERRAND de l'avoir rattrapée.

Je joins malgré tout le bon fichier où je me suis attaché à faire en sorte qu'un second clic sur le bouton ne change rien...

C'est juste un petit plus !

Bye !

62exemple-v1.xlsm (24.31 Ko)

Salut !

Bonne idée la numérotation...

Super ça marche. Maintenant je fait s'essayer de décortiquer pour comprendre la procédure qui a été employé. C'est super quand on connait un peu de VBA pour ce faciliter le travail et c'est tellement agréable.

Merci à gmb et à MFerrand.

Cordialement.

Bonjour les amis programmeurs VBA

La petite macro que vous m'avez confectionnée marche bien. Je l'ai légèrement modifiée mais je voudrais savoir si une fois le résultat obtenu est-il possible d'avoir une nouvelle macro VBA pour obtenir le résultat que je mis dans le fichier joints.

Contrairement serait-il possible que les renseignements dans les lignes correspondant aux colonnes de A à H soient fusionnées. Cela permettrait de gagner en visibilité. Ayant plus de 1900 lignes environs au total le faire manuellement serait très fastidieux.

Question subsidiaire : Une fois le travail effectué comment est-il possible de faire des tris ? En effet lorsqu'il y a des des cellules fusionnées et d'autres non, excel ne peut pas faire le tri. Le problème c'est que les éléments de mon tableau doivent être triés par ordre croissant du début de la formation, et, il se peut qu'une activité soit décalée ce qui chamboule le classement dans le tableau. Je ne sais pas si je suis clair dans mes explications.

Cordialement

57exemple-v1.xlsm (20.03 Ko)

Bonjour

Tout est possible si on peut envisager de créer une colonne supplémentaire dans ton tableau.

Cette colonne serait définitive afin de servir pour les tris, mais pourrait rester masquée.

Et pour ce qui est du tri, il faudrait aussi passer par une macro. D'où la question : trier par rapport à quelles colonnes er avec quelles priorités ?

A te relire

Bonjour gmb,

Pour créer une colonne supplémentaire il n'y a pas de problème. Quand au trie il faudrait qu'il soit sur la date (début) puis le nom de la formation. Dans le fichier exemple il serait sur la colonne F puis A.

Mais la question principale c'est est-ce que je peux fusionner les éléments contenue dans la colonne D qui sont les mêmes et ceux de la colonne H. De cette façon il n'apparaîtrait que la référence du code pour chaque formation (colonne D) et uniquement une fois le nombre de place (colonne H) ce qui rend le tableau plus lisible.

Pour info le code formation est unique.

Est-ce que je n'ai pas été trop brouillon dans mes explication ?

Cordialement.

Bonjour

Nouvelle version, en repartant du document d'origine.

Bye !

22exemple-v3.xlsm (29.42 Ko)

Salut gmb

Merci pour cette nouvelle version qui marche très bien mais le seul petit problème c'est qu'il faut partir du tableau vierge or j'ai déjà commencer à remplir pas mal de lignes (une bonne centaines) et je n'ai pas forcément envie de tout reprendre de zéro.

C'est pour ça que j'aurai voulu savoir si d'un tableau rempli en partie, on pouvait faire ce fusionnement de lignes ayant le même code (RN97, RN98...) et le nombre total de place offerte (2, 3...) afin que la lecture du tableau soit un peu "aérée" entre les différentes formations.

Si c'est trop compliqué, je ferais ce fusionnement au fur et à mesure que je remplirais le tableau ce qui mettra pas mal de temps. J'ai un peu plus de 300 formations et représentent avec les places à près de 2000 lignes d'écriture.

Cordialement et merci pour le temps que tu as consacré.

Pour éviter toute confusion envoie moi au moins une partie du fichier sur lequel tu travailles ...

Bye !

Je te joins un extrait du tableau. Il est sensiblement le même que l'exemple. J'ai commencé manuellement à faire les fusions. Ce que je voudrait c'est qu'il fasse automatiquement le reste de toutes les fusionS des colonnes E et I et qu'il me sorte également par ordre croissant les colonnes G puis A des qu'une date de début est modifiée.

Cordialement.

16inscription.xlsm (21.21 Ko)

Bonjour

Nouvelle version.

Bye !

23inscription-v4.xlsm (36.44 Ko)

Bonjour gmb,

Super ton code cependant j’ai quelques questions :

  • Est-il possible une fois qu’on fusionne d'avoir une hauteur de ligne identique pour l’ensemble. Par exemple 18 de haut. Cela éviterait de trouver des lignes super hautes comme pour RD00 par rapport à RN98 ?
  • Est-il possible de mettre les colonnes cachés plus loin comme à partir de la colonne « AA » ce qui me permettrait d’avoir 26 colonnes comme zone de travail si par exemple je souhaite rajouter des colonnes d’informations supplémentaires ?
  • Enfin comment je fais pour intégrer tes lignes de code dans mon fichier de travail ?
Cela dit merci pour le travail et vive le VBA pour simplifier la vie des petits utilisateurs d'Excel comme moi.

Cordialement.

Bonjour

philippe.p@ a écrit :

comment je fais pour intégrer tes lignes de code dans mon fichier de travail ?

Il y a deux méthodes.

La première :

1 – Ouvrir le fichier ‘’Inscription V5’’ (V5) et ton fichier de travail (FT)

2 – Activer V5

3 – Taper simultanément sur les touchers Alt et F11 : la fenêtre VBA s’ouvre

4 – Copier tout le code

5 – Dans la fenêtre de gauche, ‘’Project – VBAProject, cliquer sur le nom écrit en gras : ‘’VBAProject ( FT )

6 – Dans le menu de la fenêtre VBA, cliquer sur ‘’Insertion’’ et choisir ‘’Module’’

7 – Supprimer ce qu’il peut y avoir par défaut sur cette feuille et coller le code copié précédemment

8 – Retourner sur la feuille de calcul de V5

9 – Faire un clic droit sur le bouton bleu ‘’Fusions de cellules’’ puis un deuxième (et éventuellement un 3°^) clic droit sur la bordure du bouton. Vérifier que le bouton soit bien sélectionné et que ne soit pas le texte qui est à l’intérieur.

10 – Copier ce bouton et le coller sur la feuille de FT après y avoir sélectionné une cellule (A2 ?)

11 – Refaire un (ou plusieurs) clics droits sur ce bouton qu’on vient de coller jusqu’à afficher la boite de dialogue contextuelle et choisir : ‘’Affecter une macro’’

12 – Dans la nouvelle boite de dialogue que s’affiche, sélectionner la macro ‘’FusionsDeCellules’’

Prendre garde de ne pas sélectionner ‘’Inscription v5.xlsm !FusionDeCellules’’

13 – Refaire pareil avec le 2° bouton ‘’Classement’’

14 – faire un’’ Enregistrer-sous’’ de FT en choisissant le type ‘’Classeur Excel (prenant en charge les macros)(*.xlsm)

La deuxième :

Joindre ton fichier de travail à ton prochain message et je te ferai ces manip…

Bye !

Nouvelle version

17inscription-v5.xlsm (38.16 Ko)

Salut gmb

Je viens de remarquer un petit bug dans ton code concernant la fusion car depuis hier je ne comprenais pas pourquoi le programme tourné en boucle lorsque j' inserais dans mon fichier de travail.

Le bug vient d'après moi que lorsque dans la colonne "I" il n'y a pas une valeur numérique super à 0 le programme boucle. Il faudrait faire une vérification sur cette colonne pour éviter de lancer le programme avec des valeurs nulles (cellule non remplit).

Encore merci pour le travail.

Cordialement


Salut gmb

Je viens de remarquer un petit bug dans ton code concernant la fusion car depuis hier je ne comprenais pas pourquoi le programme tourné en boucle lorsque j' inserais dans mon fichier de travail.

Le bug vient d'après moi que lorsque dans la colonne "I" il n'y a pas une valeur numérique super à 0 le programme boucle. Il faudrait faire une vérification sur cette colonne pour éviter de lancer le programme avec des valeurs nulles (cellule non remplit).

Encore merci pour le travail.

Cordialement

Nouvelle version.

Bye !

Rechercher des sujets similaires à "copier insertion lignes fonction nombre"