Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

création automatique de plusieurs fichiers excel à partir d'un s eu

13 réponses
Avatar
M'enfin
Bonjour à tous,

Je dispose d'un fichier excel qui constitue une base de données.
Dans cette base, je possède des données pouvant être triées par départements.
A partir de ce fichier, je souhaiterais générer automatiquement de nouveaux
fichiers excel propres à chaque département, nommer les fichiers créés en
fonction du nom du département et les placer dans un nouveau dossier portant
également le nom du département.
Ex : Ain.xls dans le dossier Dpt - Ain
Dpt - Aisnes.xls dans le dossier Aisnes...,etc
Pouvez vous m'aider ou m'aiguiller dans ma démarche ?
Merci d'avance

10 réponses

1 2
Avatar
Daniel
Bonjoour.
Regarde à l'adresse suivante :
http://cjoint.com/?idoZ0rVMbz
Cordialement.
Daniel
"M'enfin" <M' a écrit dans le message de
news:
Bonjour à tous,

Je dispose d'un fichier excel qui constitue une base de données.
Dans cette base, je possède des données pouvant être triées par
départements.
A partir de ce fichier, je souhaiterais générer automatiquement de
nouveaux
fichiers excel propres à chaque département, nommer les fichiers créés en
fonction du nom du département et les placer dans un nouveau dossier
portant
également le nom du département.
Ex : Ain.xls dans le dossier Dpt - Ain
Dpt - Aisnes.xls dans le dossier Aisnes...,etc
Pouvez vous m'aider ou m'aiguiller dans ma démarche ?
Merci d'avance


Avatar
M''enfin
Bonjour Daniel

