Copie automatique ligne vers onglet
Résolu
GGble
-
GGble -
GGble -
Bonjour,
pourriez vous m'aider à créer une macro sous excel 2003 pour résoudre le problème suivant?
J'ai un onglet "database" contenant un tableau de plusieurs centaines de lignes tel que:
colonne A: une liste de noms (N1, N2, N3,...etc)
colonne B à colonne H: des chiffres
Et j'ai une série d'onglet "N1", "N2", "N3",...etc
Je souhaite que toutes les lignes comportant le nom "Ni" en colonne A de l'onglet "database" soient automatiquement copié dans l'onglet du même nom.
Je souhaite par ailleurs éviter qu'il y ait des lignes vides dans les onglets "Ni".
Merci pour vos conseils, je n'ai jamais fait de Macro.
pourriez vous m'aider à créer une macro sous excel 2003 pour résoudre le problème suivant?
J'ai un onglet "database" contenant un tableau de plusieurs centaines de lignes tel que:
colonne A: une liste de noms (N1, N2, N3,...etc)
colonne B à colonne H: des chiffres
Et j'ai une série d'onglet "N1", "N2", "N3",...etc
Je souhaite que toutes les lignes comportant le nom "Ni" en colonne A de l'onglet "database" soient automatiquement copié dans l'onglet du même nom.
Je souhaite par ailleurs éviter qu'il y ait des lignes vides dans les onglets "Ni".
Merci pour vos conseils, je n'ai jamais fait de Macro.
1 réponse
-
Bonjour,
Je viens de donner ce code à un autre intervenant du forum :Sub creation_onglets() Dim Ws As Worksheet Dim trouve As Boolean Dim contenu As String Dim lig, derlig As Integer With Sheets("database") derlig = .Range("A65536").End(xlUp).Row For lig = 2 To derlig contenu = .Cells(lig, 1).Value For Each Ws In ThisWorkbook.Worksheets trouve = False If StrComp(Ws.Name, contenu, vbTextCompare) = 0 Then trouve = True Exit For End If Next Ws If trouve = True Then .Rows(lig).Copy Sheets(contenu).Range("A65536").End(xlUp).Offset(1, 0) Else Sheets.Add ActiveSheet.Name = contenu .Rows(lig).Copy Sheets(contenu).Range("A65536").End(xlUp).Offset(1, 0) End If Next lig End With End Sub
Pout l'utiliser :
- de ta feuille "database" taper ALT+F11
- Dans la fenêtre Visual Basic qui vient de s'ouvrir : Insertion/Modules
- copier/coller ce code dans cette fenêtre puis fermer Visual Basic
- pour l'utiliser depuis la feuille excel taper ALT+F8, choisir creation_onglets et cliquer sur exécuter.-
-
Le même code commenté :
Sub creation_onglets() 'déclaration des variables Dim Ws As Worksheet 'Ws nous permettra de boucler sur toutes les feuilles du classeur Dim trouve As Boolean 'trouve renverra vrai ou faux Dim contenu As String Dim lig, derlig As Integer 'pour permettre la boucle sur toutes les lignes de la feuille database With Sheets("database") 'avec la feuille database derlig = .Range("A65536").End(xlUp).Row 'on stocke le numéro de la dernière ligne For lig = 2 To derlig 'pour toutes les lignes de 2 à la fin du tableau contenu = .Cells(lig, 1).Value 'on affecte à la variable "contenu" la valeur contenue dans A(ligne) For Each Ws In ThisWorkbook.Worksheets 'pour toutes les feuilles du classeur trouve = False 'affecte faux à la variable "trouve" If StrComp(Ws.Name, contenu, vbTextCompare) = 0 Then 'Si le nom de la feuille est identique à la variable "contenu" alors trouve = True 'trouve = vrai. la feuille existe déjà Exit For 'on sort de la boucle sur les feuilles End If Next Ws 'feuille suivante If trouve = True Then 'Si la feuille existe déjà .Rows(lig).Copy Sheets(contenu).Range("A65536").End(xlUp).Offset(1, 0) 'alors on copie la ligne choisie de la feuille database vers la feuille("contenu") Else 'sinon Sheets.Add 'on ajoute une feuille ActiveSheet.Name = contenu 'on l'appelle en fonction du contenu de la cellule A feuille database .Rows(lig).Copy Sheets(contenu).Range("A65536").End(xlUp).Offset(1, 0) 'et on copie/colle End If Next lig 'ligne suivante End With End Sub
En espérant que ça t'aide. -
-