Tri de données ni ordre croissant, ni ordre decroissant...

Résolu
GermPeru Messages postés 172 Date d'inscription   Statut Membre Dernière intervention   -  
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

J´ai des tables qui me permettent de construire des graphiques de facon dynamique sur Excel grace a VBA.

Maintenant je voudrais construire d´autre tables et ordonnées les valeures selon leur categorie, valeur de 1 a 4, mais dans lórdre 2-3-1-4...

J´ai bien essayé de bidouiller des trucs... mais rien de concluant, un peiti coup de main serait le bien venu,

Merci d´avance
A voir également:

2 réponses

yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 
bonsoir, moi je ferais ainsi: écrire une petite fonction VBA qui retourne 3, 1, 2, 4 quand la valeur en entrée est 1, 2, 3 ou 4.
puis utiliser cette fonction, par exemple dans une colonne supplémentaire, et ensuite utiliser cette colonne comme source de tri.
exemple:
Function gptri(nb As Integer) As Integer
'retourne 3, 1, 2, 4 quand la valeur en entrée est 1, 2, 3 ou 4
Select Case nb
    Case 1
        gptri = 3
    Case 2
        gptri = 1
    Case 3
        gptri = 2
    Case 4
        gptri = 4
    Case Else
        gptri = 99
End Select
End Function
1
GermPeru Messages postés 172 Date d'inscription   Statut Membre Dernière intervention  
 
Bonsoir yg_be,

Je n´ai pas trop saisi ta réponse, c´est pas la premiere fois tu me diras....

J´ai un premier tableau avec n lignes et dans ma 3 ieme colone j´ai la valeure 1,2,3 ou 4.

Je souhaite contruire un autre tableau a partir de ce premier tableau et que les valeur soit ordonnées de la facon suivante: 2-3-1-4.

Je ne saisi pas comment faire ma boucle sur mes n lignes de mon premier tableau et construire mon segond.

Merci d´avance de ta réponse
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > GermPeru Messages postés 172 Date d'inscription   Statut Membre Dernière intervention  
 
eh bien, je propose de mettre dans la quatrième colonne une formule telle que =gptri(C1), après avoir enregistré le code VBA dans une module du fichier.
et ensuite de trier sur la quatrième colonne.
si tu partages ton fichier ou donnes plus d'infos, la suggestion sera peut-être différente.
0
GermPeru Messages postés 172 Date d'inscription   Statut Membre Dernière intervention   > yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention  
 
Ok,

exemple mon tableau 1:
ligne 1- colone 3: 4
ligne 2- colone 3: 3
ligne 3- colone 3: 2
ligne 4- colone 3: 1

Et en vba je souhaite construire mon tableau 2 avec les lignes rangées en fonction de la valeur de ma colonne 3, par vba et non le faire manuelement.

tableau 2:
ligne 1- colone x: 2
ligne 2- colone x: 3
ligne 3- colone x: 1
ligne 4- colone x: 4

dsl si j´ai mal compris ta réponse.

Merci yg_be
0
GermPeru Messages postés 172 Date d'inscription   Statut Membre Dernière intervention  
 
Ps: partager le fichier ne vaut pas trop le coup car je fais des requetes au serveur pour construire mes graphiques, je vais essayer de faire un fichier avec des données factices pour exemple. Donne moi 15 min.

Merci
0
GermPeru Messages postés 172 Date d'inscription   Statut Membre Dernière intervention  
 
https://www.cjoint.com/c/GKnugbT08B8

en feuille 1 mon tablea et en feuille 2 le résultat que je souhaite obtenir, cela me parrait pas si compliqué mais je n´y suis pas arrivé...
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 
je voulais voir le code "construire un autre tableau a partir de ce premier tableau", pour pouvoir l'adapter avec le tri.
0
GermPeru Messages postés 172 Date d'inscription   Statut Membre Dernière intervention  
 
Dsl,

