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
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 = 3Ce 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 yVoici 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 SubMerci pour ces commentaires. C'est plus que du sur mesure
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.