VBA Excel03 - Création/Extraction classeur
Résolu/Fermé
Palteza
Messages postés
79
Date d'inscription
mercredi 2 décembre 2009
Statut
Membre
Dernière intervention
6 septembre 2014
-
Modifié par Palteza le 20/04/2010 à 15:21
Palteza Messages postés 79 Date d'inscription mercredi 2 décembre 2009 Statut Membre Dernière intervention 6 septembre 2014 - 20 avril 2010 à 14:35
Palteza Messages postés 79 Date d'inscription mercredi 2 décembre 2009 Statut Membre Dernière intervention 6 septembre 2014 - 20 avril 2010 à 14:35
A voir également:
- VBA Excel03 - Création/Extraction classeur
- Creation compte gmail - Guide
- Création compte google - Guide
- Media creation tool - Télécharger - Systèmes d'exploitation
- Création organigramme - Guide
- Création groupe whatsapp - Guide
11 réponses
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
13 avril 2010 à 17:08
13 avril 2010 à 17:08
Bonjour,
Le classeur n'est jamais sauvegardé !!!
Tu créés un classeur et tu lui donnes un nom. Jusque là, c'est Ok. Si tu fais une modification, il faut sauvegarder les modifs pour qu'elles soient effectives.
De plus, tu essaies d'ouvrir un classeur déjà ouvert : Workbooks.Open Filename:="M:\Léo\Données_Gironde.xls" !!!
;o)
Le classeur n'est jamais sauvegardé !!!
Tu créés un classeur et tu lui donnes un nom. Jusque là, c'est Ok. Si tu fais une modification, il faut sauvegarder les modifs pour qu'elles soient effectives.
De plus, tu essaies d'ouvrir un classeur déjà ouvert : Workbooks.Open Filename:="M:\Léo\Données_Gironde.xls" !!!
;o)
Palteza
Messages postés
79
Date d'inscription
mercredi 2 décembre 2009
Statut
Membre
Dernière intervention
6 septembre 2014
3
Modifié par Palteza le 14/04/2010 à 10:41
Modifié par Palteza le 14/04/2010 à 10:41
Bonjour Polux,
Je pensais qu'une fois le fichier créé en dur, toutes les modifs étaient prises en compte ... mais pas quand on crée d'autres objets donc!
Suite à ta remarque, j'ai essayé d'insérer la sauvegarde en fin de module de création, mais (de la façon dont je le fais ...), il veut rien savoir :
'On créer l'objet Excel
Set xlApp = CreateObject("Excel.Application")
'On défini le nombre d'onglets (ici 5)
xlApp.SheetsInNewWorkbook = 5
'On ajoute un classeur
Set xlBook = xlApp.Workbooks.Add
'On donne un nom au classeur
xlBook.SaveAs ("M:\Léo\Données_Gironde.xls")
'On rend le classeur visible
xlApp.Visible = True
'On créer l'objet onglet dans le nouveau classeur créé
Set xlSheet = xlBook.Worksheets(1)
'On affecte un nom aux l'onglets
xlSheet.Name = "Population"
'on libère l'objet onglet pour pouvoir en créer un nouveau ... etc
Set xlSheet = Nothing
'
'
Set xlSheet = xlBook.Worksheets(2)
xlSheet.Name = "Activité"
'
'
Set xlSheet = xlBook.Worksheets(3)
xlSheet.Name = "Famille"
'
'
Set xlSheet = xlBook.Worksheets(4)
xlSheet.Name = "Formation"
'
'
Set xlSheet = xlBook.Worksheets(5)
xlSheet.Name = "Logement"
'
'
'On remet la propriété de l'application à 3 (par défaut)
xlApp.SheetsInNewWorkbook = 3
'sauvegarde fichier
Workbooks(Données_Gironde).Save
Workbooks.Open Filename:="M:\Léo\Données_Population\BTX_IC_POP_2006.xls"
Workbooks("Données_Gironde.xls").WorkSheet("Population").Activate
Si je passe par cette sauvegarde, il me débug la ligne de sauvegarde (indice n'appartient pas à la sélection).
Quand je tente avec ActiveWorkbook.Save, il me débug la dernière ligne du code plus haut (indice n'appartient pas à la sélection) ... ça voudrait dire que j'agis pas sur Données_Gironde quand je crée mes 5 feuilles!? (pourtant quand je le fais à part, je vois bien les feuilles se créer sur le bon fichier).
Ca serait pas la méthode de renommage du fichier ( xlBook.SaveAs ("M:\Léo\Données_Gironde.xls") ) qui serait pas top?
Je pensais qu'une fois le fichier créé en dur, toutes les modifs étaient prises en compte ... mais pas quand on crée d'autres objets donc!
Suite à ta remarque, j'ai essayé d'insérer la sauvegarde en fin de module de création, mais (de la façon dont je le fais ...), il veut rien savoir :
'On créer l'objet Excel
Set xlApp = CreateObject("Excel.Application")
'On défini le nombre d'onglets (ici 5)
xlApp.SheetsInNewWorkbook = 5
'On ajoute un classeur
Set xlBook = xlApp.Workbooks.Add
'On donne un nom au classeur
xlBook.SaveAs ("M:\Léo\Données_Gironde.xls")
'On rend le classeur visible
xlApp.Visible = True
'On créer l'objet onglet dans le nouveau classeur créé
Set xlSheet = xlBook.Worksheets(1)
'On affecte un nom aux l'onglets
xlSheet.Name = "Population"
'on libère l'objet onglet pour pouvoir en créer un nouveau ... etc
Set xlSheet = Nothing
'
'
Set xlSheet = xlBook.Worksheets(2)
xlSheet.Name = "Activité"
'
'
Set xlSheet = xlBook.Worksheets(3)
xlSheet.Name = "Famille"
'
'
Set xlSheet = xlBook.Worksheets(4)
xlSheet.Name = "Formation"
'
'
Set xlSheet = xlBook.Worksheets(5)
xlSheet.Name = "Logement"
'
'
'On remet la propriété de l'application à 3 (par défaut)
xlApp.SheetsInNewWorkbook = 3
'sauvegarde fichier
Workbooks(Données_Gironde).Save
Workbooks.Open Filename:="M:\Léo\Données_Population\BTX_IC_POP_2006.xls"
Workbooks("Données_Gironde.xls").WorkSheet("Population").Activate
Si je passe par cette sauvegarde, il me débug la ligne de sauvegarde (indice n'appartient pas à la sélection).
Quand je tente avec ActiveWorkbook.Save, il me débug la dernière ligne du code plus haut (indice n'appartient pas à la sélection) ... ça voudrait dire que j'agis pas sur Données_Gironde quand je crée mes 5 feuilles!? (pourtant quand je le fais à part, je vois bien les feuilles se créer sur le bon fichier).
Ca serait pas la méthode de renommage du fichier ( xlBook.SaveAs ("M:\Léo\Données_Gironde.xls") ) qui serait pas top?
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
14 avril 2010 à 12:33
14 avril 2010 à 12:33
Bonjour,
J'ai testé avec ça et ça fonctionne:
;o)
J'ai testé avec ça et ça fonctionne:
'...... 'On remet la propriété de l'application à 3 (par défaut) xlApp.SheetsInNewWorkbook = 3 'sauvegarde fichier xlBook.Close SaveChanges:=True Set xlBook = Nothing Set xlBook = Workbooks.Open("M:\Léo\Données_Gironde.xls") Set xlSheet = xlBook.Worksheets("Population") xlSheet.Activate Workbooks.Open Filename:="M:\Léo\Données_Population\BTX_IC_POP_2006.xls"
;o)
Palteza
Messages postés
79
Date d'inscription
mercredi 2 décembre 2009
Statut
Membre
Dernière intervention
6 septembre 2014
3
Modifié par Palteza le 14/04/2010 à 16:38
Modifié par Palteza le 14/04/2010 à 16:38
Merci bien Polux encore une fois.
J'ai du inverser les 2 dernières lignes pour que la suite fonctionne.
Sinon, en ouvrant l'autre classeur après, il ne considère plus
1) Quelle réflexion t'as mené à faire ces changements?
2) J'me permets de coller un post que j'avais mis dans le forum Bureautique resté sans réponse. C'est pour avoir un conseil. Si ça à rien à faire ici ou que tu trouves que je profite trop de ta précieuse aide, tu m'dis hein, je reposterai un nouveau sujet ^^'
.
.
.
J'ai pour l'instant un fichier brut avec en lignes (env. 900) des communes et en colonnes (une 100aine) des variables, ceci sur 5 feuilles. En voici une vue grossière (désolé pour la présentation, il ne garde pas mes espaces) . Pour chaque ville, il peut y avoir plusieurs lignes (correspondant à des quartiers) :
Villes Var.1 Var.2 Var.3
Bordeaux 12 13 12
Bordeaux 9 12 23
Bordeaux 10 8 9
Talence 9 2 3
Talence 10 10 9
Villenave 8 9 7
Je dois tout automatiser, donc passer par du codage en VB.
Mon tableau final devra être l'inverse de mon brut : avoir les communes en colonnes (et arriver à une seule colonne par ville) et les variables en lignes.
J'ai d'abord essayé d'utiliser simplement la transposition mais Excel ne gère pas autant de données en transposé.
J'ai pensé à utiliser un tableau croisé dynamique (capable de faire mes 2 souhaits le bougre : transposer et somme par ville!) ... mais le problème est que quand je veux placer les villes en colonnes, le TCD, même s'il supprime les doublons, ne gère pas l'intégralité des villes en colonnes (capacité insuffisante)
Voila je me demande comment par quelle méthode contourner ces problèmes. Passer par plusieurs TCD à la suite? Uniquement du codage "simple" et conditionnel avec des boucles pour sommer les valeurs par variable de mes villes identiques (ça me fait un peu peur sous VB ...)? Une autre voie (collection?) ... J'suis dans le flou! Quelle est la voie la moins périlleuse?
Merci d'avance.
J'ai du inverser les 2 dernières lignes pour que la suite fonctionne.
Workbooks.Open Filename:="M:\Léo\Données_Population\BTX_IC_POP_2006.xls" xlSheet.Activate
Sinon, en ouvrant l'autre classeur après, il ne considère plus
xlSheetcomme actif par la suite, mais une feuille du classeur
BTX_IC ...
1) Quelle réflexion t'as mené à faire ces changements?
2) J'me permets de coller un post que j'avais mis dans le forum Bureautique resté sans réponse. C'est pour avoir un conseil. Si ça à rien à faire ici ou que tu trouves que je profite trop de ta précieuse aide, tu m'dis hein, je reposterai un nouveau sujet ^^'
.
.
.
J'ai pour l'instant un fichier brut avec en lignes (env. 900) des communes et en colonnes (une 100aine) des variables, ceci sur 5 feuilles. En voici une vue grossière (désolé pour la présentation, il ne garde pas mes espaces) . Pour chaque ville, il peut y avoir plusieurs lignes (correspondant à des quartiers) :
Villes Var.1 Var.2 Var.3
Bordeaux 12 13 12
Bordeaux 9 12 23
Bordeaux 10 8 9
Talence 9 2 3
Talence 10 10 9
Villenave 8 9 7
Je dois tout automatiser, donc passer par du codage en VB.
Mon tableau final devra être l'inverse de mon brut : avoir les communes en colonnes (et arriver à une seule colonne par ville) et les variables en lignes.
J'ai d'abord essayé d'utiliser simplement la transposition mais Excel ne gère pas autant de données en transposé.
J'ai pensé à utiliser un tableau croisé dynamique (capable de faire mes 2 souhaits le bougre : transposer et somme par ville!) ... mais le problème est que quand je veux placer les villes en colonnes, le TCD, même s'il supprime les doublons, ne gère pas l'intégralité des villes en colonnes (capacité insuffisante)
Voila je me demande comment par quelle méthode contourner ces problèmes. Passer par plusieurs TCD à la suite? Uniquement du codage "simple" et conditionnel avec des boucles pour sommer les valeurs par variable de mes villes identiques (ça me fait un peu peur sous VB ...)? Une autre voie (collection?) ... J'suis dans le flou! Quelle est la voie la moins périlleuse?
Merci d'avance.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
Modifié par Polux31 le 15/04/2010 à 11:11
Modifié par Polux31 le 15/04/2010 à 11:11
Bonjour,
Content que ça fonctionne.
1) J'ai simplement ajouter la sauvegarde en utilisant l'objet xlBook déjà créé.
Quand je manipule plusieurs classeurs, je préfère créer des objets pour les manipuler. En fait j'aurai du te proposer ceci:
En faisant comme ça, il n'y a pas besoin de faire xlSheet.Activate. Cette commande ne sert qu'à indiquer sur quelle feuille Excel doit agir.
2) Je ne comprends bien ce que tu cherches à faire. Peux tu faire passer ton fichier via https://www.cjoint.com/ en indiquant le résultat que tu veux obtenir ?
;o)
«Ce que l'on conçoit bien s'énonce clairement, Et les mots pour le dire arrivent aisément.»
Nicolas Boileau
Content que ça fonctionne.
1) J'ai simplement ajouter la sauvegarde en utilisant l'objet xlBook déjà créé.
Quand je manipule plusieurs classeurs, je préfère créer des objets pour les manipuler. En fait j'aurai du te proposer ceci:
'...... 'On remet la propriété de l'application à 3 (par défaut) xlApp.SheetsInNewWorkbook = 3 'sauvegarde fichier xlBook.Close SaveChanges:=True Set xlBook = Nothing Set xlBook = Workbooks.Open("M:\Léo\Données_Gironde.xls") Set xlSheet = xlBook.Worksheets("Population") Dim xlBook2 As Workbook Dim xlSheet2 As Worksheet Set xlBook2 = Workbooks.open("M:\Léo\Données_Population\BTX_IC_POP_2006.xls") Set xlSheet2 = xlBook2.Worksheets("Feuil2")
En faisant comme ça, il n'y a pas besoin de faire xlSheet.Activate. Cette commande ne sert qu'à indiquer sur quelle feuille Excel doit agir.
2) Je ne comprends bien ce que tu cherches à faire. Peux tu faire passer ton fichier via https://www.cjoint.com/ en indiquant le résultat que tu veux obtenir ?
;o)
«Ce que l'on conçoit bien s'énonce clairement, Et les mots pour le dire arrivent aisément.»
Nicolas Boileau
Palteza
Messages postés
79
Date d'inscription
mercredi 2 décembre 2009
Statut
Membre
Dernière intervention
6 septembre 2014
3
Modifié par Palteza le 15/04/2010 à 13:58
Modifié par Palteza le 15/04/2010 à 13:58
T'as 2 feuilles, tableau initial, et début du tableau final que j'veux (sachant qu'en fait ya 5 feuilles, toutes comme la 1ère mais avec des variables différentes, mais sinon memes dispositions) :
http://www.cijoint.fr/cjlink.php?file=cj201004/cijGJd32Jd.xls
http://www.cijoint.fr/cjlink.php?file=cj201004/cijGJd32Jd.xls
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
15 avril 2010 à 15:39
15 avril 2010 à 15:39
j'espère que ce n'est pas urgent ... je vais avoir besoin d'un peu de temps
;o)
;o)
Palteza
Messages postés
79
Date d'inscription
mercredi 2 décembre 2009
Statut
Membre
Dernière intervention
6 septembre 2014
3
15 avril 2010 à 15:48
15 avril 2010 à 15:48
Même si j'attends plus ou moins ça pour avancer, ya rien de très urgent.
Si tu dis ça, ça veut dire que c'est plutôt lourd comme code? Parce qu'à la base je te demande juste de me mettre sur la piste, pas forcément que tu me pondes le code ... mais si c'est assez costaud, j'ai pas les compétences pour le réaliser ...
Si tu dis ça, ça veut dire que c'est plutôt lourd comme code? Parce qu'à la base je te demande juste de me mettre sur la piste, pas forcément que tu me pondes le code ... mais si c'est assez costaud, j'ai pas les compétences pour le réaliser ...
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
15 avril 2010 à 15:55
15 avril 2010 à 15:55
Oui c'est assez lourd ... ça ne se fait pas avec une simple macro.
Si j'ai bien interprété, il faut cumuler les données pour chaque ville et pour chaque colonne (critères) pour ensuite les afficher ... plus la mise en forme ...
Si j'ai bien interprété, il faut cumuler les données pour chaque ville et pour chaque colonne (critères) pour ensuite les afficher ... plus la mise en forme ...
Palteza
Messages postés
79
Date d'inscription
mercredi 2 décembre 2009
Statut
Membre
Dernière intervention
6 septembre 2014
3
15 avril 2010 à 16:22
15 avril 2010 à 16:22
Oui voila, pour Ambarès :
12 706(2ème feuille) = 3 875 + 2 827 + 2 696 + 3 308 (1ère feuille)
435 = 155 + 75 + 89 + 116
etc...
Pour chaque ville.
Tu vas passer par quoi? Une collection?
12 706(2ème feuille) = 3 875 + 2 827 + 2 696 + 3 308 (1ère feuille)
435 = 155 + 75 + 89 + 116
etc...
Pour chaque ville.
Tu vas passer par quoi? Une collection?
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
15 avril 2010 à 16:36
15 avril 2010 à 16:36
un tableau ou une collection, je ne sais pas encore. A priori la collection n'est pas utile.
Mais un problème se présente ... il y a 542 communes et seulement 256 colonnes !!!
Mais un problème se présente ... il y a 542 communes et seulement 256 colonnes !!!
Palteza
Messages postés
79
Date d'inscription
mercredi 2 décembre 2009
Statut
Membre
Dernière intervention
6 septembre 2014
3
16 avril 2010 à 10:04
16 avril 2010 à 10:04
Ouais en fait ce problème m'a amené à réfléchir et du coup : changement de programme.
J'vais bien remettre à plat mon problème, entreprends rien pour l'instant Polux.
J'te tiens au courant si j'ai besoin de qqchose que j'sais pas faire.
Merci beaucoup en tout cas.
J'vais bien remettre à plat mon problème, entreprends rien pour l'instant Polux.
J'te tiens au courant si j'ai besoin de qqchose que j'sais pas faire.
Merci beaucoup en tout cas.
Palteza
Messages postés
79
Date d'inscription
mercredi 2 décembre 2009
Statut
Membre
Dernière intervention
6 septembre 2014
3
Modifié par Palteza le 16/04/2010 à 10:23
Modifié par Palteza le 16/04/2010 à 10:23
Ben voila, j'ai déjà de nouveau un "problème".
Je veux extraire d'un tableau (comme celui que tu as vu sur le fichier joint), des communes spéciales. Sauf que des tableaux bruts il y en a 5, sur 5 feuilles différentes (donc 5 extractions différentes)
Alors au lieu de faire 5 pavés, pour chaque feuille, j'ai essayé de faire une boucle qui va bien. Sauf que là, l'extraction se fait toujours de la même feuille. Je comprends bien que c'est mon With qui provoque ça, mais il en veut absolument un avec cette structure.
Voici le fichier (c'est encore le mieux) : http://www.cijoint.fr/cjlink.php?file=cj201004/cijkmnBWeS.xls
Je veux extraire d'un tableau (comme celui que tu as vu sur le fichier joint), des communes spéciales. Sauf que des tableaux bruts il y en a 5, sur 5 feuilles différentes (donc 5 extractions différentes)
Alors au lieu de faire 5 pavés, pour chaque feuille, j'ai essayé de faire une boucle qui va bien. Sauf que là, l'extraction se fait toujours de la même feuille. Je comprends bien que c'est mon With qui provoque ça, mais il en veut absolument un avec cette structure.
Voici le fichier (c'est encore le mieux) : http://www.cijoint.fr/cjlink.php?file=cj201004/cijkmnBWeS.xls
Sub CreationDonneesCUB() Dim NbrLig, lig, NumLig As Long NbrLig = 65536 Dim feuille As Worksheet Dim i As Integer i = 1 Workbooks.Open Filename:="M:\Léo\Données_Gironde.xls" Workbooks("Données_Gironde.xls").Sheets(i).Activate NumLig = 2 With Workbooks("Données_Gironde.xls").Sheets(i) For Each feuille In Worksheets Workbooks("Données_Gironde.xls").Sheets(i).Select Set feuille = Sheets.Add(After:=Sheets(Sheets.Count)) For lig = 3 To NbrLig com = .Cells(lig, 2).Value Select Case com Case "Ambarès-et-Lagrave", "Ambès", "Artigues-près-Bordeaux", "Bassens", "Bègles", "Blanquefort", "Bordeaux", "Bouliac", "Bruges", "Carbon-Blanc", "Cenon", "Eysines", "Floirac", "Gradignan", "Le Bouscat", "Le Haillan", "Le Taillan-Médoc", "Lormont", "Mérignac", "Parempuyre", "Pessac", "Saint-Aubin-de-Médoc", "Saint-Louis-de-Montferrand", "Saint-Médard-en-Jalles", "Saint-Vincent-de-Paul", "Talence", "Villenave-d'Ornon" .Cells(lig, 1).EntireRow.Copy NumLig = NumLig + 1 Cells(NumLig, 1).Select ActiveSheet.Paste End Select Next NumLig = 2 i = i + 1 Next End With End Sub
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
16 avril 2010 à 11:15
16 avril 2010 à 11:15
Bonjour,
Dans quel fichier se trouve ce code ?
Tu devrais créer des objets, ça serait plus clair ...
Si j'ai bien compris, tu parcours toutes les feuilles du classeur Données_Gironde.xls
Essaie comme ça: /!\ Je n'ai pas testé !!!
;o)
Dans quel fichier se trouve ce code ?
Tu devrais créer des objets, ça serait plus clair ...
Si j'ai bien compris, tu parcours toutes les feuilles du classeur Données_Gironde.xls
Essaie comme ça: /!\ Je n'ai pas testé !!!
Sub CreationDonneesCUB() Dim NbrLig, lig, NumLig As Long NbrLig = 65536 Dim xlBook As Workbook Dim feuille As Worksheet Dim ws As Worksheet Dim i As Integer i = 3 Set xlBook = Workbooks.Open Filename:="M:\Léo\Données_Gironde.xls" NumLig = 2 For Each feuille In xlBook.Worksheets Set ws = xlBook.Sheets.Add(After:=Sheets(Sheets.Count)) While feuille.Cells(i, 2).Value <> "" com = feuille.Cells(i, 2).Value Select Case com Case "Ambarès-et-Lagrave", "Ambès", "Artigues-près-Bordeaux", "Bassens", "Bègles", "Blanquefort", "Bordeaux", "Bouliac", "Bruges", "Carbon-Blanc", "Cenon", "Eysines", "Floirac", "Gradignan", "Le Bouscat", "Le Haillan", "Le Taillan-Médoc", "Lormont", "Mérignac", "Parempuyre", "Pessac", "Saint-Aubin-de-Médoc", "Saint-Louis-de-Montferrand", "Saint-Médard-en-Jalles", "Saint-Vincent-de-Paul", "Talence", "Villenave-d'Ornon" NumLig = NumLig + 1 feuille.Cells(lig, 1).EntireRow.Copy ws.Cells(NumLig, 1) End Select Set ws = Nothing Next NumLig = 2 i = i + 1 Wend End Sub
;o)
Palteza
Messages postés
79
Date d'inscription
mercredi 2 décembre 2009
Statut
Membre
Dernière intervention
6 septembre 2014
3
Modifié par Palteza le 20/04/2010 à 16:36
Modifié par Palteza le 20/04/2010 à 16:36
Pour ceux qui ont suivi le post où qui rechercheront, je poste la solution à :
Depuis un fichier étranger1, la création d'un nouveau classeur (et feuilles liées) qui va recevoir des données spécifiques (suivant un critère choisi : ici une liste de villes) provenant d'un fichier étranger2 :
Depuis un fichier étranger1, la création d'un nouveau classeur (et feuilles liées) qui va recevoir des données spécifiques (suivant un critère choisi : ici une liste de villes) provenant d'un fichier étranger2 :
Option Explicit Sub ExtractionDonneesCUB2() Dim com As String Dim NbrLig, lig, NumLig As Long Dim feuille As Worksheet Dim I As Integer Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet 'On crée l'objet Excel Set xlApp = CreateObject("Excel.Application") 'On défini le nombre d'onglets (ici 5) xlApp.SheetsInNewWorkbook = 5 'On ajoute un classeur Set xlBook = xlApp.Workbooks.Add 'On donne un nom au classeur xlBook.SaveAs ("M:\Léo\Données_CUB2.xls") 'On rend le classeur visible xlApp.Visible = True 'On créer l'objet onglet dans le nouveau classeur créé Set xlSheet = xlBook.Worksheets(1) 'On affecte un nom aux l'onglets xlSheet.Name = "Population" 'on libère l'objet onglet pour pouvoir en créer un nouveau ... etc Set xlSheet = Nothing ' ' Set xlSheet = xlBook.Worksheets(2) xlSheet.Name = "Activité" Set xlSheet = Nothing ' ' Set xlSheet = xlBook.Worksheets(3) xlSheet.Name = "Famille" Set xlSheet = Nothing ' ' Set xlSheet = xlBook.Worksheets(4) xlSheet.Name = "Formation" Set xlSheet = Nothing ' ' Set xlSheet = xlBook.Worksheets(5) xlSheet.Name = "Logement" Set xlSheet = Nothing ' ' 'On remet la propriété de l'application à 3 (par défaut) xlApp.SheetsInNewWorkbook = 3 'On sauvegarde le fichier xlBook.Close SaveChanges:=True 'On libère l'objet classeur Set xlBook = Nothing 'on ouvre, dans l'ordre, fichier source, fichier recevant l'extraction Workbooks.Open Filename:="M:\Léo\Données_Gironde.xls" Workbooks.Open Filename:="M:\Léo\Données_CUB2.xls" Set xlBook = Workbooks("Données_Gironde") NumLig = 1 For I = 1 To 5 'boucle pour opérer sur chaque feuille With xlBook.Sheets(I) 'classeur et feuille source NbrLig = .Cells(65536, 1).End(xlUp).Row Workbooks("Données_Gironde.xls").Sheets(I).Range("A1:DZ1").Copy _ Destination:=Workbooks("Données_Gironde.xls").Sheets(I).Range("A1") Workbooks("Données_CUB2.xls").Sheets(I).Select 'feuille recevant les données For lig = 2 To NbrLig com = .Cells(lig, 2).Value Select Case com 'sélection des données à extraire présentes dans la variable com Case "Ambarès-et-Lagrave", "Ambès", "Artigues-près-Bordeaux", "Bassens", "Bègles", "Blanquefort", "Bordeaux", "Bouliac", "Bruges", "Carbon-Blanc", "Cenon", "Eysines", "Floirac", "Gradignan", "Le Bouscat", "Le Haillan", "Le Taillan-Médoc", "Lormont", "Mérignac", "Parempuyre", "Pessac", "Saint-Aubin-de-Médoc", "Saint-Louis-de-Montferrand", "Saint-Médard-en-Jalles", "Saint-Vincent-de-Paul", "Talence", "Villenave-d'Ornon" .Cells(lig, 1).EntireRow.Copy NumLig = NumLig + 1 Cells(NumLig, 1).Select ActiveSheet.Paste End Select Next NumLig = 1 'on redimensionne les colonnes Columns("A:DN").EntireColumn.AutoFit 'on se repositionne sur A1 Range("A1").Select End With Next Application.CutCopyMode = False Workbooks("Données_Gironde.xls").Close Workbooks("Données_CUB2.xls").Close SaveChanges:=True Application.CutCopyMode = True End Sub