Petit Soucil de division de feuille

JeanMikael

XLDnaute Junior
Re-re Bonjour le forum,


J'ai cette macro :


Code:
Sub distribue4()
Dim n As Integer
Dim ftr As String
'declaration de collection
Dim criteres As Collection
Set criteres = New Collection
'creation de la collection des criteres
Application.ScreenUpdating = False

For n = 2 To Range("g65536").End(xlUp).Row
  On Error Resume Next
    criteres.Add Range("g" & n), CStr(Range("g" & n))
  On Error GoTo 0
Next n

'ajout d'une feuille par critere
For n = 1 To criteres.Count

  Sheets.Add.Name = "Erreur " & criteres(n)

  Sheets("Feuil1").Range("A1:AD1").Copy Destination:=ActiveSheet.Range("A1")

Next n

'tansfert vers les feuilles
For n = 2 To Sheets("Feuil1").Range("g65536").End(xlUp).Row

  ftr = "Erreur " & Sheets("Feuil1").Range("g" & n)
 
  Sheets("Feuil1").Range("A" & n & ":AD" & n).Copy Destination:=Sheets(ftr).Range("A65536").End(xlUp).Offset(1, 0)

Sheets("Feuil1").Select

Next n

Application.ScreenUpdating = True

End Sub

Cette macro me permet de créer un onglet pour chaque valeur rencontrer dans la colonne G, dans cette colonne ce sont des chiffre jusque là tout va bien, mon soucil c'est que dans ma colonne j'ai par exemple des chiffre de 0 à 9 donc mon code va crée un onglet nommé Erreur 1 par exemple et ce que je souhaiterai c'est ajouter un 0 pour les onglet qui vont de Erreur 1 à 9 donc j'aurai par exemple comme nom d'onglet Erreur 01, j'ai essayé de mettre dans ma colonne G un format personnalisée qui met un 0 devant les chiffres allant de 1 à 9 met la macro lorsqu'elle divise les onglets ne tient pas compte du format personalisée, comment faire pour obtenir le résultat souhaité ?
d'avance merci de votre aide, bonne après-midi.

Cordialement,
Jean-Mikaël
 

JeanMikael

XLDnaute Junior
Re : Division d'Onglet

Re-re Bonjour le forum,


J'ai cette macro :



Code:
Sub distribue4()
Dim n As Integer
Dim ftr As String
'declaration de collection
Dim criteres As Collection
Set criteres = New Collection
'creation de la collection des criteres
Application.ScreenUpdating = False

For n = 2 To Range("g65536").End(xlUp).Row
  On Error Resume Next
    criteres.Add Range("g" & n), CStr(Range("g" & n))
  On Error GoTo 0
Next n

'ajout d'une feuille par critere
For n = 1 To criteres.Count

  Sheets.Add.Name = "Erreur " & criteres(n)

  Sheets("Feuil1").Range("A1:AD1").Copy Destination:=ActiveSheet.Range("A1")

Next n

'tansfert vers les feuilles
For n = 2 To Sheets("Feuil1").Range("g65536").End(xlUp).Row

  ftr = "Erreur " & Sheets("Feuil1").Range("g" & n)
 
  Sheets("Feuil1").Range("A" & n & ":AD" & n).Copy Destination:=Sheets(ftr).Range("A65536").End(xlUp).Offset(1, 0)

Sheets("Feuil1").Select

Next n

Application.ScreenUpdating = True

End Sub

Cette macro me permet de créer un onglet pour chaque valeur rencontrer dans la colonne G, dans cette colonne ce sont des chiffre jusque là tout va bien, mon soucil c'est que dans ma colonne j'ai par exemple des chiffre de 0 à 9 donc mon code va crée un onglet nommé Erreur 1 par exemple et ce que je souhaiterai c'est ajouter un 0 pour les onglet qui vont de Erreur 1 à 9 donc j'aurai par exemple comme nom d'onglet Erreur 01, j'ai essayé de mettre dans ma colonne G un format personnalisée qui met un 0 devant les chiffres allant de 1 à 9 met la macro lorsqu'elle divise les onglets ne tient pas compte du format personalisée, comment faire pour obtenir le résultat souhaité ?
d'avance merci de votre aide, bonne après-midi.

Cordialement,
Jean-Mikaël
 

Gorfael

XLDnaute Barbatruc
Re : Petit Soucil de division de feuille

Re-re Bonjour le forum,


J'ai cette macro :


Code:
Sub distribue4()
Dim n As Integer
Dim ftr As String
'declaration de collection
Dim criteres As Collection
Set criteres = New Collection
'creation de la collection des criteres
Application.ScreenUpdating = False
 
For n = 2 To Range("g65536").End(xlUp).Row
  On Error Resume Next
    criteres.Add Range("g" & n), CStr(Range("g" & n))
  On Error GoTo 0
Next n
 
'ajout d'une feuille par critere
For n = 1 To criteres.Count
 
  Sheets.Add.Name = "Erreur " & criteres(n)
 
  Sheets("Feuil1").Range("A1:AD1").Copy Destination:=ActiveSheet.Range("A1")
 
Next n
 
