Boucle pour sélectionner les données d'une colonne une par une
Fermé
malleinj
Messages postés
9
Date d'inscription
mardi 9 décembre 2014
Statut
Membre
Dernière intervention
17 juillet 2015
-
9 déc. 2014 à 17:46
via55 Messages postés 14477 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 3 octobre 2024 - 11 déc. 2014 à 11:57
via55 Messages postés 14477 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 3 octobre 2024 - 11 déc. 2014 à 11:57
A voir également:
- Boucle pour sélectionner les données d'une colonne une par une
- Déplacer une colonne excel - Guide
- Formule somme excel colonne - Guide
- Figer une colonne excel - Guide
- Trier une colonne excel - Guide
- Colonne word - Guide
6 réponses
via55
Messages postés
14477
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
3 octobre 2024
2 729
9 déc. 2014 à 18:53
9 déc. 2014 à 18:53
Bonjour
Oui tu peux faire dans une feuille appelée DATA de A1 à A13 la liste des pays et de B1à B4 la liste des noms des 4 onglets
Après ta macro va boucler sur les pays puis sur les onglets
Cdlmnt
Oui tu peux faire dans une feuille appelée DATA de A1 à A13 la liste des pays et de B1à B4 la liste des noms des 4 onglets
Après ta macro va boucler sur les pays puis sur les onglets
For n=1 to 13 nompays=sheets("DATA").Range("A" & n) For j=1 to 4 nomonglet=sheets("DATA").Range("B" & n) sheets(nomonglet).Select 'Selectionne un onglet 'ici tes instructions de recherche et de copie des données '................... next j 'onglet suivant next n 'pays suivant
Cdlmnt
malleinj
Messages postés
9
Date d'inscription
mardi 9 décembre 2014
Statut
Membre
Dernière intervention
17 juillet 2015
Modifié par pijaku le 10/12/2014 à 12:31
Modifié par pijaku le 10/12/2014 à 12:31
Bonjour,
tout d'abord merci pour ton aide.
Voici ce que j'ai écrit :
Ca fonctionne pour le premier pays en passant par les 4 onglets mais après ca ne marche plus à partir de "Sheets(nomonglet).Select 'Selectionne un onglet".
Faut-il défiltrer a chaque fois?
Après il faut que je modifie mon code car une fois que les 4 onglets sont filtrés sur un pays, je veux enregister une copie du fichier sous le nom du pays dans un dossier qui est le même pour tous les pays en mettant un truc du genre : "ThisWorkbook.SaveCopyAs Filename:=Dossier & Nom & " " & strDate & ".xls""
Merci beaucoup
Julien
tout d'abord merci pour ton aide.
Voici ce que j'ai écrit :
Sub FiltrerPays() For n = 1 To 13 nompays = Sheets("DATA").Range("A" & n) For j = 1 To 4 nomonglet = Sheets("DATA").Range("B" & n) Sheets(nomonglet).Select 'Selectionne un onglet Selection.AutoFilter Field:=19, Criteria1:=nompays, Operator:=xlAnd Next j 'onglet suivant Next n 'pays suivant End Sub
Ca fonctionne pour le premier pays en passant par les 4 onglets mais après ca ne marche plus à partir de "Sheets(nomonglet).Select 'Selectionne un onglet".
Faut-il défiltrer a chaque fois?
Après il faut que je modifie mon code car une fois que les 4 onglets sont filtrés sur un pays, je veux enregister une copie du fichier sous le nom du pays dans un dossier qui est le même pour tous les pays en mettant un truc du genre : "ThisWorkbook.SaveCopyAs Filename:=Dossier & Nom & " " & strDate & ".xls""
Merci beaucoup
Julien
malleinj
Messages postés
9
Date d'inscription
mardi 9 décembre 2014
Statut
Membre
Dernière intervention
17 juillet 2015
Modifié par pijaku le 10/12/2014 à 12:31
Modifié par pijaku le 10/12/2014 à 12:31
Voilà ou j'en suis :
J'arrive a créer un fichier pour chaque pays avec le nom du pays. Le problème est que j'ai sur chaque fichier de pays les données de tous les pays (elle sont juste cachées). Il faudrait su'a chaque fichier crée, je puisse supprimer les données des autres fichiers et n'avoir que les données du pays sur le fichier du pays...
Est-ce possible?
Merci beaucoup de votre aide.
Julien
Sub FiltrerPays() For i = 1 To 13 nompays = Sheets("DATA").Range("A" & i) For j = 1 To 4 nomonglet = Sheets("DATA").Range("B" & j) Sheets(nomonglet).Select 'Selectionne un onglet Selection.AutoFilter Field:=19, Criteria1:=nompays, Operator:=xlAnd Next j 'onglet suivant ThisWorkbook.SaveCopyAs Filename:=Sheets("DATA").Range("A" & i).Value & ".xls" Next i 'pays suivant End Sub
J'arrive a créer un fichier pour chaque pays avec le nom du pays. Le problème est que j'ai sur chaque fichier de pays les données de tous les pays (elle sont juste cachées). Il faudrait su'a chaque fichier crée, je puisse supprimer les données des autres fichiers et n'avoir que les données du pays sur le fichier du pays...
Est-ce possible?
Merci beaucoup de votre aide.
Julien
via55
Messages postés
14477
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
3 octobre 2024
2 729
Modifié par via55 le 10/12/2014 à 15:19
Modifié par via55 le 10/12/2014 à 15:19
Bonjour
Dans ce cas au lieu de filtrer tu devrais plutôt recopier toutes les données concernant le pays sur une nouvelle feuille puis ensuite enregistrer cette feuille
Pour cela tu crées une feuille que tu appelles Données
Tu lui mets à la même place que les autres feuilles les titres des colonnes en ligne 1
Cdlmnt
"L'imagination est plus importante que le savoir." A. Einstein
Dans ce cas au lieu de filtrer tu devrais plutôt recopier toutes les données concernant le pays sur une nouvelle feuille puis ensuite enregistrer cette feuille
Pour cela tu crées une feuille que tu appelles Données
Tu lui mets à la même place que les autres feuilles les titres des colonnes en ligne 1
Sub FiltrerPays() Dim ligne as long For i = 1 To 13 nompays = Sheets("DATA").Range("A" & i) ' selectionne et efface Données sheets("Données").select sheets("Données").Range("A2:F100").Select 'modifier la plage en fonction du nombres de colonnes et de lignes susceptiples d'etre remplies Selection.ClearContents 'variable n° de ligne où copier x=1 For j = 1 To 4 nomonglet = Sheets("DATA").Range("B" & j) ' derniere ligne remplie de la feuille nomonglet Ligne =Sheets(nomonglet). Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row ' boucle depuis la ligne 2 jusqu'à la dernière For n=2 to Ligne ' à modifier si les données ne commencent pas en ligne 2 'Vérifie que le nom de pays est bien le bon en colonne A if sheets(nomonglet).range("A" & n) = nompays then ' A adapter si le nom est dans une autre colonne ' si c'est le cas on incremente la variable ligne et on copie dans Données x=x+1 Sheets(nomonglet).Select Rows(n & ":" & n).Select Selection.Copy Sheets("Données").Select Range("A" & x ).Select ActiveSheet.Paste end if Next n Next j 'onglet suivant ActiveSheet.Copy ActiveWorkbook.SaveCopyAs Filename:=Sheets("DATA").Range("A" & i).Value & ".xls" Next i 'pays suivant end sub
Cdlmnt
"L'imagination est plus importante que le savoir." A. Einstein
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
malleinj
Messages postés
9
Date d'inscription
mardi 9 décembre 2014
Statut
Membre
Dernière intervention
17 juillet 2015
10 déc. 2014 à 17:06
10 déc. 2014 à 17:06
Rebonjour,
ceci me semble compliqué car sur les 4 onglets, il y a des données de tous les pays.
A la fin, mon fichier par pays doit contenir 4 onglets.
J'imaginais plutôt pouvoir faire la première partie et coller les données sur un autre fichier après la boucle j.
Est-ce possible?
Merci beaucoup
Julien
ceci me semble compliqué car sur les 4 onglets, il y a des données de tous les pays.
A la fin, mon fichier par pays doit contenir 4 onglets.
J'imaginais plutôt pouvoir faire la première partie et coller les données sur un autre fichier après la boucle j.
Est-ce possible?
Merci beaucoup
Julien
via55
Messages postés
14477
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
3 octobre 2024
2 729
10 déc. 2014 à 22:39
10 déc. 2014 à 22:39
Bonsoir
C'est surement possible
Je n'avais pas saisi que les nouveaux classeurs avaient eux aussi 4 onglets$
En fait il faut jongler sur 2 classeurs le classeur Source et un classeur Cible crée pour chaque pays dans lequel il faut soit copier les données du classeur Source puis effacer les lignes qui ne correspondant pas au pays; soit copier dans chaque onglet seulement les lignes concernant le pays concerné.
Là ça dépasse mes compétences en VBA
Repose la question sur le forum dans ce sens Creation de nouveau classeur avec copie de partie des données d'un autre, en mettant à disposition un exemple de ton fichier (via cjoint.com), tu trouveras certainement alors quelqu'un pour t'aider
Désolé de ne pouvoir faire plus
Cdlmnt
C'est surement possible
Je n'avais pas saisi que les nouveaux classeurs avaient eux aussi 4 onglets$
En fait il faut jongler sur 2 classeurs le classeur Source et un classeur Cible crée pour chaque pays dans lequel il faut soit copier les données du classeur Source puis effacer les lignes qui ne correspondant pas au pays; soit copier dans chaque onglet seulement les lignes concernant le pays concerné.
Là ça dépasse mes compétences en VBA
Repose la question sur le forum dans ce sens Creation de nouveau classeur avec copie de partie des données d'un autre, en mettant à disposition un exemple de ton fichier (via cjoint.com), tu trouveras certainement alors quelqu'un pour t'aider
Désolé de ne pouvoir faire plus
Cdlmnt
malleinj
Messages postés
9
Date d'inscription
mardi 9 décembre 2014
Statut
Membre
Dernière intervention
17 juillet 2015
11 déc. 2014 à 09:31
11 déc. 2014 à 09:31
Ok merci beaucoup.
Pour info, voici ce que j'ai crée du coup.
C'est un peu simplet mais ca marche.
La seule opération manuelle que je dois faire est de mettre le nom du pays quand il me demande d'enregistrer sous.
Est-il possible qu'il trouve le nom du pays en utilisant la feuille DATA de mon fichier de départ pour enregistrer automatiquement?
Sub FiltrerPays()
For i = 1 To 13
nompays = Sheets("DATA").Range("A" & i)
For j = 1 To 4
nomonglet = Sheets("DATA").Range("B" & j)
Sheets(nomonglet).Select 'Selectionne un onglet
Selection.AutoFilter Field:=19, Criteria1:=nompays, Operator:=xlAnd
Next j 'onglet suivant
Workbooks.Open Filename:= _
"C:\Users\jmallein\Travaux fichiers excel\Order by country.xlsx"
Windows("Matrice to receive.xlsm").Activate
Sheets("Directe").Select
Range("A5:M5").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.SpecialCells(xlCellTypeVisible).Select
Selection.Copy
Windows("Order by country.xlsx").Activate
Sheets("Directe").Select
Range("B1").Select
ActiveSheet.Paste
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Windows("Matrice to receive.xlsm").Activate
Sheets("Centrale").Select
Range("A5:T5").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.SpecialCells(xlCellTypeVisible).Select
Selection.Copy
Windows("Order by country.xlsx").Activate
Sheets("Centrale").Select
Range("B1").Select
ActiveSheet.Paste
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Windows("Matrice to receive.xlsm").Activate
Sheets("Tactical").Select
Range("A5:T5").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.SpecialCells(xlCellTypeVisible).Select
Selection.Copy
Windows("Order by country.xlsx").Activate
Sheets("Tactical").Select
Range("B1").Select
ActiveSheet.Paste
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Windows("Matrice to receive.xlsm").Activate
Sheets("Interstore").Select
Range("A5:J5").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.SpecialCells(xlCellTypeVisible).Select
Selection.Copy
Windows("Order by country.xlsx").Activate
Sheets("Interstore").Select
Range("B1").Select
ActiveSheet.Paste
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("Récapitulatif").Select
ActiveWorkbook.RefreshAll
Application.Dialogs(xlDialogSaveAs).Show
ActiveWindow.Close
Next i 'pays suivant
Sheets("Directe").Select
ActiveSheet.Range("A:T").AutoFilter Field:=19
Sheets("Centrale").Select
ActiveSheet.Range("A:T").AutoFilter Field:=19
Sheets("Tactical").Select
ActiveSheet.Range("A:T").AutoFilter Field:=19
Sheets("Interstore").Select
ActiveSheet.Range("A:T").AutoFilter Field:=19
End Sub
Pour info, voici ce que j'ai crée du coup.
C'est un peu simplet mais ca marche.
La seule opération manuelle que je dois faire est de mettre le nom du pays quand il me demande d'enregistrer sous.
Est-il possible qu'il trouve le nom du pays en utilisant la feuille DATA de mon fichier de départ pour enregistrer automatiquement?
Sub FiltrerPays()
For i = 1 To 13
nompays = Sheets("DATA").Range("A" & i)
For j = 1 To 4
nomonglet = Sheets("DATA").Range("B" & j)
Sheets(nomonglet).Select 'Selectionne un onglet
Selection.AutoFilter Field:=19, Criteria1:=nompays, Operator:=xlAnd
Next j 'onglet suivant
Workbooks.Open Filename:= _
"C:\Users\jmallein\Travaux fichiers excel\Order by country.xlsx"
Windows("Matrice to receive.xlsm").Activate
Sheets("Directe").Select
Range("A5:M5").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.SpecialCells(xlCellTypeVisible).Select
Selection.Copy
Windows("Order by country.xlsx").Activate
Sheets("Directe").Select
Range("B1").Select
ActiveSheet.Paste
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Windows("Matrice to receive.xlsm").Activate
Sheets("Centrale").Select
Range("A5:T5").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.SpecialCells(xlCellTypeVisible).Select
Selection.Copy
Windows("Order by country.xlsx").Activate
Sheets("Centrale").Select
Range("B1").Select
ActiveSheet.Paste
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Windows("Matrice to receive.xlsm").Activate
Sheets("Tactical").Select
Range("A5:T5").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.SpecialCells(xlCellTypeVisible).Select
Selection.Copy
Windows("Order by country.xlsx").Activate
Sheets("Tactical").Select
Range("B1").Select
ActiveSheet.Paste
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Windows("Matrice to receive.xlsm").Activate
Sheets("Interstore").Select
Range("A5:J5").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.SpecialCells(xlCellTypeVisible).Select
Selection.Copy
Windows("Order by country.xlsx").Activate
Sheets("Interstore").Select
Range("B1").Select
ActiveSheet.Paste
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("Récapitulatif").Select
ActiveWorkbook.RefreshAll
Application.Dialogs(xlDialogSaveAs).Show
ActiveWindow.Close
Next i 'pays suivant
Sheets("Directe").Select
ActiveSheet.Range("A:T").AutoFilter Field:=19
Sheets("Centrale").Select
ActiveSheet.Range("A:T").AutoFilter Field:=19
Sheets("Tactical").Select
ActiveSheet.Range("A:T").AutoFilter Field:=19
Sheets("Interstore").Select
ActiveSheet.Range("A:T").AutoFilter Field:=19
End Sub
via55
Messages postés
14477
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
3 octobre 2024
2 729
11 déc. 2014 à 11:57
11 déc. 2014 à 11:57
Bonjour
As tu essayé de remplacer Application.Dialogs(xlDialogSaveAs).Show
par Workbooks("Order by country.xlsx").SaveCopyAs Filename:=nompays & ".xlsx"
Cdlmnt
As tu essayé de remplacer Application.Dialogs(xlDialogSaveAs).Show
par Workbooks("Order by country.xlsx").SaveCopyAs Filename:=nompays & ".xlsx"
Cdlmnt