Via une macro, exporter des données -repose sur un critere

Fermé
bibi42000 Messages postés 11 Date d'inscription vendredi 22 novembre 2013 Statut Membre Dernière intervention 29 novembre 2013 - 22 nov. 2013 à 11:56
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 - 29 nov. 2013 à 11:37
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
A voir également:

10 réponses

lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
22 nov. 2013 à 13:38
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+
1
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
22 nov. 2013 à 18:56
En attendant, et avec les renseignements donnés, un début...
Sub CreerClasseur()
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
A+
1
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
Modifié par lermite222 le 23/11/2013 à 15:36
Il fonctionne sur ton classeur avec quelque petite modif pour contrer les caprices d'Excel.
Sub CopierClasseur()
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
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.
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 .
1
bibi42000 Messages postés 11 Date d'inscription vendredi 22 novembre 2013 Statut Membre Dernière intervention 29 novembre 2013
23 nov. 2013 à 17:06
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
0
bibi42000 Messages postés 11 Date d'inscription vendredi 22 novembre 2013 Statut Membre Dernière intervention 29 novembre 2013
23 nov. 2013 à 17:11
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
23 nov. 2013 à 17:55
Bon, tu va encore ajouter d'autre conditions ?? j'aime pas beaucoup de faire et refaire parce qu'ont ajoute des trucs..:-(
Bref, ceci dit,
Rectifie les titres de ton classeur principal.
Le nom des villes se suive toujours ?
Des villes pourraient êtres ajoutées ?
Tâche de penser à tout et tu dis.
0
bibi42000 Messages postés 11 Date d'inscription vendredi 22 novembre 2013 Statut Membre Dernière intervention 29 novembre 2013
25 nov. 2013 à 10:14
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
0
bibi42000 Messages postés 11 Date d'inscription vendredi 22 novembre 2013 Statut Membre Dernière intervention 29 novembre 2013
25 nov. 2013 à 10:45
Mea culpa Ville toujours en colonne 1 comme dans fichier de base transmis
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
25 nov. 2013 à 12:20
Re,
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+
1
bibi42000 Messages postés 11 Date d'inscription vendredi 22 novembre 2013 Statut Membre Dernière intervention 29 novembre 2013
26 nov. 2013 à 10:57
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,
@+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bibi42000 Messages postés 11 Date d'inscription vendredi 22 novembre 2013 Statut Membre Dernière intervention 29 novembre 2013
22 nov. 2013 à 15:18
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?
0
bibi42000 Messages postés 11 Date d'inscription vendredi 22 novembre 2013 Statut Membre Dernière intervention 29 novembre 2013
Modifié par pijaku le 22/11/2013 à 15:24
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
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
22 nov. 2013 à 18:24
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+
0
bibi42000 Messages postés 11 Date d'inscription vendredi 22 novembre 2013 Statut Membre Dernière intervention 29 novembre 2013
23 nov. 2013 à 12:23
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
0
bibi42000 Messages postés 11 Date d'inscription vendredi 22 novembre 2013 Statut Membre Dernière intervention 29 novembre 2013
27 nov. 2013 à 11:38
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
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
Modifié par lermite222 le 28/11/2013 à 11:40
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 .
0
bibi42000 Messages postés 11 Date d'inscription vendredi 22 novembre 2013 Statut Membre Dernière intervention 29 novembre 2013
29 nov. 2013 à 10:10
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,
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
29 nov. 2013 à 11:37
faudrait que ca marche sur un classeur 2013-002 etc
Voir la remarque dans le code avec le nom du classeur.
A+
0