Dispatcher en plusieurs feuille vba

Francois73

XLDnaute Occasionnel
Bonjour à tous

je sollicite votre aide, j'ai une feuille excel comportant en colonne A des numéros plusieurs dentre eux sont les mêmes , je cherche à créer une feuille par série de numéro en automatique, car je ne sais pas à l'avance combien il faudrat créer de feuilles. dans mon exemple en colonne A j'ai 5 série de numéro différents, il faudrait qu'excel me crée donc 5 feuilles . sur chaque feuille je souhaite qu'il s'affiche toutes les lignes correspondant à chaque numéro.
lorsque je lance ma macro j'ai un bug sur la ligne suivante
y = y & tablo(n, m) & ";"

pour info ma macro compléte

Sub tri8()
Application.ScreenUpdating = False
tablo = Range("A1").CurrentRegion
Set dico = CreateObject("Scripting.dictionary")
For n = LBound(tablo, 1) To UBound(tablo, 1)
x = tablo(n, LBound(tablo, 2))
For m = LBound(tablo, 2) + 1 To UBound(tablo, 2)
y = y & tablo(n, m) & ";"
Next m
y = Left(y, Len(y) - 1)
dico(x) = dico(x) & y & "|"
x = ""
y = ""
Next n
a = dico.keys
b = dico.items
For n = LBound(a) To UBound(a)
Sheets.Add.Name = a(n)
yy = Left(b(n), Len(b(n)) - 1)
yyy = Split(yy, "|")
For p = LBound(yyy) To UBound(yyy)
yyyy = Split(yyy(p), ";")
For q = LBound(yyyy) To UBound(yyyy)
ActiveSheet.Cells(p + 1, q + 1) = yyyy(q)
Next q
Next p
Next n
Application.ScreenUpdating = True


End Sub

merci de votre aide
 

Pièces jointes

  • tri aprés contrôle siegev3.xls
    268 KB · Affichages: 65

Robert

XLDnaute Barbatruc
Repose en paix
Re : Dispatcher en plusieurs feuille vba

Bonjour François, bonjour le forum,

Chez moi ton code ne plante pas. Toutefois je te propose une autre version qui me semble faire la même chose plus simplement...

Code:
Sub Macro1()
Dim dl As Long 'déclare la variable dl (Dernière Ligne)
Dim pl As Range 'déclare la variable pl (PLage)
Dim d As Object 'déclare la variable d (Dictionnaire)
Dim cel As Range 'déclare la variable cel (CELlule)
Dim tp As Variant 'déclare la variable tp (Tableau Temporaire)
Dim i As Integer 'déclare la variable i (Incrément)
Dim o As Object 'déclare la variable o (Onglet)

With Sheets("données") 'prend en compte l'onglet "données"
    dl = .Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne édité  dl de la colonne 1 (=A)
    Set pl = .Range("A1:A" & dl) 'définit la plage pl
End With 'fin de la prise en compte de l'onglet "données"
Set d = CreateObject("Scripting.Dictionary") 'définit le dictionnaire d
For Each cel In pl 'boucle sur toutes les cellules cel de la plage pl
    d(cel.Value) = "" 'alimente le dictionnaire
Next cel 'prochaine cellule de la boucle
tp = d.keys 'récupère le dictionnaire sans doublon dans le tableau temporaire tp
For i = 0 To UBound(tp) 'boucle sur tous les élément unique du tableau tp
    On Error Resume Next 'gestion des erreurs, en cas d'erreur, passe à la ligne suivante
    Set o = Sheets(CStr(tp(i))) 'définit l'onglet o (génère une erreur si cet onglet n'existe pas)
    If Err <> 0 Then 'condition : si une erreur a été générée
        Err = 0 'annule l'erreur
        Sheets.Add Before:=Sheets(1) 'ajoute un nouvel onglet en première position
        Set o = ActiveSheet 'définit l'onglet o
        o.Name = CStr(tp(i)) 'nomme l'onglet
    End If 'fin de la condition
    On Error GoTo 0 'annule la gestion des erreurs
    o.Cells.Clear 'efface les anciennes données de l'onglet 0 (à adapter)
    Sheets("données").Range("A1").AutoFilter 'lance le filtre automatique
    Sheets("données").Range("A1").AutoFilter Field:=1, Criteria1:=tp(i) 'filtre la colonne A avec tp(i) comme critère
    pl.Offset(0, 1).Resize(pl.Rows.Count, 10).SpecialCells(xlCellTypeVisible).Copy o.Range("A1") 'copy les lignes filtrées dans la cellule A1 de l'onglet o
    Sheets("données").Range("A1").AutoFilter 'supprime le filtre automatique
Next i 'prochain élément du tableau i
End Sub
 

Francois73

XLDnaute Occasionnel
Re : Dispatcher en plusieurs feuille vba

bonjour le forum

je reviens vers vous car j'ai un souci avec la macro dans le fichier ci joint (macro tri8). (si Robert est dans le coin). cette macro se charge de faire un tri selon les valeurs en colonne A de l'onglet Oriclef et crée un onglet par numéro d'identification. le souci c'est que ma première vache (et oui il s'agit de vaches) en ligne A1 , après le tri, est présente dans tous les onglets alors qu'elle ne devrait se trouver que dans l'onglet CLNC73190036
En fait la première ligne quelle que soit son numéro est dispachée dans tous les onglets
merci d'avance
 

Discussions similaires

Réponses
0
Affichages
119

Statistiques des forums

Discussions
312 559
Messages
2 089 641
Membres
104 239
dernier inscrit
STEVEALL