Via une macro, exporter des données -repose sur un critere
bibi42000
Messages postés
11
Date d'inscription
Statut
Membre
Dernière intervention
-
lermite222 Messages postés 8724 Date d'inscription Statut Contributeur Dernière intervention -
lermite222 Messages postés 8724 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour à tous
Me voila dans la panade, je me lance dans une macro, c est jouable mais pas sans vos lumieres
Voila, j ai un fichier excel, un tableau (nommé:2013-18)
Dans ce tableau, une colonne essentielle, "ville"
Mon objectif, une macro qui crée un fichier excel a chaque changement de ville.Ce nouveau fichier excel (exemple: Lyon) rapportera l'ensemeble des lignes pour lequelles "ville=Lyon"
Le must, serait que ce fichier excel se nomme en auto sur ce modele "NomVille+Nomfichier exceldebase" soit Lyon2013-18
J'imagine qu'il est necessaire d'utiliser une boucle pour se balayage?
Voila j ai l'idée finale, mais comment y parvenir?
je suis preneur si on peut m'accompagner
Bien cdt
Me voila dans la panade, je me lance dans une macro, c est jouable mais pas sans vos lumieres
Voila, j ai un fichier excel, un tableau (nommé:2013-18)
Dans ce tableau, une colonne essentielle, "ville"
Mon objectif, une macro qui crée un fichier excel a chaque changement de ville.Ce nouveau fichier excel (exemple: Lyon) rapportera l'ensemeble des lignes pour lequelles "ville=Lyon"
Le must, serait que ce fichier excel se nomme en auto sur ce modele "NomVille+Nomfichier exceldebase" soit Lyon2013-18
J'imagine qu'il est necessaire d'utiliser une boucle pour se balayage?
Voila j ai l'idée finale, mais comment y parvenir?
je suis preneur si on peut m'accompagner
Bien cdt
A voir également:
- Via une macro, exporter des données -repose sur un critere
- Fuite données maif - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Exporter favoris chrome - Guide
- Trier des données excel - Guide
- Exporter conversation sms android - Guide
10 réponses
Bonjour,
Pour pouvoir "t'accompagner" il faudrait avoir un chemin, ou au moins un sentier, praticable.
Tu ne donne aucun exemple concret, pas de début de code...
Commence par faire les manipulations nécessaires avec l'éditeur de macro ensuite poste le code obtenu, nous t'aiderons à le finaliser.
A+
Pour pouvoir "t'accompagner" il faudrait avoir un chemin, ou au moins un sentier, praticable.
Tu ne donne aucun exemple concret, pas de début de code...
Commence par faire les manipulations nécessaires avec l'éditeur de macro ensuite poste le code obtenu, nous t'aiderons à le finaliser.
A+
En attendant, et avec les renseignements donnés, un début...
Sub CreerClasseur()A+
Dim Lig As Long, Debut As Integer, Col As Integer
Dim Chemin As String, Nom As String, Extention As String
Dim Wks As Worksheet
Set Wks = ThisWorkbook.ActiveSheet
Debut = 2 'ligne où commencer
Extention = "2013-001.xls"
Chemin = "C:\Users\m02410\Desktop\" 'répertoire de destination des nouveaux classeur
For Lig = Debut To Range("A" & Rows.Count).End(xlUp).Row
If Cells(Lig, "A") <> "" Then
Nom = Cells(Lig, "A") & Extention
If Dir(Chemin & Nom) = "" Then 'vérifie que le classeur n'est pas déjà créer
Workbooks.Add
For Col = 1 To 3
Cells(1, Col) = Wks.Cells(Lig, Col)
Next Col
ActiveWorkbook.SaveAs (Chemin & Nom)
ActiveWorkbook.Close
End If
End If
Next Lig
End Sub
Il fonctionne sur ton classeur avec quelque petite modif pour contrer les caprices d'Excel.
Modifie par exemple en Nantes 1, Nantes 2 etc..
A+
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
Note: Je ne répond pas aux MP pour les questions techniques. Et ma boule de cristal est cassée .
Sub CopierClasseur()Mais tu dois un peu rectifier la colonne des villes, il est impossible d'avoir deux classeurs au même nom dans une répertoire.
Dim Lig As Long, Debut As Integer, Col As Integer
Dim Chemin As String, Nom As String, Extention As String
Dim Wks As Worksheet
Set Wks = ThisWorkbook.ActiveSheet
Debut = 2 'ligne où commencer
Extention = "2013-001.xls"
Chemin = "C:\Users\m02410\Desktop\" 'répertoire de destination des nouveaux classeur
For Lig = Debut To Range("A" & Rows.Count).End(xlUp).Row
If Cells(Lig, "A") <> "" Then
Nom = Cells(Lig, "A") & Extention
If Dir(Chemin & Nom) = "" Then 'vérifie que le classeur n'est pas déjà créer
With Workbooks.Add
For Col = 1 To 3
.ActiveSheet.Cells(1, Col).Value = Wks.Cells(Lig, Col).Value
Next Col
.SaveAs (Chemin & Nom), FileFormat:=xlExcel8
.Close
End With
End If
End If
Next Lig
End Sub
Modifie par exemple en Nantes 1, Nantes 2 etc..
A+
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
Note: Je ne répond pas aux MP pour les questions techniques. Et ma boule de cristal est cassée .
Merci pour ton retour.Juste un point sur "ville".Je souhaite obtenir un classeur qui se crée pour chaque ville distincte.Au sein de nantes par exemple, si mon fichier de base contenanit 4 lignes, alors ces 4 lignes doivent etre dedans.Et aisni de suite pour chaque ville .tu me suis? je t 'envoi un exemple de fichier qui se crée au regard du fichier source 2013-001 que j ai transmis plus tot.merci pour ton analyse
salut lermite
desolé, je pensai avoir abordé cet eclatement de fichier par ville.
tu comprendras mon besoin, a partir du fichier source (https://www.cjoint.com/c/CKxmvWybY3J
) - creer d'autres fichier excel. chacun d'entre eux representant les lignes d'une meme ville
exemple cible:https://www.cjoint.com/c/CKxrlfogROg
Pour les villes, se sera toujours les memes (si d'autres je rajouterai dans le code).toujours en colonne 2
Je mettrai dans macro, un tri croissant par ville
Le fichier source aura toujours en ligne 1-les entetes de colonnes (il faudrait pouvoir les rapattrier dans chaque fichier excel crée par la macro)
Selon fichier source, il peut y avoir moins ou plus de colonne
Selon fichier source;il peut y avoir moins ou plus de ligne par ville
Les villes toujours en colonne 2 dans fichier source
J espere avoir ete plus precis, ton aide me sera precieuse
Merci à toi
desolé, je pensai avoir abordé cet eclatement de fichier par ville.
tu comprendras mon besoin, a partir du fichier source (https://www.cjoint.com/c/CKxmvWybY3J
) - creer d'autres fichier excel. chacun d'entre eux representant les lignes d'une meme ville
exemple cible:https://www.cjoint.com/c/CKxrlfogROg
Pour les villes, se sera toujours les memes (si d'autres je rajouterai dans le code).toujours en colonne 2
Je mettrai dans macro, un tri croissant par ville
Le fichier source aura toujours en ligne 1-les entetes de colonnes (il faudrait pouvoir les rapattrier dans chaque fichier excel crée par la macro)
Selon fichier source, il peut y avoir moins ou plus de colonne
Selon fichier source;il peut y avoir moins ou plus de ligne par ville
Les villes toujours en colonne 2 dans fichier source
J espere avoir ete plus precis, ton aide me sera precieuse
Merci à toi
Re,
Ca devrait le faire...
A+
Ca devrait le faire...
Option Explicit
Option Compare Text
Sub CopierClasseur()
Dim Lig As Long, LigIt As Long, Debut As Integer, Col As Integer, DerCol As Integer
Dim Chemin As String, Nom As String, Extention As String, Ville As String
Dim Wks As Worksheet, Plage As Range
Set Wks = ThisWorkbook.ActiveSheet
Debut = 2 'ligne où commencer
Extention = "2013-001.xls"
DerCol = Wks.Range("A1").SpecialCells(xlCellTypeLastCell).Column
Set Plage = Wks.Range(Cells(1, 1), Cells(1, DerCol))
' pourait mettre l'extention avec le nom du classeur mais attention,
'au cas ou tu passe à Excel2007 faudra sauver ce classeur sous xls.
'Extention = Wks.Name
Chemin = "C:\Users\m02410\Desktop\" 'répertoire de destination des nouveaux classeur
'Chemin = "C:\test\"
For Lig = Debut To Range("A" & Rows.Count).End(xlUp).Row
If Cells(Lig, "A") <> "" Then
Nom = Cells(Lig, "A") & Extention
If Dir(Chemin & Nom) = "" Then 'vérifie que le classeur n'est pas déjà créer
'Voir Combien de lign(s) à copier
Ville = Wks.Cells(Lig, 1).Value
LigIt = Lig
Do While Ville = Cells(LigIt + 1, 1).Value
LigIt = LigIt + 1
Loop
With Workbooks.Add
'copie les titres
Plage.Copy Range("A1")
'Copie les données
Wks.Range(Wks.Cells(Lig, 1), Wks.Cells(LigIt, DerCol)).Copy Range("A2")
.SaveAs (Chemin & Nom), FileFormat:=xlExcel8
.Close
Lig = LigIt
End With
End If
End If
Next Lig
Set Wks = Nothing
End Sub
A+
Lermite, ca fonctionne , un grand merci pour cette disponibilité et cette réalisation.
Il me reste des elemnts a perfectionner mais l'essentiel est present
Je vais essayer de creer
1)un Tri sur ville au demarrage de la macro
2)rendre cette macro accessible à plusieurs utilisateurs,
3) faire sauter la fenetre de "compatibilité" qui s'ouvre a chaque création de fichier (par ville)
Il faut cliquer sur Oui, c est chiant, j aimerai qu'il disparaisse
Encore merci,
@+
Il me reste des elemnts a perfectionner mais l'essentiel est present
Je vais essayer de creer
1)un Tri sur ville au demarrage de la macro
2)rendre cette macro accessible à plusieurs utilisateurs,
3) faire sauter la fenetre de "compatibilité" qui s'ouvre a chaque création de fichier (par ville)
Il faut cliquer sur Oui, c est chiant, j aimerai qu'il disparaisse
Encore merci,
@+
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Salut Lermite222
Merci pour ton retour
Tu as raison, voila un essai mais infructueux et insuffisant
Tu comprendras, que je veux faire une boucle qui interroge fichier d'origine sur le champs "Ville"
Si pour une meme ville, ya 3 lignes , macro crée un fichier excel où elle deposera ces 3 lignes (en reprenant ligne1-les entetes)
En suite ville suivante, (une autre), elle prends les lignes cncernaient et crée un excel en copiant ces lignes tout en ramenant aussi ligne1-entetes de colonnes
Et ainsi de suite
Dans mon code, je ne sais pas gerer la boucle (tant que ?), alors je fais filtre sur champs "ville" et je copy colle-
Bien à toi, ou t'envoyer le fichier excel source ? le code?
Merci pour ton retour
Tu as raison, voila un essai mais infructueux et insuffisant
Tu comprendras, que je veux faire une boucle qui interroge fichier d'origine sur le champs "Ville"
Si pour une meme ville, ya 3 lignes , macro crée un fichier excel où elle deposera ces 3 lignes (en reprenant ligne1-les entetes)
En suite ville suivante, (une autre), elle prends les lignes cncernaient et crée un excel en copiant ces lignes tout en ramenant aussi ligne1-entetes de colonnes
Et ainsi de suite
Dans mon code, je ne sais pas gerer la boucle (tant que ?), alors je fais filtre sur champs "ville" et je copy colle-
Bien à toi, ou t'envoyer le fichier excel source ? le code?
Sub ll() ' ' ll Macro ' 'Classeur de base se nomme 2013-001 ' Range("A1").Select 'prendre les lignes et colonnes actives du classeur de base Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Clear ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Add Key:=Range("A2:A18") _ , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal 'Tri sur les villes du classeur de base(colonne A) With ActiveWorkbook.Worksheets("Feuil1").Sort .SetRange Range("A1:G18") .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With 'la premiere ville suite au tri c est Brest, elle apparait sur la ligne 2 et 3- ligne 1 = entete de colonne' Range("A1").Select Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select Range(Selection, Selection.End(xlUp)).Select Range("A1:G3").Select 'Copier coller des lignes avec Brest (dans leur totalité) vers un nouveau fichier excel Selection.Copy Workbooks.Add Cells.Select Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False ActiveSheet.Paste Application.CutCopyMode = False ChDir "C:\Users\m02410\Desktop" 'lieu d'enregistrement, sans interet 'Le best serait que le nom du fichier excel soit crée en auto sur le modele Ville+NomClasseurdebase ActiveWorkbook.SaveAs Filename:="C:\Users\m02410\Desktop\Brest2013-001.xls", _ FileFormat:=xlExcel8, Password:="", WriteResPassword:="", _ ReadOnlyRecommended:=False, CreateBackup:=False Windows("Classeur1").Activate Windows("2013-001.xls").Activate Cells.Select 'Comme je ne sais pas gerer le systeme de boucle, je fais tri sur ville, je prends la suivante, ici Lyon => A ameliorer) 'Le gros sujet c est celui là, il faudrait une boucle qui balaye ville - un tant que ? et qui exporte ... Selection.AutoFilter ActiveSheet.Range("$A$1:$G$18").AutoFilter Field:=1, Criteria1:="Lyon" Range("A1").Select Range(Selection, Selection.End(xlToRight)).Select Range("A1:G6").Select 'Copier coller des lignes avec Lyon (dans leur totalité) vers un nouveau fichier excel (sur meme principe que Brest)-Je reproduis cela pour chaque ville du classeur de base Selection.Copy Workbooks.Add Cells.Select Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False ActiveSheet.Paste Application.CutCopyMode = False ActiveWorkbook.SaveAs Filename:="C:\Users\m02410\Desktop\Lyon2013-001.xls", _ FileFormat:=xlExcel8, Password:="", WriteResPassword:="", _ ReadOnlyRecommended:=False, CreateBackup:=False Windows("2013-001.xls").Activate ActiveSheet.Range("$A$1:$G$18").AutoFilter Field:=1, Criteria1:="Nantes" 'Copier coller des lignes avec Nantes (dans leur totalité) vers un nouveau fichier excel (sur meme principe que Brest) Range("A1").Select Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy Workbooks.Add Cells.Select Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False ActiveSheet.Paste Application.CutCopyMode = False ActiveWorkbook.SaveAs Filename:="C:\Users\m02410\Desktop\Nantes2013-001.xls" _ , FileFormat:=xlExcel8, Password:="", WriteResPassword:="", _ ReadOnlyRecommended:=False, CreateBackup:=False Windows("2013-001.xls").Activate ActiveSheet.Range("$A$1:$G$18").AutoFilter Field:=1, Criteria1:="Nimes" 'Copier coller des lignes avec Nimes (dans leur totalité) vers un nouveau fichier excel (sur meme principe que Brest) Range("A1").Select Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy Workbooks.Add Cells.Select Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False ActiveSheet.Paste Application.CutCopyMode = False ActiveWorkbook.SaveAs Filename:="C:\Users\m02410\Desktop\Nimes2013-001.xls", _ FileFormat:=xlExcel8, Password:="", WriteResPassword:="", _ ReadOnlyRecommended:=False, CreateBackup:=False Windows("2013-001.xls").Activate ActiveSheet.Range("$A$1:$G$18").AutoFilter Field:=1 Range("A1").Select ActiveWorkbook.Save End Sub
OK, ont a déjà un point de départ.
Tu peu déposer ton classeur (sans donnée confidentielle) sur Cjoint.com
Et mettre le lien dans un poste suivant.
A+
Tu peu déposer ton classeur (sans donnée confidentielle) sur Cjoint.com
Et mettre le lien dans un poste suivant.
A+
Merci lermite. trouves le lien du fichier source.merci pour ce code.il fonctionnerait sur ce fichier ?
https://www.cjoint.com/c/CKxmvWybY3J
merci a toi
https://www.cjoint.com/c/CKxmvWybY3J
merci a toi
Lermite, ca fonctionne , un grand merci pour cette disponibilité et cette réalisation.
Il me reste des elemnts a perfectionner mais l'essentiel est present
Je vais essayer de creer
1)un Tri sur ville au demarrage de la macro
2)rendre cette macro accessible à plusieurs utilisateurs,
3) faire sauter la fenetre de "compatibilité" qui s'ouvre a chaque création de fichier (par ville)
Il faut cliquer sur Oui, c est chiant, j aimerai qu'il disparaisse
Encore merci,
@+ et bon courage
Il me reste des elemnts a perfectionner mais l'essentiel est present
Je vais essayer de creer
1)un Tri sur ville au demarrage de la macro
2)rendre cette macro accessible à plusieurs utilisateurs,
3) faire sauter la fenetre de "compatibilité" qui s'ouvre a chaque création de fichier (par ville)
Il faut cliquer sur Oui, c est chiant, j aimerai qu'il disparaisse
Encore merci,
@+ et bon courage
Re,
Si tu en a encore besoin
Faiit tout, la création des classeurs ou la mise à jour si existe déjà, commence par le tri.
Avec une tite cerise sur le gâteau.. pour autant que tu aime les cerises, sinon, tu supprime.
A+
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
Note: Je ne répond pas aux MP pour les questions techniques. Et ma boule de cristal est cassée .
Si tu en a encore besoin
Faiit tout, la création des classeurs ou la mise à jour si existe déjà, commence par le tri.
Avec une tite cerise sur le gâteau.. pour autant que tu aime les cerises, sinon, tu supprime.
A+
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
Note: Je ne répond pas aux MP pour les questions techniques. Et ma boule de cristal est cassée .
Lermite,
C est topissimme ton code.j adore..la cerise excellente (j achete)
Ce travail est à 95% de sa reussite, je te tire mon chapeau et te remercie
ma charge est de conserver dans les fichiers crées via la macro, le formalisme du tableau de base (tableau de d'origine) Ajustement des colonnes, renvoyer à la ligne....
Pour conclure, cette macro que je dois partager entre collaborateurs doit etre partagée puis il faudrait qu'elle puisse focntionner sur un classeur nommé different de celui de notre exemple 2013-001- faudrait que ca marche sur un classeur 2013-002 etc
Enfin encore many thanks,
C est topissimme ton code.j adore..la cerise excellente (j achete)
Ce travail est à 95% de sa reussite, je te tire mon chapeau et te remercie
ma charge est de conserver dans les fichiers crées via la macro, le formalisme du tableau de base (tableau de d'origine) Ajustement des colonnes, renvoyer à la ligne....
Pour conclure, cette macro que je dois partager entre collaborateurs doit etre partagée puis il faudrait qu'elle puisse focntionner sur un classeur nommé different de celui de notre exemple 2013-001- faudrait que ca marche sur un classeur 2013-002 etc
Enfin encore many thanks,