Je te remercie de ton aide
J'ai essayé ton fichier mais ta macro crée en fait la liste des départements
dans un nouvel onglet et n'arrive pas à sauvegarder dans un nouveau fichier
(ca m'envoit dans le débogage)
Ce que je cherche à obtenir, c'est la création de nouvelles feuilles .xls
avec comme nom de fichier le département(+éventuellement un indicateur
supplémentaire) et comme valeurs toutes les données se rapportant à ce
département (ainsi dans ton exemple : le fichier aube.xls devrait etre généré
et comprendre l'intégralité des lignes 1, 8 et 9 puis le fichier aude.xls
avec les lignes 1,2 et 7......etc)




Bonjoour.
Regarde à l'adresse suivante :
http://cjoint.com/?idoZ0rVMbz
Cordialement.
Daniel
"M'enfin" <M' a écrit dans le message de
news:
Bonjour à tous,

Je dispose d'un fichier excel qui constitue une base de données.
Dans cette base, je possède des données pouvant être triées par
départements.
A partir de ce fichier, je souhaiterais générer automatiquement de
nouveaux
fichiers excel propres à chaque département, nommer les fichiers créés en
fonction du nom du département et les placer dans un nouveau dossier
portant
également le nom du département.
Ex : Ain.xls dans le dossier Dpt - Ain
Dpt - Aisnes.xls dans le dossier Aisnes...,etc
Pouvez vous m'aider ou m'aiguiller dans ma démarche ?
Merci d'avance







Avatar
Daniel
Ca fonctionne correctement chez moi. Quel est le message d'erreur ?
Daniel
"M''enfin" a écrit dans le message de
news:
Bonjour Daniel

Je te remercie de ton aide
J'ai essayé ton fichier mais ta macro crée en fait la liste des
départements
dans un nouvel onglet et n'arrive pas à sauvegarder dans un nouveau
fichier
(ca m'envoit dans le débogage)
Ce que je cherche à obtenir, c'est la création de nouvelles feuilles .xls
avec comme nom de fichier le département(+éventuellement un indicateur
supplémentaire) et comme valeurs toutes les données se rapportant à ce
département (ainsi dans ton exemple : le fichier aube.xls devrait etre
généré
et comprendre l'intégralité des lignes 1, 8 et 9 puis le fichier aude.xls
avec les lignes 1,2 et 7......etc)




Bonjoour.
Regarde à l'adresse suivante :
http://cjoint.com/?idoZ0rVMbz
Cordialement.
Daniel
"M'enfin" <M' a écrit dans le message de
news:
Bonjour à tous,

Je dispose d'un fichier excel qui constitue une base de données.
Dans cette base, je possède des données pouvant être triées par
départements.
A partir de ce fichier, je souhaiterais générer automatiquement de
nouveaux
fichiers excel propres à chaque département, nommer les fichiers créés
en
fonction du nom du département et les placer dans un nouveau dossier
portant
également le nom du département.
Ex : Ain.xls dans le dossier Dpt - Ain
Dpt - Aisnes.xls dans le dossier Aisnes...,etc
Pouvez vous m'aider ou m'aiguiller dans ma démarche ?
Merci d'avance









Avatar
M''enfin
Le message d'erreur est 'erreur d'application 1004' 'erreur définie par
l'application et par l'objet'
Dans le débogage, la ligne qui coince est :

Selection.Sort Key1:=Range("B1"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal

Au moment du blocage, la macro a créé un onglet "dpt" avec en colonne B la
liste suivante
Voila
Aude
Seine-et-Marne
Bouches-du-Rhône
Seine-et-Marne
Seine-Maritime
Aude
aube
aube
ain

y'a t'il un moyen de connaitre le chemin d'accès où les futurs fichiers
"nomdpt".xls vont être sauvegardés ?






Ca fonctionne correctement chez moi. Quel est le message d'erreur ?
Daniel
"M''enfin" a écrit dans le message de
news:
Bonjour Daniel

Je te remercie de ton aide
J'ai essayé ton fichier mais ta macro crée en fait la liste des
départements
dans un nouvel onglet et n'arrive pas à sauvegarder dans un nouveau
fichier
(ca m'envoit dans le débogage)
Ce que je cherche à obtenir, c'est la création de nouvelles feuilles .xls
avec comme nom de fichier le département(+éventuellement un indicateur
supplémentaire) et comme valeurs toutes les données se rapportant à ce
département (ainsi dans ton exemple : le fichier aube.xls devrait etre
généré
et comprendre l'intégralité des lignes 1, 8 et 9 puis le fichier aude.xls
avec les lignes 1,2 et 7......etc)




Bonjoour.
Regarde à l'adresse suivante :
http://cjoint.com/?idoZ0rVMbz
Cordialement.
Daniel
"M'enfin" <M' a écrit dans le message de
news:
Bonjour à tous,

Je dispose d'un fichier excel qui constitue une base de données.
Dans cette base, je possède des données pouvant être triées par
départements.
A partir de ce fichier, je souhaiterais générer automatiquement de
nouveaux
fichiers excel propres à chaque département, nommer les fichiers créés
en
fonction du nom du département et les placer dans un nouveau dossier
portant
également le nom du département.
Ex : Ain.xls dans le dossier Dpt - Ain
Dpt - Aisnes.xls dans le dossier Aisnes...,etc
Pouvez vous m'aider ou m'aiguiller dans ma démarche ?
Merci d'avance














Avatar
Daniel
Bonjour.
?????? Problème de version; je tourne avec XL2003.
Daniel
"M''enfin" a écrit dans le message de
news:
Le message d'erreur est 'erreur d'application 1004' 'erreur définie par
l'application et par l'objet'
Dans le débogage, la ligne qui coince est :

Selection.Sort Key1:=Range("B1"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal

Au moment du blocage, la macro a créé un onglet "dpt" avec en colonne B la
liste suivante
Voila
Aude
Seine-et-Marne
Bouches-du-Rhône
Seine-et-Marne
Seine-Maritime
Aude
aube
aube
ain

y'a t'il un moyen de connaitre le chemin d'accès où les futurs fichiers
"nomdpt".xls vont être sauvegardés ?






Ca fonctionne correctement chez moi. Quel est le message d'erreur ?
Daniel
"M''enfin" a écrit dans le message de
news:
Bonjour Daniel

Je te remercie de ton aide
J'ai essayé ton fichier mais ta macro crée en fait la liste des
départements
dans un nouvel onglet et n'arrive pas à sauvegarder dans un nouveau
fichier
(ca m'envoit dans le débogage)
Ce que je cherche à obtenir, c'est la création de nouvelles feuilles
.xls
avec comme nom de fichier le département(+éventuellement un indicateur
supplémentaire) et comme valeurs toutes les données se rapportant à ce
département (ainsi dans ton exemple : le fichier aube.xls devrait etre
généré
et comprendre l'intégralité des lignes 1, 8 et 9 puis le fichier
aude.xls
avec les lignes 1,2 et 7......etc)




Bonjoour.
Regarde à l'adresse suivante :
http://cjoint.com/?idoZ0rVMbz
Cordialement.
Daniel
"M'enfin" <M' a écrit dans le message
de
news:
Bonjour à tous,

Je dispose d'un fichier excel qui constitue une base de données.
Dans cette base, je possède des données pouvant être triées par
départements.
A partir de ce fichier, je souhaiterais générer automatiquement de
nouveaux
fichiers excel propres à chaque département, nommer les fichiers
créés
en
fonction du nom du département et les placer dans un nouveau dossier
portant
également le nom du département.
Ex : Ain.xls dans le dossier Dpt - Ain
Dpt - Aisnes.xls dans le dossier Aisnes...,etc
Pouvez vous m'aider ou m'aiguiller dans ma démarche ?
Merci d'avance
















Avatar
M''enfin
Mon problème reste entier malheureusement...
Pas moyen de contourner cette différence de version ?

Et pour cette question "y'a t'il un moyen de connaitre le chemin d'accès où
les futurs fichiers
"nomdpt".xls vont être sauvegardés ?




Bonjour.
?????? Problème de version; je tourne avec XL2003.
Daniel
"M''enfin" a écrit dans le message de
news:
Le message d'erreur est 'erreur d'application 1004' 'erreur définie par
l'application et par l'objet'
Dans le débogage, la ligne qui coince est :

Selection.Sort Key1:=Range("B1"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal

Au moment du blocage, la macro a créé un onglet "dpt" avec en colonne B la
liste suivante
Voila
Aude
Seine-et-Marne
Bouches-du-Rhône
Seine-et-Marne
Seine-Maritime
Aude
aube
aube
ain

y'a t'il un moyen de connaitre le chemin d'accès où les futurs fichiers
"nomdpt".xls vont être sauvegardés ?






Ca fonctionne correctement chez moi. Quel est le message d'erreur ?
Daniel
"M''enfin" a écrit dans le message de
news:
Bonjour Daniel

Je te remercie de ton aide
J'ai essayé ton fichier mais ta macro crée en fait la liste des
départements
dans un nouvel onglet et n'arrive pas à sauvegarder dans un nouveau
fichier
(ca m'envoit dans le débogage)
Ce que je cherche à obtenir, c'est la création de nouvelles feuilles
.xls
avec comme nom de fichier le département(+éventuellement un indicateur
supplémentaire) et comme valeurs toutes les données se rapportant à ce
département (ainsi dans ton exemple : le fichier aube.xls devrait etre
généré
et comprendre l'intégralité des lignes 1, 8 et 9 puis le fichier
aude.xls
avec les lignes 1,2 et 7......etc)




Bonjoour.
Regarde à l'adresse suivante :
http://cjoint.com/?idoZ0rVMbz
Cordialement.
Daniel
"M'enfin" <M' a écrit dans le message
de
news:
Bonjour à tous,

Je dispose d'un fichier excel qui constitue une base de données.
Dans cette base, je possède des données pouvant être triées par
départements.
A partir de ce fichier, je souhaiterais générer automatiquement de
nouveaux
fichiers excel propres à chaque département, nommer les fichiers
créés
en
fonction du nom du département et les placer dans un nouveau dossier
portant
également le nom du département.
Ex : Ain.xls dans le dossier Dpt - Ain
Dpt - Aisnes.xls dans le dossier Aisnes...,etc
Pouvez vous m'aider ou m'aiguiller dans ma démarche ?
Merci d'avance





















Avatar
Daniel
Bonjour.
Pour connaître le répertoire courant :
MsgBox CurDir
Poue spécifier le répertoire lors de la sauvegarde (s'il est différent du
répertoire courant) :
Chemin = "C:temp" 'par exemple
ActiveWorkbook.SaveAs Filename:=Chemin & c.Value & ".xls"
Cordialement.
Daniel

"M''enfin" a écrit dans le message de
news:
Mon problème reste entier malheureusement...
Pas moyen de contourner cette différence de version ?

Et pour cette question "y'a t'il un moyen de connaitre le chemin d'accès

les futurs fichiers
"nomdpt".xls vont être sauvegardés ?




Bonjour.
?????? Problème de version; je tourne avec XL2003.
Daniel
"M''enfin" a écrit dans le message de
news:
Le message d'erreur est 'erreur d'application 1004' 'erreur définie par
l'application et par l'objet'
Dans le débogage, la ligne qui coince est :

Selection.Sort Key1:=Range("B1"), Order1:=xlAscending, Header:=xlGuess,
_
OrderCustom:=1, MatchCase:úlse, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal

Au moment du blocage, la macro a créé un onglet "dpt" avec en colonne B
la
liste suivante
Voila
Aude
Seine-et-Marne
Bouches-du-Rhône
Seine-et-Marne
Seine-Maritime
Aude
aube
aube
ain

y'a t'il un moyen de connaitre le chemin d'accès où les futurs fichiers
"nomdpt".xls vont être sauvegardés ?






Ca fonctionne correctement chez moi. Quel est le message d'erreur ?
Daniel
"M''enfin" a écrit dans le message
de
news:
Bonjour Daniel

Je te remercie de ton aide
J'ai essayé ton fichier mais ta macro crée en fait la liste des
départements
dans un nouvel onglet et n'arrive pas à sauvegarder dans un nouveau
fichier
(ca m'envoit dans le débogage)
Ce que je cherche à obtenir, c'est la création de nouvelles feuilles
.xls
avec comme nom de fichier le département(+éventuellement un
indicateur
supplémentaire) et comme valeurs toutes les données se rapportant à
ce
département (ainsi dans ton exemple : le fichier aube.xls devrait
etre
généré
et comprendre l'intégralité des lignes 1, 8 et 9 puis le fichier
aude.xls
avec les lignes 1,2 et 7......etc)




Bonjoour.
Regarde à l'adresse suivante :
http://cjoint.com/?idoZ0rVMbz
Cordialement.
Daniel
"M'enfin" <M' a écrit dans le
message
de
news:
Bonjour à tous,

Je dispose d'un fichier excel qui constitue une base de données.
Dans cette base, je possède des données pouvant être triées par
départements.
A partir de ce fichier, je souhaiterais générer automatiquement
de
nouveaux
fichiers excel propres à chaque département, nommer les fichiers
créés
en
fonction du nom du département et les placer dans un nouveau
dossier
portant
également le nom du département.
Ex : Ain.xls dans le dossier Dpt - Ain
Dpt - Aisnes.xls dans le dossier Aisnes...,etc
Pouvez vous m'aider ou m'aiguiller dans ma démarche ?
Merci d'avance























Avatar
PMO
Bonjour,

Je me permets de m'immiscer dans votre conversation et
de vous soumettre votre code modifié.

1) Dans les versions antérieures d'Excel et en ce qui concerne
la méthode Sort il n'existait pas d'argument DataOption1.
Il suffit de l'occulter.
2) J'ai créé une procédure SauveFichier qui fabrique, le cas
échéant, le dossier racine que j'ai appelé "Départements" et
les sous dossiers correspondant à chaque département et
dans lesquels s'enregistreront les classeurs Excel créés par
votre procédure.
3) Si l'utilisateur lance plusieurs fois votre programme, des
risques d'écrasement de fichiers déjà existants peuvent survenir.
Pour l'éviter, il suffit d'enregister ces classeurs avec un suffixe
unique. C'est la raison de la fonction IdUnique qui renvoie
une chaîne date et heure sous la forme yymmdd_hms
Exemple: 21 juillet 2005 14:10:27 donne 050721_141027
La date est inversée pour faciliter le tri dans l'exploration.

Ci-dessous le code
'**********
''### Constante à adapter ###
Const DOSSIER_MAITRE As String = "c:Départements"
''###########################
''___________________________
Sub test()
''°°° Macro de Daniel Colardelle °°°
''°°° modifiée par PMO °°°
''Création d'une feuille comportant
''une liste des départements
Dim Plage As Range, C As Range
Dim Identifiant$
Dim W As Workbook
Dim Wadd As Workbook
On Error GoTo Erreur
Application.ScreenUpdating = False
''---- Obtenir un identifiant unique ----
''_Année,Mois,Jour (inversé pour tri éventuel)
''et _Heure,Minute,Seconde (si procédure
''lancée plusieurs fois dans la même journée)
Identifiant = IdUnique
Sheets.Add
ActiveSheet.Name = "Dpt"
Sheets("Feuil1").Select
Range("E2", Range("E65536").End(xlUp)) _
.Copy Range("Dpt!B1")
Sheets("Dpt").Select
Range("B1", Range("B65536").End(xlUp)).Select
Selection.Sort Key1:=Range("B1"), _
Order1:=xlAscending, _
Header:=xlGuess, _
OrderCustom:=1, _
MatchCase:úlse, _
Orientation:=xlTopToBottom
'''' ARGUMENT INEXISTANT DANS VERSION ANTERIEURE
'''', DataOption1:=xlSortNormal
Range("A:A").ClearContents
Range("B1", Range("B65536").End(xlUp)) _
.AdvancedFilter Action:=xlFilterCopy, _
CopyToRange:=Range("A1"), Unique:=True
Set Plage = Range("A1", Range("A65536").End(xlUp))
Set W = ActiveWorkbook
For Each C In Plage
Set Wadd = Workbooks.Add
Application.StatusBar = _
"Enregistrement de " & UCase(C)
Call SauveFichier(Wadd, C, Identifiant)
W.Activate
Sheets("Feuil1").Select
With Range("A1", Range("E65536").End(xlUp))
.AutoFilter
.AutoFilter Field:=5, Criteria1:=C.Value
.SpecialCells(xlCellTypeVisible).Copy
End With
Windows(C & Identifiant & ".xls").Activate
ActiveSheet.Paste
Wadd.Save
Wadd.Close
Set Wadd = Nothing
Next C
Range("A1", Range("E65536").End(xlUp)).AutoFilter
Application.DisplayAlerts = False
W.Sheets("Dpt").Delete
Set W = Nothing
''---- Pseudo traitement d'erreur ----
Erreur:
Application.DisplayAlerts = True
Application.ScreenUpdating = True
Application.StatusBar = False
End Sub
''___________________________
Sub SauveFichier(Wadd As Workbook, _
Departement As String, Id As String)
On Error GoTo Erreur
ChDir DOSSIER_MAITRE
MkDir UCase(Departement)
ChDir DOSSIER_MAITRE & "" & UCase(Departement)
Wadd.SaveAs Filename:=CurDir & "" _
& UCase(Departement) & Id & ""
Exit Sub
Erreur:
Select Case Err
Case 76
MkDir DOSSIER_MAITRE
ChDir DOSSIER_MAITRE
Resume Next
Case 75
Resume Next
End Select
End Sub
''___________________________
Private Function IdUnique() As String
IdUnique = "_" & Format(Date, "yymmdd") _
& "_" & Format(Time, "hns")
End Function
'**********

Cordialement.

--
PMO
Patrick Morange
Avatar
M''enfin
merci d'apporter vos reflexions à mon problème ;-)
j'ai remplacé l'ancienne macro par la nouvelle. Je voyais la logique de
résolution du problème mais je suis loin d'être très compétent en
macro....(j'avais fait à peu près le meme système de filtre par contre
j'étais coincé pour la génération des fichiers et pour les nommer.)
Cela étant la nouvelle macro bloque encore à l'instruction Call
SauveFichier(Wadd, C, Identifiant) avec comme message d'erreur :"Type
d'argument ByRef incompatible"
What's up doc(s) ?



Bonjour,

Je me permets de m'immiscer dans votre conversation et
de vous soumettre votre code modifié.

1) Dans les versions antérieures d'Excel et en ce qui concerne
la méthode Sort il n'existait pas d'argument DataOption1.
Il suffit de l'occulter.
2) J'ai créé une procédure SauveFichier qui fabrique, le cas
échéant, le dossier racine que j'ai appelé "Départements" et
les sous dossiers correspondant à chaque département et
dans lesquels s'enregistreront les classeurs Excel créés par
votre procédure.
3) Si l'utilisateur lance plusieurs fois votre programme, des
risques d'écrasement de fichiers déjà existants peuvent survenir.
Pour l'éviter, il suffit d'enregister ces classeurs avec un suffixe
unique. C'est la raison de la fonction IdUnique qui renvoie
une chaîne date et heure sous la forme yymmdd_hms
Exemple: 21 juillet 2005 14:10:27 donne 050721_141027
La date est inversée pour faciliter le tri dans l'exploration.

Ci-dessous le code
'**********
''### Constante à adapter ###
Const DOSSIER_MAITRE As String = "c:Départements"
''###########################
''___________________________
Sub test()
''°°° Macro de Daniel Colardelle °°°
''°°° modifiée par PMO °°°
''Création d'une feuille comportant
''une liste des départements
Dim Plage As Range, C As Range
Dim Identifiant$
Dim W As Workbook
Dim Wadd As Workbook
On Error GoTo Erreur
Application.ScreenUpdating = False
''---- Obtenir un identifiant unique ----
''_Année,Mois,Jour (inversé pour tri éventuel)
''et _Heure,Minute,Seconde (si procédure
''lancée plusieurs fois dans la même journée)
Identifiant = IdUnique
Sheets.Add
ActiveSheet.Name = "Dpt"
Sheets("Feuil1").Select
Range("E2", Range("E65536").End(xlUp)) _
.Copy Range("Dpt!B1")
Sheets("Dpt").Select
Range("B1", Range("B65536").End(xlUp)).Select
Selection.Sort Key1:=Range("B1"), _
Order1:=xlAscending, _
Header:=xlGuess, _
OrderCustom:=1, _
MatchCase:úlse, _
Orientation:=xlTopToBottom
'''' ARGUMENT INEXISTANT DANS VERSION ANTERIEURE
'''', DataOption1:=xlSortNormal
Range("A:A").ClearContents
Range("B1", Range("B65536").End(xlUp)) _
.AdvancedFilter Action:=xlFilterCopy, _
CopyToRange:=Range("A1"), Unique:=True
Set Plage = Range("A1", Range("A65536").End(xlUp))
Set W = ActiveWorkbook
For Each C In Plage
Set Wadd = Workbooks.Add
Application.StatusBar = _
"Enregistrement de " & UCase(C)
Call SauveFichier(Wadd, C, Identifiant)
W.Activate
Sheets("Feuil1").Select
With Range("A1", Range("E65536").End(xlUp))
.AutoFilter
.AutoFilter Field:=5, Criteria1:=C.Value
.SpecialCells(xlCellTypeVisible).Copy
End With
Windows(C & Identifiant & ".xls").Activate
ActiveSheet.Paste
Wadd.Save
Wadd.Close
Set Wadd = Nothing
Next C
Range("A1", Range("E65536").End(xlUp)).AutoFilter
Application.DisplayAlerts = False
W.Sheets("Dpt").Delete
Set W = Nothing
''---- Pseudo traitement d'erreur ----
Erreur:
Application.DisplayAlerts = True
Application.ScreenUpdating = True
Application.StatusBar = False
End Sub
''___________________________
Sub SauveFichier(Wadd As Workbook, _
Departement As String, Id As String)
On Error GoTo Erreur
ChDir DOSSIER_MAITRE
MkDir UCase(Departement)
ChDir DOSSIER_MAITRE & "" & UCase(Departement)
Wadd.SaveAs Filename:=CurDir & "" _
& UCase(Departement) & Id & ""
Exit Sub
Erreur:
Select Case Err
Case 76
MkDir DOSSIER_MAITRE
ChDir DOSSIER_MAITRE
Resume Next
Case 75
Resume Next
End Select
End Sub
''___________________________
Private Function IdUnique() As String
IdUnique = "_" & Format(Date, "yymmdd") _
& "_" & Format(Time, "hns")
End Function
'**********

Cordialement.

--
PMO
Patrick Morange


Avatar
PMO
Bonjour,

Essayez de modifier la ligne
'*****
Sub SauveFichier(Wadd As Workbook, _
Departement As String, Id As String)
par
Sub SauveFichier(ByVal Wadd As Workbook, _
ByVal Departement As String, Id As String)
'*****

puis la ligne
'*****
Call SauveFichier(Wadd, C, Identifiant)
par
Call SauveFichier(Wadd, CStr(C), Identifiant)
'*****

Si cela fonctionne, n'oubliez pas de remercier Daniel
qui est à l'origine de cette solution.

Cordialement.
--
PMO
Patrick Morange



merci d'apporter vos reflexions à mon problème ;-)
j'ai remplacé l'ancienne macro par la nouvelle. Je voyais la logique de
résolution du problème mais je suis loin d'être très compétent en
macro....(j'avais fait à peu près le meme système de filtre par contre
j'étais coincé pour la génération des fichiers et pour les nommer.)
Cela étant la nouvelle macro bloque encore à l'instruction Call
SauveFichier(Wadd, C, Identifiant) avec comme message d'erreur :"Type
d'argument ByRef incompatible"
What's up doc(s) ?



Bonjour,

Je me permets de m'immiscer dans votre conversation et
de vous soumettre votre code modifié.

1) Dans les versions antérieures d'Excel et en ce qui concerne
la méthode Sort il n'existait pas d'argument DataOption1.
Il suffit de l'occulter.
2) J'ai créé une procédure SauveFichier qui fabrique, le cas
échéant, le dossier racine que j'ai appelé "Départements" et
les sous dossiers correspondant à chaque département et
dans lesquels s'enregistreront les classeurs Excel créés par
votre procédure.
3) Si l'utilisateur lance plusieurs fois votre programme, des
risques d'écrasement de fichiers déjà existants peuvent survenir.
Pour l'éviter, il suffit d'enregister ces classeurs avec un suffixe
unique. C'est la raison de la fonction IdUnique qui renvoie
une chaîne date et heure sous la forme yymmdd_hms
Exemple: 21 juillet 2005 14:10:27 donne 050721_141027
La date est inversée pour faciliter le tri dans l'exploration.

Ci-dessous le code
'**********
''### Constante à adapter ###
Const DOSSIER_MAITRE As String = "c:Départements"
''###########################
''___________________________
Sub test()
''°°° Macro de Daniel Colardelle °°°
''°°° modifiée par PMO °°°
''Création d'une feuille comportant
''une liste des départements
Dim Plage As Range, C As Range
Dim Identifiant$
Dim W As Workbook
Dim Wadd As Workbook
On Error GoTo Erreur
Application.ScreenUpdating = False
''---- Obtenir un identifiant unique ----
''_Année,Mois,Jour (inversé pour tri éventuel)
''et _Heure,Minute,Seconde (si procédure
''lancée plusieurs fois dans la même journée)
Identifiant = IdUnique
Sheets.Add
ActiveSheet.Name = "Dpt"
Sheets("Feuil1").Select
Range("E2", Range("E65536").End(xlUp)) _
.Copy Range("Dpt!B1")
Sheets("Dpt").Select
Range("B1", Range("B65536").End(xlUp)).Select
Selection.Sort Key1:=Range("B1"), _
Order1:=xlAscending, _
Header:=xlGuess, _
OrderCustom:=1, _
MatchCase:úlse, _
Orientation:=xlTopToBottom
'''' ARGUMENT INEXISTANT DANS VERSION ANTERIEURE
'''', DataOption1:=xlSortNormal
Range("A:A").ClearContents
Range("B1", Range("B65536").End(xlUp)) _
.AdvancedFilter Action:=xlFilterCopy, _
CopyToRange:=Range("A1"), Unique:=True
Set Plage = Range("A1", Range("A65536").End(xlUp))
Set W = ActiveWorkbook
For Each C In Plage
Set Wadd = Workbooks.Add
Application.StatusBar = _
"Enregistrement de " & UCase(C)
Call SauveFichier(Wadd, C, Identifiant)
W.Activate
Sheets("Feuil1").Select
With Range("A1", Range("E65536").End(xlUp))
.AutoFilter
.AutoFilter Field:=5, Criteria1:=C.Value
.SpecialCells(xlCellTypeVisible).Copy
End With
Windows(C & Identifiant & ".xls").Activate
ActiveSheet.Paste
Wadd.Save
Wadd.Close
Set Wadd = Nothing
Next C
Range("A1", Range("E65536").End(xlUp)).AutoFilter
Application.DisplayAlerts = False
W.Sheets("Dpt").Delete
Set W = Nothing
''---- Pseudo traitement d'erreur ----
Erreur:
Application.DisplayAlerts = True
Application.ScreenUpdating = True
Application.StatusBar = False
End Sub
''___________________________
Sub SauveFichier(Wadd As Workbook, _
Departement As String, Id As String)
On Error GoTo Erreur
ChDir DOSSIER_MAITRE
MkDir UCase(Departement)
ChDir DOSSIER_MAITRE & "" & UCase(Departement)
Wadd.SaveAs Filename:=CurDir & "" _
& UCase(Departement) & Id & ""
Exit Sub
Erreur:
Select Case Err
Case 76
MkDir DOSSIER_MAITRE
ChDir DOSSIER_MAITRE
Resume Next
Case 75
Resume Next
End Select
End Sub
''___________________________
Private Function IdUnique() As String
IdUnique = "_" & Format(Date, "yymmdd") _
& "_" & Format(Time, "hns")
End Function
'**********

Cordialement.

--
PMO
Patrick Morange




1 2