Scinder un onglet Excel en plusieurs onglets sur la base d'une variable

Bonjour à tous,

Après avoir parcouru le forum, je n'ai pas trouvé la solution qui répondait pleinement à ma question.

Je souhaite qu'une base de données clients Excel soit découpée en autant d'onglets qu'il y a de références sur la colonne A.

J'ai assemblé différents bouts de VBA qui me permettent presque de réaliser ce que je souhaite faire, mais je suis confronté à un bug :

La première ligne qui comprend les variables n'est pas reprise dans chaque onglet.

Autre question : peut-on dupliquer la mise en page de l'onglet principal (base de données) et idéalement la partie qui concerne le verrouillage de certaines colonnes ?

Voici le code dans son état actuel :

Sub creations_onglets()
Dim Ws As Worksheet
Dim trouve As Boolean
Dim contenu As String
Dim lig, derlig As Integer
With Sheets("SQL") 'à adapter Feuil1 = feuille ou sont situées les données à découper
derlig = .Range("A8000").End(xlUp).Row
For lig = 2 To derlig 'Indique que les données commencent dès la seconde ligne
contenu = .Cells(lig, 1).Value 'Indique que les données à découper sont situées sur la première colonne
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("A8000").End(xlUp).Offset(1, 0)
Else
Sheets.Add
ActiveSheet.Name = contenu
.Rows(lig).Copy Sheets(contenu).Range("A8000").End(xlUp).Offset(1, 0)
End If
Next lig
End With

End Sub

Ci-joint le fichier sur lequel je réalise mes tests.

Merci d'avance à tous pour votre aide !

18test-macro.xlsx (11.26 Ko)

Bonjour,

regarde si ceci peut correspondre à ta demande

Bonjour

Pensez-vous pouvoir m'aider également sur mon problème ?

Merci

audrey