Je n´ai pas encore fait ma boucle pcq je ne sais pas comment procéder au tri...enfin une boucle ou j´efface les valeurs de mes tables mais pas d´importation de mes données...

 For Bi = 0 To UBound(V)
        Set Wsh = ThisWorkbook.Worksheets(V(Bi))
        Set Wsi = ThisWorkbook.Worksheets(V2(Bi))
        With Wsh
            If V2(Bi) = "MC GG" Then
            If .Range("A2") <> "" Then Range("TMCGG").EntireRow.Delete
'code de ma feuille V(Bi) a ma feuille V2(Bi)
            ElseIf V2(Bi) = "MC GM" Then
            If .Range("A2") <> "" Then Range("TMCGM").EntireRow.Delete
            ElseIf V2(Bi) = "MC MG" Then
            If .Range("A2") <> "" Then Range("TMCGP").EntireRow.Delete
            ElseIf V2(Bi) = "MC MG" Then
            If .Range("A2") <> "" Then Range("TMCMG").EntireRow.Delete
            ElseIf V2(Bi) = "MC MM" Then
            If .Range("A2") <> "" Then Range("TMCMM").EntireRow.Delete
            ElseIf V2(Bi) = "MC Otros" Then
            If .Range("A2") <> "" Then Range("TMCO").EntireRow.Delete
            ElseIf V2(Bi) = "MC Beta" Then
            If .Range("A2") <> "" Then Range("TMCBeta").EntireRow.Delete
            End If
        End With
    Next Bi
0
GermPeru Messages postés 172 Date d'inscription   Statut Membre Dernière intervention  
 
Je ne demande pas un code tout fait mais je solicite des pistes de recherches... pcq je galere depuis un petit moment maintenant....

Merci yg_be
0
GermPeru Messages postés 172 Date d'inscription   Statut Membre Dernière intervention  
 
 With Wsh
NbLi = Application.WorksheetFunction.CountA(.Range("A:A")): ReDim DatosTemp(3, NbLi): j = 1
For Ligne = 1 To 4
For i = 2 To NbLi
If .Range("F" & i).Value = 2 And Ligne = 1 Then
DatosTemp(1, j) = .Range("D" & i).Value
DatosTemp(2, j) = .Range("E" & i).Value
DatosTemp(3, j) = .Range("F" & i).Value
j = j + 1
ElseIf .Range("F" & i).Value = 3 And Ligne = 2 Then
DatosTemp(1, j) = .Range("D" & i).Value
DatosTemp(2, j) = .Range("E" & i).Value
DatosTemp(3, j) = .Range("F" & i).Value
j = j + 1
ElseIf .Range("F" & i).Value = 1 And Ligne = 3 Then
DatosTemp(1, j) = .Range("D" & i).Value
DatosTemp(2, j) = .Range("E" & i).Value
DatosTemp(3, j) = .Range("F" & i).Value
j = j + 1
ElseIf .Range("F" & i).Value = 4 And Ligne = 4 Then
DatosTemp(1, j) = .Range("D" & i).Value
DatosTemp(2, j) = .Range("E" & i).Value
DatosTemp(3, j) = .Range("F" & i).Value
j = j + 1
End If
Next i
Next Ligne
ReDim Datos(1 To j - 1, 1 To 3)
For iLi = 1 To j - 1
For iCol = 1 To 3
Datos(iLi, iCol) = DatosTemp(iCol, iLi)
Next iCol
Next iLi
End With


3 boucles, table temporaire, 2 variants, et 4 conditions ca le fait... Mais pcq j´ai que 4 valeur de catégories a ranger, si j´avais eu plus ceci ne conviendrait pas.

Je reste attentif a tout commentaire qui pourrait m´aider a progresser. Merci d´avance
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > GermPeru Messages postés 172 Date d'inscription   Statut Membre Dernière intervention  
 
bonjour,
moi je ferais plus simple:
1) je mettrais dans le tableau de destination toutes les données, avec une colonne en plus que je remplirais avec la fonction gptri.
2) je trierais le tableau en fonction de la dernière colonne
3) je supprimerais la dernière colonne
0