'tansfert vers les feuilles
For n = 2 To Sheets("Feuil1").Range("g65536").End(xlUp).Row
 
  ftr = "Erreur " & Sheets("Feuil1").Range("g" & n)
 
  Sheets("Feuil1").Range("A" & n & ":AD" & n).Copy Destination:=Sheets(ftr).Range("A65536").End(xlUp).Offset(1, 0)
 
Sheets("Feuil1").Select
 
Next n
 
Application.ScreenUpdating = True
 
End Sub

Cette macro me permet de créer un onglet pour chaque valeur rencontrer dans la colonne G, dans cette colonne ce sont des chiffre jusque là tout va bien, mon soucil c'est que dans ma colonne j'ai par exemple des chiffre de 0 à 9 donc mon code va crée un onglet nommé Erreur 1 par exemple et ce que je souhaiterai c'est ajouter un 0 pour les onglet qui vont de Erreur 1 à 9 donc j'aurai par exemple comme nom d'onglet Erreur 01, j'ai essayé de mettre dans ma colonne G un format personnalisée qui met un 0 devant les chiffres allant de 1 à 9 met la macro lorsqu'elle divise les onglets ne tient pas compte du format personalisée, comment faire pour obtenir le résultat souhaité ?
d'avance merci de votre aide, bonne après-midi.

Cordialement,
Jean-Mikaël
Salut
comme j'ai la flemme, j'ai pas tout regarder, juste la description du problème
remplacer :
ftr = "Erreur " & Sheets("Feuil1").Range("g" & n)
par
ftr = "Erreur " & format(Sheets("Feuil1").Range("g" & n);"00")
Juste une question au hazard : si t'as un problème d'erreur Excel en plein milieux de ta macro, comment tu exécute ScreenUpDating = True ?
Mais il n'y a aucun risque d'erreur,... normalement
A+
 

Cousinhub

XLDnaute Barbatruc
Re : Petit Soucil de division de feuille

Re-, JeanMikael, bonjour Gorfael

une autre solution :

Sheets.Add.Name = IIf(Len(criteres(n)) = 1, "Erreur 0" & criteres(n), "Erreur " & criteres(n))

Gorfael,
Il me semble que le ScreenUpdating est remis automatiquement à True lorsqu'on stoppe la macro (par End Sub ou arrêt suite à Bug), mais peut-être me trompais-je?
 

JeanMikael

XLDnaute Junior
Re : Petit Soucil de division de feuille

Re, bhbh

La ligne que tu m'a filé à l'air de marcher le seul truc c'est que le programme
s'arrete à cette ligne :

Code:
Sheets("Feuil1").Range("A" & n & ":AD" & n).Copy Destination:=Sheets(ftr).Range("A65536").End(xlUp).Offset(1, 0)

Cordialement,
Jean-Mikaël
 

JeanMikael

XLDnaute Junior
Re : Petit Soucil de division de feuille

Ci-joint le fichier exemple avec la macro d'origine sans les ajout de vos différentes suggestions, merci de ton aide.



Cordialement,
Jean-Mikaël
 

Pièces jointes

  • jeanmikael.xls
    30.5 KB · Affichages: 30
  • jeanmikael.xls
    30.5 KB · Affichages: 39
  • jeanmikael.xls
    30.5 KB · Affichages: 28

Cousinhub

XLDnaute Barbatruc
Re : Petit Soucil de division de feuille

Ok, pas besoin de fichier,

remplace par :

ftr = "Erreur " & Sheets("Feuil1").Range("g" & n)
ftr = IIf(Len(ftr) < 9, "Erreur 0" & Sheets("Feuil1").Range("g" & n), "Erreur " & Sheets("Feuil1").Range("g" & n))
 

Cousinhub

XLDnaute Barbatruc
Re : Petit Soucil de division de feuille

Re-,
effectivement, difficile de dépanner si tu n'appliques pas les conseils qu'on te donne...;), et que nous, on essaie avec ce qu'on t'a préconisé...

ton code modifié :

Dim criteres As Collection
Set criteres = New Collection
'creation de la collection des criteres
Application.ScreenUpdating = False
For n = 3 To Range("g65536").End(xlUp).Row
On Error Resume Next
criteres.Add Range("g" & n), CStr(Range("g" & n))
On Error GoTo 0
Next n
'ajout d'une feuille par critere
For n = 1 To criteres.Count
Sheets.Add.Name = IIf(Len(criteres(n)) = 1, "Erreur 0" & criteres(n), "Erreur " & criteres(n))
Sheets("liste").Range("A1:AD1").Copy Destination:=ActiveSheet.Range("A1")
Next n
'tansfert vers les feuilles
For n = 3 To Sheets("liste").Range("g65536").End(xlUp).Row
ftr = "Erreur " & Sheets("liste").Range("g" & n)
ftr = IIf(Len(ftr) < 9, "Erreur 0" & Sheets("liste").Range("g" & n), "Erreur " & Sheets("liste").Range("g" & n))
Sheets("liste").Range("A" & n & ":AD" & n).Copy Destination:=Sheets(ftr).Range("A65536").End(xlUp).Offset(1, 0)
Next n
Application.ScreenUpdating = True
End Sub

Celui là fonctionne, je l'ai testé...
 

Discussions similaires

Statistiques des forums

Discussions
312 499
Messages
2 089 002
Membres
104 002
dernier inscrit
SkrauzTTV