ok je vais regarder (je n'ai pas chargé ton fichier)

Bonjour,

regarde si ceci peut correspondre à ta demande

Bonjour,

Merci de ton retour rapide ! J'ai repris ton code et l'ai affecté à une macro associée à mon fichier, mais j'ai une fenêtre de débogage qui s'ouvre et qui bloque sur la ligne suivante :

With ActiveSheet.ListObjects(1)

Une idée du souci ?

Merci beaucoup de ton aide,

A+

je suis de retour

je pense que tu n'as pas du structurer tes données en tableau ... je regarde.

en effet !

voici

32test-macro.xlsm (17.42 Ko)

Merci Chef ! C'est nickel.

La customisation des couleurs se fait ici j'imagine ?

With ActiveSheet

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

.ListObjects.Add(xlSrcRange, Cells(1).CurrentRegion, , xlYes).Name = cle

.ListObjects(1).TableStyle = "TableStyleMedium2"

.Name = cle

End With

As-tu également la variable à indiquer pour respecter le verrouillage des cellule de l'onglet de départ "SQL" ? A moins que le ".PasteSpecial" reprenne exactement ces infos ? Autre question : est-il possible de répliquer la largeur des colonne de l'onglet de départ ?

A+

La customisation des couleurs se fait ici j'imagine ?

With ActiveSheet

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

.ListObjects.Add(xlSrcRange, Cells(1).CurrentRegion, , xlYes).Name = cle

.ListObjects(1).TableStyle = "TableStyleMedium2"

.Name = cle

End With

comme ceci en effet !

ActiveSheet.ListObjects(1).TableStyle = "TableStyleMedium7"

As-tu également la variable à indiquer pour respecter le verrouillage des cellule de l'onglet de départ "SQL" ? A moins que le ".PasteSpecial" reprenne exactement ces infos ?

je ne sais pas, il faut essayer


Autre question : est-il possible de répliquer la largeur des colonne de l'onglet de départ ?

je ne sais pas, je me suis déjà cassé le nez là-dessus

mais soit tu fais un ajustement automatique

Cells.EntireColumn.AutoFit

soit tu le programmes

Selection.ColumnWidth = 15.5

Hello !

Ah super, merci énormément, ça fonctionne très bien, c'est vraiment très sympa de ta part.

A tout hasard, tu saurais comment figer la première ligne sur tous les onglets via cette macro ?

J'ai trouvé ce code qui pourrait correspondre mais ne sais pas où l'indiquer :

.ActiveWindows.FreezePanes=True

EDIT :

J'ai tenté ça, et ça a l'air de fonctionner ! C'est propre ?

For Each cle In dico.Keys

.Range.AutoFilter Field:=1, Criteria1:=cle

.Range.Select

Selection.Copy

Sheets.Add After:=ActiveSheet

With ActiveSheet

Rows("1:1").Select

With ActiveWindow

.SplitColumn = 0

.SplitRow = 1

End With

ActiveWindow.FreezePanes = True

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

.ListObjects.Add(xlSrcRange, Cells(1).CurrentRegion, Selection.ColumnWidth = 15.5, xlYes).Name = cle

ActiveSheet.ListObjects(1).TableStyle = "TableStyleMedium11"

.Name = cle

End With

sw.Select

Next

Excellente journée à toi,

A tout hasard, tu saurais comment figer la première ligne sur tous les onglets via cette macro ?

oui :

    Rows("2:2").Select
    ActiveWindow.FreezePanes = True

il faut l'insérer après chaque copie dans chaque onglet

Ok, merci.

Par contre, je n'arrive toujours pas à répliquer exactement la mise en forme (couleur des lignes et des caractères) de la première colonne. Je n'arrive qu'à appliquer un style Excel mais qui écrase la mise en forme initiale lors de la génération d'onglets. Un idée ?

++

Bonjour,

Bonjour Steelson,

Une proposition à étudier.

Cdlt.

16atheenais59.xlsm (26.67 Ko)

Bonjour,

Bonjour Steelson,

Une proposition à étudier.

Cdlt.

atheenais59.xlsm

Bonjour Jean-Eric,

Alors là, c'est le graal ! Je suis en train de tester et ça a l'air de fonctionner parfaitement.

Une seule remarque : j'ai verrouillé certaines colonnes et en ai déverrouillé d'autres pour sécuriser à minima la base et je souhaiterais que cet aspect soit repris à l'identique dans les différents onglets générés par la macro. C'est possible selon toi ?

Merci d'avance !

Bien à toi,

Re,

Si on doit continuer à jouer, il faut être plus précis. Renvoie un classeur avec ses restrictions.

Cdlt.

Re,

Si on doit continuer à jouer, il faut être plus précis. Renvoie un classeur avec ses restrictions.

Cdlt.

Oui bien sûr ! Voici le fichier. En gros je souhaiterais pouvoir protéger l'onglet SQL pour que les cellules non grisées ne soient pas modifiables (sans forcément de mot de passe) et que ce verrouillage soit répercuté sur tous les autres onglets que génère la macro.

Merci par avance de ton aide précieuse !

Bien à toi,

12atheenais59.xlsm (731.17 Ko)

Re,

Quel est le critère pour une ligne jaune ?

Cdlt.

Ce n'est pas un critère automatique, c'était juste pour m'assurer que la mise en forme était bien transposée dans les onglets après activation de la macro

Re

je me demande quand même à quoi cela sert de scinder un onglet Excel en plusieurs onglets ?

autant scinder un onglet Excel en plusieurs fichiers, je peux comprendre pour des questions soit de confidentialité soit de travail en parallèle (puis regrouper toutes les réponses), mais en plusieurs onglets ?

C'est clairement fonctionnel. L'idée étant de permettre à une trentaine de personnes de travailler en simultanée sur le même fichier (via un sheets ou un office collaboratif)sans que les filtres des uns parasitent le travail des autres , sachant qu'une personne = un onglet. Le fait de vouloir tout conserver dans le même fichier est pour faciliter la récupération ultérieure des données saisies dans l'onglet "maître".

Rechercher des sujets similaires à "scinder onglet onglets base variable"