Copier une ligne : ajout dans un module VBA existant

Salut le forum,

Je n'y connais rien en programmation mais j'ai réussi à trouver un programme VBA qui marche pour ce que je cherchais à faire. Mais j'ai besoin de votre aide pour ajouter une fonction.

J'ai une feuille Excel (l'onglet est nommé A) avec plein de données sur plusieurs filières (jusque là tout va bien).

J'ai trouvé un programme qui me permet de créer automatiquement un onglet par filière en recopiant les lignes concernées.

Le problème est que les données sont bien recopiées dans chaque onglet mais la ligne 1 est vide. Il s'agit de la ligne des intitulés de colonne.

J'ai besoin de vous pour ajouter dans le programme le fait de copier la ligne 1 de l'onglet A sur tous les onglets créés.

Merci d'avance pour votre aide.

Je ne peux pas vous mettre le fichier Excel car il s'agit de données pro mais voici le programme concerné :

Sub creation_onglets()

Dim Ws As Worksheet

Dim trouve As Boolean

Dim contenu As String

Dim lig, derlig As Integer

With Sheets("A")

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

Hello,

Pour information, tu peux utiliser des balises pour insérer ton code et le rendre plus lisible.

Ensuite remplace simplement :

For lig = 2 To derlig

Par :

For lig = 1 To derlig

A+,
Kilian

Salut Kilian,

Merci pour ta réponse. Je viens d'essayer mais ça ne marche pas.

La ligne 1 dans les onglets est toujours vide.

Par contre il m'a créé un onglet supplémentaire avec juste la ligne 1 qu'il a placé en ligne 2.

:-)

Bonjour à tous,

Peux-tu joindre un fichier ?

Cordialement,

Bonjour Xorsankukai,

J'ai fait une version épurée du fichier ci joint.

Le but est d'avoir un onglet par filière avec les données correspondantes.

Merci d'avance.

Re,

Un essai...CTRL + e pour exécuter la macro...

11test.xlsm (22.14 Ko)

Cordialement,

C'est nickel !

Merci beaucoup Xorsankukai.

J'ai juste modifié dans le programme car mon onglet s'appellera toujours A et non DATA.

Et chose bizarre : tous les onglets démarrent avec une ligne 1 vide mais au moins j'ai mes intitulés de colonne en ligne 2 et mes données en dessous donc je suis ravi.

Merci encore !

Re,

Merci pour le retour,

tous les onglets démarrent avec une ligne 1 vide

Petite modif...

Sheets("Data").Range("A1").CurrentRegion.SpecialCells(xlVisible).Copy Sheets(nom).Range("A1")

Cordialement,

Alors là c'est juste PARFAIT !

Merci infiniment.

Je n'ai plus rien à dire à part : un grand MERCI.

Si tu aimes les défis, je pourrai pousser le bouchon encore plus loin.

Est-il possible d'avoir un programme qui permettrait, pour tous les onglets, de mettre les lignes en couleur mais avec une couleur différente à chaque changement de Procédure (colonne C)? Là je sais j'abuse et je dirai même que c'est impossible mais on peut toujours rêver.

Bonjour,

Merci pour le retour et pour avoir passé le sujet en résolu,

mettre les lignes en couleur mais avec une couleur différente à chaque changement de Procédure (colonne C)

Un essai....

8test-v2.xlsm (25.11 Ko)

Cordialement,

Salut,

Un grand merci Xorsankukai. Comme j'aimerai pouvoir maitriser le VBA comme toi.

Par contre, quand j'essaie de copier les programmes dans mes autres fichiers, il bloque sur cette ligne

Set champ = Sheets("A").ListObjects(1).ListColumns(3).DataBodyRange

Je n'arrive pas à comprendre pourquoi. Je vais essayer de creuser.

Merci encore. Bonne journée.

Bonjour Quiche en vba, le forum,

Dans ta feuille A, mets tes données sous forme de tableau structuré.

https://www.excel-pratique.com/fr/astuces/tableau-structure

Cordialement,

Maintenant j'ai ce message d'erreur

image

Et en faisant débogage, il se met sur cette ligne

tb = .ListObjects(1).Range

Je n'y comprends rien.

Re,

Difficile pour moi sans voir le fichier...

Dans Formule / Gestionnaire de noms, tu as bien un truc du genre:

image

Et tu as bien mis With Sheets("A") ?

 With Sheets("A")
     tb = .ListObjects(1).Range

Cordialement,

Re,

Dans Formules/Gestionnaire de noms j'ai bien :

image

Et dans le programme il y a bien With Sheets("A")

Je pense que je dois mal faire quand je mets en forme de tableau structuré.

Pour y arriver je choisi juste Accueil/Mettre sous forme de tableau

est-ce que cela suffit ?

Re,

  1. Tu sélectionnes tes données de A1 à G et dernière ligne (dans le dernier fichier: de A1 à G102).
  2. Puis Accueil / Mettre sous forme de tableau
  3. Choisir le modèle de tableau
  4. Cocher Mon tableau comporte des entêtes.
image

Tu obtiens alors:

image

Cordialement,

Re,

ça marche nickel ! T'es un champion !!

Merci infiniment. J'aurai une pensée pour toi chaque fois que je lancerai cette macro.

Merci encore. Très bonne journée et passes de bonnes fêtes de fin d'année.

Rechercher des sujets similaires à "copier ligne ajout module vba existant"