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 -
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
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:
- Trier une liste par ordre croissant python sans sort
- Excel trier par ordre croissant chiffre - Guide
- Liste déroulante excel - Guide
- Citizen code python avis - Accueil - Outils
- Liste déroulante en cascade - Guide
- Liste code ascii - Guide
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:
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
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.
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...
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
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
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
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.
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
Merci
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é...