Trier un fichier excel
Résolu/Fermé
pierreh59
Messages postés
227
Date d'inscription
jeudi 28 août 2008
Statut
Membre
Dernière intervention
21 mai 2011
-
16 avril 2009 à 22:03
pierreh59 Messages postés 227 Date d'inscription jeudi 28 août 2008 Statut Membre Dernière intervention 21 mai 2011 - 17 avril 2009 à 10:58
pierreh59 Messages postés 227 Date d'inscription jeudi 28 août 2008 Statut Membre Dernière intervention 21 mai 2011 - 17 avril 2009 à 10:58
A voir également:
- Trier un fichier excel
- Fichier rar - Guide
- Excel trier par ordre croissant chiffre - Guide
- Comment ouvrir un fichier epub ? - Guide
- Comment réduire la taille d'un fichier - Guide
- Liste déroulante excel - Guide
7 réponses
Raymond PENTIER
Messages postés
58731
Date d'inscription
lundi 13 août 2007
Statut
Contributeur
Dernière intervention
23 novembre 2024
17 243
16 avril 2009 à 22:43
16 avril 2009 à 22:43
Salut.
C'est une bonne macro qui pourra répondre élégamment à ta demande.
Mais, juste pour le fun, voici une démarche sans VBA :
- à partir des colonnes A et B, je fabrique une colonne C pour concaténer les valeurs liés à un même code, et une colonne D pour effacer les données superflues.
- il faut ensuite sélectionner D:D et faire un copier-coller spécial "valeurs seulement"
- on peut alors faire un tri et supprimer les lignes où rien ne s'affiche en colonne D:D.
C'est une bonne macro qui pourra répondre élégamment à ta demande.
Mais, juste pour le fun, voici une démarche sans VBA :
- à partir des colonnes A et B, je fabrique une colonne C pour concaténer les valeurs liés à un même code, et une colonne D pour effacer les données superflues.
- il faut ensuite sélectionner D:D et faire un copier-coller spécial "valeurs seulement"
- on peut alors faire un tri et supprimer les lignes où rien ne s'affiche en colonne D:D.
Merci Raymond là ou sent bon le semble chaud !
Mais je suis tellement une bille (je crois que je vais prendre des cours un de ces jours)
Que c'est du charabia pour moi......................il me faut une solution ecrite de A à Z...................et oui je suis une bille ;-)
Mais je suis tellement une bille (je crois que je vais prendre des cours un de ces jours)
Que c'est du charabia pour moi......................il me faut une solution ecrite de A à Z...................et oui je suis une bille ;-)
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
17 avril 2009 à 09:25
17 avril 2009 à 09:25
Bonjour,
Voilà une solution en VBA, pas forcément élégante.
Je propose de regrouper les données dans une structure en mémoire, ensuite d'effacer le contenu de la feuille pour ensuite réécrire les données de la structure dans la feuille:
Il faut copier/coller le code dans un module de l'éditeur VB et ensuite d'affecter un raccourci clavier à la procédure MainTri().
;o)
Voilà une solution en VBA, pas forcément élégante.
Je propose de regrouper les données dans une structure en mémoire, ensuite d'effacer le contenu de la feuille pour ensuite réécrire les données de la structure dans la feuille:
Option Explicit 'Structure qui regroupe les données de la feuille Private Type StructmyTab tA As String 'Pour la colonne A tB As String 'Pour la colonne B End Type Private myTab() As StructmyTab Private index As Long Private ws As Worksheet Sub MainTri() ReDim myTab(index) 'Initialisation de la structure initTab 'lancement de la procédure initTab triFeuille 'lancement de la procédure d'écriture dans la feuille End Sub Private Sub initTab() Dim lig As Long 'variable compteur de ligne 'On déclare un objet Worksheet Set ws = Worksheets(1) 'ou Set ws = Worksheets("NomDeMaFeuille") ' lig = 2 'numéro de la première ligne testée ' With ws 'On teste tant que la cellule n'est pas vide While .Range("A" & lig).Value <> "" 'On vérifie si la valeur existe dans le tableau If doesExist(lig, .Range("A" & lig).Value) = False Then 'Si le retour est FAUX 'On alloue de la mémoire au tableau myTab ReDim Preserve myTab(index) 'on affecte la valeur au tableau myTab(index).tA = .Range("A" & lig).Value myTab(index).tB = .Range("B" & lig).Value 'on ajoute 1 à l'index du tableau index = index + 1 Else lig = lig - 1 End If 'On passe à la ligne suivante lig = lig + 1 Wend End With End Sub Private Sub triFeuille() Dim i As Long 'variable index de boucle Dim lig As Long 'variable compteur de ligne lig = 2 'numéro de la première ligne testée ' With ws 'On efface le contenu de la feuille à partir de A2 à F65536 .Range("A2:F65536").Select Selection.Delete 'On parcours chaque occurrences du tableau For i = LBound(myTab()) To UBound(myTab()) 'On réécrit dans la feuille les données du tableau .Range("A" & i + 2).Value = myTab(i).tA .Range("B" & i + 2).Value = myTab(i).tB Next i End With End Sub Private Function doesExist(ByVal ligne As Long, ByVal ind As String) As Boolean Dim i As Long 'variable index de boucle 'On parcours chaque occurrences du tableau For i = LBound(myTab()) To UBound(myTab()) If myTab(i).tA = ind Then 'Si c'est égal doesExist = True 'On retourne VRAI 'on ajoute au tableau la valeur de la colonne B myTab(i).tB = myTab(i).tB & " " & ws.Range("B" & ligne).Value 'On supprime la ligne Rows(ligne).Delete Exit Function 'On sort de la function End If Next i doesExist = False End Function
Il faut copier/coller le code dans un module de l'éditeur VB et ensuite d'affecter un raccourci clavier à la procédure MainTri().
;o)
Merci POlux cela fonctionne....
Par contre tous les logiciels arrivent dans la colonne B
Est il possible de mettre le 1er logiciel dans la colonne B, le deuxieme dans la colonne C, le troisieme dans la colonne D ...etc...
Merci encore
Par contre tous les logiciels arrivent dans la colonne B
Est il possible de mettre le 1er logiciel dans la colonne B, le deuxieme dans la colonne C, le troisieme dans la colonne D ...etc...
Merci encore
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
17 avril 2009 à 10:16
17 avril 2009 à 10:16
Oui c'est possible, j'ai juste besoin de savoir si, sur l'original, il n'y a qu'un logiciel par ligne, c'est à dire pour reprendre ton exemple que:
- dans la colonne A, ligne x, on a : DKT03425 et dans la colonne B, ligne x on a : Tropical Aquarium ScreenSaver et rien dans les colonnes suivantes.
- dans la colonne A, ligne x + n, on a : DKT03425 et dans la colonne B, ligne x + n on a : Symantec Ghost et rien dans les colonnes suivantes.
;o)
- dans la colonne A, ligne x, on a : DKT03425 et dans la colonne B, ligne x on a : Tropical Aquarium ScreenSaver et rien dans les colonnes suivantes.
- dans la colonne A, ligne x + n, on a : DKT03425 et dans la colonne B, ligne x + n on a : Symantec Ghost et rien dans les colonnes suivantes.
;o)
leplot
Messages postés
191
Date d'inscription
lundi 1 décembre 2008
Statut
Membre
Dernière intervention
13 août 2015
131
17 avril 2009 à 10:31
17 avril 2009 à 10:31
Bonjour,
je reprends l'idée de Raymond sans VBA
http://www.cijoint.fr/cjlink.php?file=cj200904/cijsEFAWUa.xls
Dans le fichier, les colonnes en jaunes peuvent être copiées vars la droite en fonction du nombre de colonnes possibles.
Il faut ensuite faire un copier valeur et filtrer sur les lignes notées "Dernier"
Ou filtrer d'abord sur dernier puis copier les lignes visibles et les coller ailleurs.
je reprends l'idée de Raymond sans VBA
http://www.cijoint.fr/cjlink.php?file=cj200904/cijsEFAWUa.xls
Dans le fichier, les colonnes en jaunes peuvent être copiées vars la droite en fonction du nombre de colonnes possibles.
Il faut ensuite faire un copier valeur et filtrer sur les lignes notées "Dernier"
Ou filtrer d'abord sur dernier puis copier les lignes visibles et les coller ailleurs.
pierreh59
Messages postés
227
Date d'inscription
jeudi 28 août 2008
Statut
Membre
Dernière intervention
21 mai 2011
27
17 avril 2009 à 10:58
17 avril 2009 à 10:58
La solution VB de polux fonctionne ainsi que celle de leplot et Raymond .....j'attque la phase suivante...