Copie automatique ligne vers onglet

Résolu
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.

1 réponse

  1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 772
     
    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
    1. GGble
       
      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
    2. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 772
       
      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
    3. GGble
       
      Ça m'aide beaucoup.
      Merci encore!!
      0