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
Bonjour,

J'aurais besoin d'un enorme coup de main (encore une fois ;-) )

voilà ce que j'ai comme fichier excel (juste un morceau j'ai partiquement 2000 lignes)
A B C D E F
DKT03425 Tropical Aquarium ScreenSaver
DKT03425 Symantec Ghost
DKT03429 Spelling Dictionaries Support For Adobe Reader 8
DKT03441 Pixia 3.3b
DKT03441 VideoLAN VLC media player 0.8.6a
DKT03442 RealPlayer
DKT03442 Google Earth
DKT03442 Google Toolbar for Internet Explorer
DKT03442 Outil de mise à jour Google
DKT03443 Zuma Deluxe
DKT03443 Google Earth
DKT03443 Google Toolbar for Internet Explorer
DKT03443 Mozilla Thunderbird (1.5)
DKT03443 Outil de mise à jour Google
DKT03446 Picasa 2
DKT03446 VideoLAN VLC media player 0.8.5
DKT03446 VIS
DKT03446 XnView 1.91.3
DKT03446 Ad-Aware SE Personal
DKT03448 Malwarebytes'' Anti-Malware
DKT03448 ScanSoft PDF Converter 2.0
DKT03448 ScanSoft PDF Create 2.0
DKT03448 TreeSize Professional 4.3.2


J'ai besoin de ce résultat
A C d
DKT03425 Tropical Aquarium ScreenSaver Symantec Ghost
DKT03429 Spelling Dictionaries Support For Adobe Reader 8
DKT03441 Pixia 3.3b VideoLAN VLC media player 0.8.6a
DKT03442 RealPlayer Google Earth Google Toolbar for Internet Explorer Outil de mise à jour Google
DKT03443 Zuma Deluxe Google Earth Google Toolbar for Internet Explorer Mozilla Thunderbird (1.5) Outil de mise à jour Google
DKT03446 Picasa 2 VideoLAN VLC media player 0.8.5 VIS XnView 1.91.3 Ad-Aware SE Personal
DKT03448 Malwarebytes'' Anti-Malware ScanSoft PDF Converter 2.0 ScanSoft PDF Create 2.0 TreeSize Professional 4.3.2


EN RESUME :
Avoir une seule ligne de la valeur dans A

Par exemple pour
A B
1\ DKT03425 Tropical Aquarium ScreenSaver
2\ DKT03425 Symantec Ghost

J’ai besoin de
A B C
1\ DKT03425 Tropical Aquarium ScreenSaver Symantec Ghost

Donc en gros un collage transpose et supprimer donc les lignes vides
Info : il peut y avoir 1 seul logiciel (çà je sais faire un collage spécial transpose) ou plusieurs logiciels et là je ne sais pas comment supprimer les lignes vides. Et deplus comme j’ai 2000 lignes j’aimerai automatiser le tout


Merci

Si vous avez besoin du fichier n’hésiter pas

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
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.
0
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 ;-)
0
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
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:

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)
0
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
0

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
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)
0
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
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.
0
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
La solution VB de polux fonctionne ainsi que celle de leplot et Raymond .....j'attque la phase suivante...
0