Tri en masse Excel 2007
Résolu/Fermé
Dauphins
-
6 janv. 2012 à 13:42
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 11 janv. 2012 à 10:54
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 11 janv. 2012 à 10:54
A voir également:
- Tri en masse Excel 2007
- Liste déroulante excel - Guide
- Tri excel - Guide
- Formule excel - Guide
- Mise en forme conditionnelle excel - Guide
- Renommer fichier en masse - Guide
25 réponses
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 741
6 janv. 2012 à 14:08
6 janv. 2012 à 14:08
Bonjour,
Combien as tu de familles? Sous familles?
Tu fais une extraction régulièrement ou c'est juste pour une fois?
Combien as tu de familles? Sous familles?
Tu fais une extraction régulièrement ou c'est juste pour une fois?
Merci de ta réponse
J'ai environ 40 familles et 100 sous familles au total.
C'est une extraction que je fais régulièrement pour différent traitement donc c'est pour cela que je voudrai automatiser au mieux la chose pour gagner du temps
Merci encore
J'ai environ 40 familles et 100 sous familles au total.
C'est une extraction que je fais régulièrement pour différent traitement donc c'est pour cela que je voudrai automatiser au mieux la chose pour gagner du temps
Merci encore
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 741
6 janv. 2012 à 14:23
6 janv. 2012 à 14:23
Récapitulons, pour être sur :
Feuille nommée "Feuil1" :
Colonne A :Code Fourisseur
Colonne B : Ref
Colonne C : Description
Colonne D: Prix
Colonne E : Famille
Colonne F : Ss famille
40 familles et 100 sous familles. Tu veux une feuille par famille ou une feuille par sous-famille? Comment souhaites tu organiser ton fichier en fait?
Feuille nommée "Feuil1" :
Colonne A :Code Fourisseur
Colonne B : Ref
Colonne C : Description
Colonne D: Prix
Colonne E : Famille
Colonne F : Ss famille
40 familles et 100 sous familles. Tu veux une feuille par famille ou une feuille par sous-famille? Comment souhaites tu organiser ton fichier en fait?
En faite je veux une feuille par famille sous famille
Ex Famille 1 Sous Famille 1
Ex Famille 1 Sous Famille 2
Ex Famille 1 Sous Famille 3
Ex Famille 2 Sous Famille 1
Ex Famille 2 Sous Famille 2
Ex Famille 2 Sous Famille 1
Ex Famille 2 Sous Famille 3
Donc la feuille 1 c'est Famille 1 Sous Famille 1
la feuille 2 c'est Famille 1 Sous Famille 2
la feuille 3 c'est Famille 1 Sous Famille 3
etc...
Et en gardant les entete de colonnes comme tu as dis
Ex Famille 1 Sous Famille 1
Ex Famille 1 Sous Famille 2
Ex Famille 1 Sous Famille 3
Ex Famille 2 Sous Famille 1
Ex Famille 2 Sous Famille 2
Ex Famille 2 Sous Famille 1
Ex Famille 2 Sous Famille 3
Donc la feuille 1 c'est Famille 1 Sous Famille 1
la feuille 2 c'est Famille 1 Sous Famille 2
la feuille 3 c'est Famille 1 Sous Famille 3
etc...
Et en gardant les entete de colonnes comme tu as dis
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 741
6 janv. 2012 à 14:35
6 janv. 2012 à 14:35
OK.
Une proposition en fin de journée (16h...) sinon lundi!
Une proposition en fin de journée (16h...) sinon lundi!
Sincerement un grand merci de ton aide
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 741
Modifié par pijaku le 6/01/2012 à 15:15
Modifié par pijaku le 6/01/2012 à 15:15
Excuse moi, 40 familles et 100 sous familles, ça ne te ferais pas un fichier excel à 4 000 feuilles par hasard?
Le nombre maximum de feuilles par classeur est limité par la quantité de mémoire disponible.
Même si Excel 2007 et ton ordi pouvait gérer autant de feuilles (et là j'en doute), je suis sur qu'un utilisateur ne s'y retrouvera jamais!
Tu dis...
Le nombre maximum de feuilles par classeur est limité par la quantité de mémoire disponible.
Même si Excel 2007 et ton ordi pouvait gérer autant de feuilles (et là j'en doute), je suis sur qu'un utilisateur ne s'y retrouvera jamais!
Tu dis...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Effectivement cela fais beaucoup de feuilles excel mais toutes les formes de famille/ ss famille ne sont pas utilisé. En gros il faut compter max 200 feuilles excel.
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 741
6 janv. 2012 à 15:39
6 janv. 2012 à 15:39
Je peux bloquer la macro si l'exécution dépasse les 256 feuilles?
ok
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 741
6 janv. 2012 à 15:54
6 janv. 2012 à 15:54
Ok.
Dernière question avant la suivante : la colonne A est entièrement remplie?
Dernière question avant la suivante : la colonne A est entièrement remplie?
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 741
Modifié par pijaku le 6/01/2012 à 17:00
Modifié par pijaku le 6/01/2012 à 17:00
Bon 16:56, ma solution.
Testée sur 35 000 lignes et l'ajout de 100 feuilles, durée 12,54 secondes...
Pour plus de lignes et plus de feuilles, prévoir plus de temps!
J'ai enlevé l'option de vérification de l'existence des feuilles. Si tu ne le fais qu'une fois par fichier, elle est inutile.
Précaution d'usage :
Travailler sur une copie de votre fichier..... Ne venez pas pleurer si vos données sont irrémédiablement perdues...
Voici le code de la macro à insérer dans un module standard :
J'oubliais... Vérifiez bien que toutes vos donénes sont encore présentes après traitement...
Possibilité également d'effacement de la feuille Feuil1, mais vérifiez vos données au préalable...
Cordialement,
Franck P
Testée sur 35 000 lignes et l'ajout de 100 feuilles, durée 12,54 secondes...
Pour plus de lignes et plus de feuilles, prévoir plus de temps!
J'ai enlevé l'option de vérification de l'existence des feuilles. Si tu ne le fais qu'une fois par fichier, elle est inutile.
Précaution d'usage :
Travailler sur une copie de votre fichier..... Ne venez pas pleurer si vos données sont irrémédiablement perdues...
Voici le code de la macro à insérer dans un module standard :
Option Explicit Option Base 1 Sub Repartition() Dim DicoConcat As Object Dim concat(), Colonns(), TablDico() Dim DrLig As Long, i As Long, j As Long, Lig As Long, Col As Long Application.ScreenUpdating = False With Sheets("Feuil1") DrLig = .Range("A" & Rows.Count).End(xlUp).Row ReDim concat(DrLig) ReDim Colonns(1 To DrLig, 1 To 6) For i = 2 To DrLig For j = 1 To 6 Colonns(i - 1, j) = .Cells(i, j) Next j concat(i - 1) = Colonns(i - 1, 5) & "_" & Colonns(i - 1, 6) Next i End With Set DicoConcat = CreateObject("Scripting.Dictionary") For i = LBound(concat) To UBound(concat) DicoConcat(concat(i)) = "" Next i If DicoConcat.Count + ThisWorkbook.Worksheets.Count >= 250 Then MsgBox "Votre classeur va dépasser les 250 feuilles. Fractionnez le au préalable." Exit Sub End If TablDico = DicoConcat.keys 'Si vous souhaitez tester si la feuille a déjà été créée 'enlevez les apostrophes en début des lignes suivantes For i = 1 To UBound(TablDico) - 1 ' If FeuilleExiste(TablDico(i)) = False Then ThisWorkbook.Worksheets.Add With ActiveSheet .Name = TablDico(i) .Range("A1") = "Fournisseur" .Range("B1") = "Ref" .Range("C1") = "Description" .Range("D1") = "Prix" .Range("E1") = "Famille" .Range("F1") = "Sous famille" For j = 1 To UBound(concat) If concat(j) = TablDico(i) Then Lig = .Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Row For Col = 1 To 6 .Cells(Lig, Col) = Colonns(j, Col) Next End If Next j End With ' Else ' With Sheets(concat) ' .Cells.Clear ' End With ' End If Next i Sheets("Feuil1").Select End Sub Function FeuilleExiste(NomFeuille) As Boolean Dim f As Object On Error Resume Next Set f = Sheets(NomFeuille) If Err = 0 Then FeuilleExiste = True Set f = Nothing End Function
J'oubliais... Vérifiez bien que toutes vos donénes sont encore présentes après traitement...
Possibilité également d'effacement de la feuille Feuil1, mais vérifiez vos données au préalable...
Cordialement,
Franck P
Je test cela rapidement et je te dis. Un grand merci de ta réponse et ton efficacité. Bon weekend à toi
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 741
6 janv. 2012 à 17:08
6 janv. 2012 à 17:08
A priori, il manque une feuille en fin de procédure... CErtainement la feuille 0 ou la feuille 101...
J'avoues ne pas comprendre dans l'immédiat.
Je me repenche dessus dès que possible. Désolé pour le contre temps.
Si un autre helper passe par ici, il est le bienvenue.
J'avoues ne pas comprendre dans l'immédiat.
Je me repenche dessus dès que possible. Désolé pour le contre temps.
Si un autre helper passe par ici, il est le bienvenue.
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 741
6 janv. 2012 à 18:13
6 janv. 2012 à 18:13
Bon ceci semble mieux fonctionner.....
Il faut remplacer la ligne :
par :
soit :
Il faut remplacer la ligne :
For i = 1 To UBound(TablDico) - 1
par :
For i = 0 To UBound(TablDico) - 1
soit :
Option Explicit Option Base 1 Sub Repartition() Dim DicoConcat As Object Dim concat(), Colonns(), TablDico() Dim DrLig As Long, i As Long, j As Long, Lig As Long, Col As Long Application.ScreenUpdating = False With Sheets("Feuil1") DrLig = .Range("A" & Rows.Count).End(xlUp).Row ReDim concat(DrLig) ReDim Colonns(1 To DrLig, 1 To 6) For i = 2 To DrLig For j = 1 To 6 Colonns(i - 1, j) = .Cells(i, j) Next j concat(i - 1) = Colonns(i - 1, 5) & "_" & Colonns(i - 1, 6) Next i End With Set DicoConcat = CreateObject("Scripting.Dictionary") For i = LBound(concat) To UBound(concat) DicoConcat(concat(i)) = "" Next i If DicoConcat.Count + ThisWorkbook.Worksheets.Count >= 250 Then MsgBox "Votre classeur va dépasser les 250 feuilles. Fractionnez le au préalable." Exit Sub End If TablDico = DicoConcat.keys 'Si vous souhaitez tester si la feuille a déjà été créée 'enlevez les apostrophes en début des lignes suivantes For i = 0 To UBound(TablDico) - 1 ' If FeuilleExiste(TablDico(i)) = False Then ThisWorkbook.Worksheets.Add With ActiveSheet .Name = TablDico(i) .Range("A1") = "Fournisseur" .Range("B1") = "Ref" .Range("C1") = "Description" .Range("D1") = "Prix" .Range("E1") = "Famille" .Range("F1") = "Sous famille" For j = 1 To UBound(concat) If concat(j) = TablDico(i) Then Lig = .Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Row For Col = 1 To 6 .Cells(Lig, Col) = Colonns(j, Col) Next End If Next j End With ' Else ' With Sheets(concat) ' .Cells.Clear ' End With ' End If Next i Sheets("Feuil1").Select End Sub Function FeuilleExiste(NomFeuille) As Boolean Dim f As Object On Error Resume Next Set f = Sheets(NomFeuille) If Err = 0 Then FeuilleExiste = True Set f = Nothing End Function
Merci, mais de mon coté cela ne fonctionne pas, il me crée quelques feuilles et c'est tout mais tu as fais un très bon boulot quand meme
Je viens de viens de faire un test. Quand je supprime les informations dans la colonne C "Description" cela fonctionne très bien. Je ne comprends pas pourquoi ca ne passe pas avec la description.
De plus je vais surement être trop gourmand, mais est il possible que le nom des feuilles soit un nom donné. Par ex la famille 1 sous famille 1 Banane, la famille 1 sous famille 2 Pomme ?
De plus je vais surement être trop gourmand, mais est il possible que le nom des feuilles soit un nom donné. Par ex la famille 1 sous famille 1 Banane, la famille 1 sous famille 2 Pomme ?
je viens de comprendre, dans la colonne C il y a des symboles = / + .... si je les enlève et laisse le texte tout se passe bien. Maintenant ou modifier dans le code pour que les symboles ne m'embêtent plus ?
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 741
Modifié par pijaku le 9/01/2012 à 08:41
Modifié par pijaku le 9/01/2012 à 08:41
Salut,
Le week end fut bon?
fais moi une liste des caractères spéciaux que tu rencontres colonne C.
Le nom des feuilles peut être modifié, mais j'ai besoin de savoir comment tu comptes faire. Tu ne connais pas à l'avance le nombre de feuilles... Dis moi, fais moi une liste également...
EDIT : peux tu me copier coller ici quelques unes des valeurs de ta colonne C qui bloquent?
Le week end fut bon?
fais moi une liste des caractères spéciaux que tu rencontres colonne C.
Le nom des feuilles peut être modifié, mais j'ai besoin de savoir comment tu comptes faire. Tu ne connais pas à l'avance le nombre de feuilles... Dis moi, fais moi une liste également...
EDIT : peux tu me copier coller ici quelques unes des valeurs de ta colonne C qui bloquent?
Bonjour,
Oui un petit weekend travail et toi ?
Je pensais pour le changement de nom créer une feuille avec :
2_1 = Pomme
2_2 = Banane....
De là lancer une macro qui va lire et remplacer.
Pour les symboles ce sont : ><-+=
Encore merci de ton aide
Oui un petit weekend travail et toi ?
Je pensais pour le changement de nom créer une feuille avec :
2_1 = Pomme
2_2 = Banane....
De là lancer une macro qui va lire et remplacer.
Pour les symboles ce sont : ><-+=
Encore merci de ton aide
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 741
9 janv. 2012 à 12:36
9 janv. 2012 à 12:36
Pour les symboles ce sont : ><-+=
Tu n'as pas de formule colonne C?
Donne moi une liste d'exemples col C de "termes" bloquants...
2_1 = Pomme
2_2 = Banane Oui, mais il faudra que 2_1 soit en fait rigoureusement identique à Famille1_ss famille1. REprends les mêmes noms de familles et sous familles, pas que des chiffres...
Tu n'as pas de formule colonne C?
Donne moi une liste d'exemples col C de "termes" bloquants...
2_1 = Pomme
2_2 = Banane Oui, mais il faudra que 2_1 soit en fait rigoureusement identique à Famille1_ss famille1. REprends les mêmes noms de familles et sous familles, pas que des chiffres...
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 741
9 janv. 2012 à 12:44
9 janv. 2012 à 12:44
Pour t'aider à créer ta liste de Famille_SousFamille, lance cette macro. Elle fais une liste en conservant les Noms et l'inscris en Feuil2 à partir de A1 :
Sub ListeFamillesSousFamilles() Dim DicoConcat As Object Dim concat() Dim DrLig As Long, i As Long, j As Long Application.ScreenUpdating = False With Sheets("Feuil1") DrLig = .Range("A" & Rows.Count).End(xlUp).Row ReDim concat(DrLig) For i = 2 To DrLig concat(i - 1) = .Cells(i, 5) & "_" & .Cells(i, 6) Next i End With Set DicoConcat = CreateObject("Scripting.Dictionary") For i = LBound(concat) To UBound(concat) DicoConcat(concat(i)) = "" Next i With Sheets("Feuil2") .Range("A1").Resize(DicoConcat.Count) = Application.Transpose(DicoConcat.keys) End With End Sub
Non aucune formule, les symboles ont été mit dans la description simplement pour la compréhension ex :
CUVE >12345678
BILLE $
FIL HUILE >a5879/2 >
Les familles et sous familles ne changerons jamais, au pire ce qu'il peut arriver c'est qu'il faille en rajouter
ex : 01_07 : Famille : Moteur Ss famille : Volant moteur et j'aimerai afficher a la place de 01_07 : Volant moteur
CUVE >12345678
BILLE $
FIL HUILE >a5879/2 >
Les familles et sous familles ne changerons jamais, au pire ce qu'il peut arriver c'est qu'il faille en rajouter
ex : 01_07 : Famille : Moteur Ss famille : Volant moteur et j'aimerai afficher a la place de 01_07 : Volant moteur
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 741
9 janv. 2012 à 12:50
9 janv. 2012 à 12:50
Pour la liste des famills / sous familles, voir mon code macro ci dessus.
Dans mon exemple fait maison, les symboles > $ = + - ne sont pas bloquants...
Dans le cas ou on changerait ces symboles, que veux tu obtenir en lieu et place de :
- CUVE >12345678
- BILLE $
- FIL HUILE >a5879/2 >
Dans mon exemple fait maison, les symboles > $ = + - ne sont pas bloquants...
Dans le cas ou on changerait ces symboles, que veux tu obtenir en lieu et place de :
- CUVE >12345678
- BILLE $
- FIL HUILE >a5879/2 >
Ok pour ton code famille sous famille donc si je comprends bien en feuille deux je mets la désignation en face mais cela va t il modifier le nom de la feuille ou pas ?
Pour les symboles le mieux c'est qu'ils restent en place, mais si pour se faciliter la tache on les enleves ce n'est pas grave
Pour les symboles le mieux c'est qu'ils restent en place, mais si pour se faciliter la tache on les enleves ce n'est pas grave
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 741
9 janv. 2012 à 13:00
9 janv. 2012 à 13:00
les symboles, je viens de tester à nouveau, ne font rien planter chez moi..... Je ne comprends donc pas.
Non le code fait juste une liste des familles ss familles. Tu places dans la colonne B le nom que tu souhaites donner aux feuilles et je te prépare un code pour renommer les feuilles.
Non le code fait juste une liste des familles ss familles. Tu places dans la colonne B le nom que tu souhaites donner aux feuilles et je te prépare un code pour renommer les feuilles.
Ok mais est il possible de mettre cela en dur une liste ? Car en faite ces macro seront utilisé par plusieurs personnes et je les voient pas rentrer a chaque fois les nom des familles sous famille
Pour moi quand je lance la macro elle se lance mais au bout de quelques secondes cela plante, si j'enleve tous les symboles cela fonctionne
Pour moi quand je lance la macro elle se lance mais au bout de quelques secondes cela plante, si j'enleve tous les symboles cela fonctionne
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 741
9 janv. 2012 à 13:12
9 janv. 2012 à 13:12
Bon ok. Alors si ça ne gène pas, on se doit d'enlever au préalable tous ces symboles. OK?
Tu ne souhaites avoir qu'une seule macro qui fait tout c'est ça?
Tu ne souhaites avoir qu'une seule macro qui fait tout c'est ça?
Ok pour les symboles.
Si tu peux tout jumelé ensemble pourquoi pas, si cela est possible
Si tu peux tout jumelé ensemble pourquoi pas, si cela est possible
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 741
Modifié par pijaku le 9/01/2012 à 13:19
Modifié par pijaku le 9/01/2012 à 13:19
A l'exécution ça risque de prendre du temps...
Je te fais ça de suite...
Par contre, ta liste en Feuil2 doit être établit avant le lancement de la macro! OK?
Je te fais ça de suite...
Par contre, ta liste en Feuil2 doit être établit avant le lancement de la macro! OK?