Macro tri de donnes
Bonjour
Je souhaiterai créer une macro VBA qui me permettrait de tier mes données comme dans le fichier joints (tableau G1:H8).
Je ne sais pas vraiment comment m'y prendre car il faut faire un tri en fonction de données dans la colonne "acces" B1. Ceci-dit mes données sont séparer par un espace je ne sais comment le traiter pour le tri et mon but et vraiment de travailler directement avec ce tableau.
Le but on par du tableau A1:B12 pour trier les donner comme dans le tableau G1:H8.
Sachant que le tableau A1:B12 n'a pas de limite en terme de ligne doit aller jusqu'a l'infini, dans le fichier joint ce tableau est juste un exemple mais ce tableau peut etre beaucoup plus grand.
De plus le tableau trié G1:G8 final doit etre trié de facon croissante.
Je ne sais pas si cela est trés claire... J'espère que quelqu'un pourras m'aider.
Merci d'avance.
Salut,
Avec la macro en place dans le fichier ci-joint, le tri se fait presque selon tes désirs. L'ordre final des données dans la colonne H n'est pas absolument identique à ton exemple, mais je n'ai pas cherché plus loin avant de savoir si c'est important ou non.
A chaque fois que tu lances la macro, les données en place dans la plage G2:H.... sont effacées afin d'être remplacées par les nouvelles données.
Cordialement.
Rebonjour,
Merci beaucoup pour votre aide!
la macro fait bien ce que je souhaite ceci-dit j'aimerai savoir si il est possible de rajouter une condition. En effet, dans la colonne ACCESS, il peut y avoir bien plus que un ou deux numéro a trié. J'aimerai savoir si il est possible d'étandre la macro pour qu'elle tri plus de données d'une meme cellule. Je vous renvoie le fichier j'ai rajouté en rouge ce qui devrait aussi etre trié pour que vous comprenniez mieux le problème.
Noter que ce que j'ai rajouter en rouge est pour illutrer,mais les données trié doivent toujours etre par ordre croissant du début à la fin de la colonne G.
(comme jusqu'a présent croissante)
Je n'ai pas toucher a votre macro.
Merci d'avance.
Bonjour le fil, bonjour le forum,
Une autre proposition. Le résultat n'est pas identique au tiens mais je pense que tu t'es planté...
code supprimé[Édition]
Heu désolé j'avais mal lu le problème. Cette macro ne convient pas du tout...
En passant, salut Thau Thème
@ riri
Pour traiter ton fichier, j'avais considéré qu'il pouvait y avoir 3 groupes de données :
Les données A avec 6 caractères appondus (visibles à l'écran avec un séparateur des milliers à cause de la mise en forme de la cellule)
Les données B avec deux groupes de caractères séparés par un espace (9 caractères au total, y compris les espaces)
Les données C, soit toutes les autres données.
A lire tes nouvelles instructions, je tente à dire que je pourrais considérer une sorte de données pratiquement identiques à celles de B mais avec la nouvelle définition ci-dessous :
Données comportant plus de 7 caractères y compris les espaces et comportant au minimum un espace.
Ainsi 800 801 / 163BB 744 / 521AB 521CB / 800 801 802 885AR 225BB / 521AB 521CB 521EB 522AB 522CB 522FB 522KB 522LB 522NB 522QB 522SB 522UB / etc. entreraient dans ce groupe.
Cette manière de faire couvrirait bien tous tes cas ????
Bonjour,
Les nombres dans la colonne B "ACCESS " sont a dinstinguer sont différents lorsqu'il y a un espace.Les access peuvent également démarrer par une lettre et il peut y en avoir beaucoup sur la meme ligne.
DANS LA COLONNE B / les acces sont séparer par des espaces .
je ne sais pas si j'ai répondu a votre question. Merci d'avance en tout cas
re,
Sub Tri2()
Dim myKey
a = Sheets("feuil1").Range("A1").CurrentRegion.Value
Set dict = CreateObject("scripting.dictionary")
For i = 2 To UBound(a) 'boucle les lignes
sp = Split(a(i, 2))
For j = 0 To UBound(sp) 'boucles les éléments
If IsNumeric(sp(j)) Then myKey = CDbl(sp(j)) Else myKey = sp(j)
If Not dict.exists(myKey) Then dict(myKey) = Array(myKey, "")
it = dict(myKey)
it(1) = it(1) & IIf(Len(it(1)), vbLf, "") & a(i, 1)
dict(myKey) = it
Next
Next
ptr = dict.Count
If ptr = 1 Then dict("&&&&") = dict.items()(0)
a = Application.Index(dict.items, 0, 0)
With Range("J2")
.Resize(1000, 2).ClearContents
If ptr >= 1 Then
With .Resize(ptr, 2)
.Value = a
.Sort .Range("A1"), Header:=xlNo
.EntireColumn.AutoFit
.EntireRow.AutoFit
End With
End If
End With
End Sub
EDIT : type erreur, j'ai ajouté un point en face de resize : With .resize(ptr,2)
Bonjour,
Je ne sais pas pourquoi lorsque j'essaye de faire tourner la derniere macro Sub Tri2() , elle ne marche pas. Pourtant j'ai essayé avec et sans Option explicit mais cela ne fonctionne pas...
De meme pour les variable i , a il faudras les définir ou la macro marche comme ca ?
Merci d'avance pour votre réponse.
bonjour,
il manque un point en face de "resize", c'est
with .resize(ptr,2)