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

Résolu/Fermé
GermPeru Messages postés 172 Date d'inscription mercredi 7 décembre 2016 Statut Membre Dernière intervention 27 mars 2018 - Modifié le 13 nov. 2017 à 18:46
yg_be Messages postés 22719 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 - 14 nov. 2017 à 17:40
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

2 réponses

yg_be Messages postés 22719 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
13 nov. 2017 à 19:26
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 mercredi 7 décembre 2016 Statut Membre Dernière intervention 27 mars 2018
13 nov. 2017 à 20:07
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 22719 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476 > GermPeru Messages postés 172 Date d'inscription mercredi 7 décembre 2016 Statut Membre Dernière intervention 27 mars 2018
13 nov. 2017 à 20:32
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 mercredi 7 décembre 2016 Statut Membre Dernière intervention 27 mars 2018 > yg_be Messages postés 22719 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024
13 nov. 2017 à 20:43
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 mercredi 7 décembre 2016 Statut Membre Dernière intervention 27 mars 2018
13 nov. 2017 à 20:49
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 mercredi 7 décembre 2016 Statut Membre Dernière intervention 27 mars 2018
13 nov. 2017 à 21:07
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 22719 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
13 nov. 2017 à 22:16
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 mercredi 7 décembre 2016 Statut Membre Dernière intervention 27 mars 2018
13 nov. 2017 à 22:27
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 mercredi 7 décembre 2016 Statut Membre Dernière intervention 27 mars 2018
13 nov. 2017 à 23:25
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 mercredi 7 décembre 2016 Statut Membre Dernière intervention 27 mars 2018
14 nov. 2017 à 15:08
 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 22719 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476 > GermPeru Messages postés 172 Date d'inscription mercredi 7 décembre 2016 Statut Membre Dernière intervention 27 mars 2018
14 nov. 2017 à 17:40
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