Copie automatique ligne vers onglet

Résolu/Fermé
GGble - 15 avril 2010 à 11:32
 GGble - 16 avril 2010 à 17:28
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.

A voir également:

1 réponse

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
16 avril 2010 à 10:01
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.
0
Bonjour Pijaku,
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.
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
16 avril 2010 à 10:47
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.
0
Ça m'aide beaucoup.
Merci encore!!
0