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.
A voir également:
- Copie automatique ligne vers onglet
- Réponse automatique thunderbird - Guide
- Copie cachée - Guide
- Partager photos en ligne - Guide
- Copie écran samsung - Guide
- Copie disque dur - Guide
1 réponse
Bonjour,
Je viens de donner ce code à un autre intervenant du forum :
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.
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.
merci pour ta réponse qui m'aide vraiment et qui marche!
Reste maintenant pour moi à comprendre le code et à l'adapter à mes besoins.
Bonne journée.
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 SubEn espérant que ça t'aide.
Merci encore!!