Copie et insertion automatique de lignes

Bonjour à tous. Plus passionné de guitare que d'informatique je suis un quinquagénaire qui est confronté à un problème simple pour la plupart d'entre vous mais qui me semble insurmontable quand j'ouvre mon tableau excel (c'est dire mon niveau ;-) ...

Voilà mon soucis :

Je voudrais insérer automatiquement des lignes en fonction d'une quantité indiquée dans une cellule. Dans mon fichier (joint) j'ai une colonne "référence", une colonne "titres" et une colonne "quantité" ... j'aimerais qu'en fonction du nombre indiqué dans chaque cellule "quantité" des lignes reprenant les informations s'insèrent automatiquement. Je ne sais pas si c'est très clair mais avec mon fichier c'est plus explicite ...

Bien sûr ce tableau est une version ultra-simplifiée de la version définitive sinon j'aurais tout fait manuellement. En réalité j'ai quelques centaines de références à traiter ...

Merci d'avance de votre aide ...

Hello,

Voici :

Je te laisse mettre les bordures et tout le tralala

Merci beaucoup Rag02700. C'est impeccable et je vais gagner un temps fou....
Je vais en profiter pour imprimer le texte de la macro que tu as créée pour essayer de comprendre comment ça fonctionne et le reproduire pour les prochaines fois.
Bonne continuation ...

re-salut Rag. Je profite d'être tranquille au taff de bonne heure pour bidouiller un peu et j'ai déjà rajouté des colonnes à mon tableau en utilisant ta macro. J'ai pu comprendre où modifier le nombre de colonnes (Const Col_Quant As Byte = nombre de colonnes) et aussi vers la fin en rajoutant autant de lignes .Cells (x,...) = Tab_BDD(i,...) que nécessaire ... J'y vais un peu en aveugle car pour moi tout est de l'algèbre mais ça fonctionne hyper bien !!

Du coup je pense que je peux enregistrer cette macro pour l'utiliser dans plein de tableau différents fonctionnant sur le même principe, non ?Je devrais sans doute modifier des bricoles mais en gardant le principe de créer un deuxième onglet "ALL_ROWS" qui sert de "table de mixage" ;-) pour arriver au résultat final ...

Hello,

Oui tu peux sur d'autres tableaux.

Il faut avoir une feuille BASE et une feuille ALL_ROWS tu peux modifier le nom de la feuille si tu veux mais dans ce cas il faut modifier ça (Nom de la feuille de restitution)

Const Name_F_Row As String = "ALL_ROWS"

Il faut avoir une colonne Chiffrée qui te donnes ton nombre de ligne à créer. Dans ton exemple c'est la colonne "QUANTITE".

Const Col_Quant As Byte = 3

Ce code n'indique pas le nombre de colonne de ta BASE mais le numéro de ta colonne chiffrée (dans ton exemple QUANTITE) dans ta BASE

Il faut aussi ajouter les lignes comme ceci pour une restitution sur 5 colonnes par exemple :

                    For y = 1 To Quant
                        x = .Cells(Rows.Count, 1).End(xlUp).Row + 1
                        .Cells(x, 1) = Tab_BDD(i, 1)
                        .Cells(x, 2) = Tab_BDD(i, 2)
                        .Cells(x, 3) = Tab_BDD(i, 3)
                        .Cells(x, 4) = Tab_BDD(i, 4)
                        .Cells(x, 5) = Tab_BDD(i, 5)
                    Next y

Voici la version commentée

Sub Affiche_All_Rows()

Const Name_F_Row As String = "ALL_ROWS" 'Nom de la feuille de restitution
Const Col_Quant As Byte = 3 'Numéro de la colonne "Quantité" dans la base

Dim Tab_BDD
Dim F_Row As Worksheet
Dim i As Long, j As Long, y As Long, x As Long
Dim Quant As Variant

Tab_BDD = [A1].CurrentRegion ' Insertion de la feuille BASE dans un tableau
Set F_Row = Sheets(Name_F_Row) 'Definition de la feuille de restitution

F_Row.Cells.Clear 'Supprimme le contenu de la feuille de restitution
For i = LBound(Tab_BDD) To UBound(Tab_BDD) 'Boucle sur le tableau de la feuille BASE
    If i = 1 Then 'Si on traite la premiere ligne alors on boucle sur toutes les en-tete + restitution dans la feuille
        For j = LBound(Tab_BDD, 2) To UBound(Tab_BDD, 2)
            With F_Row
                .Cells(1, j) = Tab_BDD(1, j)
            End With
        Next j
    Else 'Si on ne traite pas les en-tetes
       Quant = Tab_BDD(i, Col_Quant) 'Stocke la quantité soit le nombre de ligne à créer
       If IsNumeric(Quant) _
            And Not Quant < 1 Then 'Si la quantité est numéric et >0
                With F_Row
                    For y = 1 To Quant 'Boucle pour créer autant de ligne que de quantité + restitution des valeurs dans la feuille
                        x = .Cells(Rows.Count, 1).End(xlUp).Row + 1
                        .Cells(x, 1) = Tab_BDD(i, 1)
                        .Cells(x, 2) = Tab_BDD(i, 2)
                        .Cells(x, 3) = Tab_BDD(i, 3)
                    Next y
                End With
        End If
    End If
Next i

Set F_Row = Nothing

End Sub

Merci pour ces commentaires. C'est plus que du sur mesure et merci pour le temps passé...

Si je peux te tuyauter sur quelque chose que je maitrise mieux que Excel (guitare, patisserie, moto sportive des années 90, imprimerie et arts graphiques ...), n' hésite pas ...

Très cordialement.

Rechercher des sujets similaires à "copie insertion automatique lignes"