OVH Cloud OVH Cloud

encore un tri...!!

19 réponses
Avatar
Yvan
Bonjour à tous
J'ai un pb de tri sur 3 colonnes liées avec des groupés différents...
J'aimerais en faire une macro sans "toucher à la feuille".
Je m'explique. (les - sont des cellules vides). J'ai en
A B C
Polo - -
Marie - -
- vtt -
- - derailleur
- - cliquet
- micro -
- - pc
Ali - -
- tricycle -
- bmx -
J'aimerais avoir le tri suivant :
A B C
Ali - -
- bmx
- tricycle -
Marie - -
- micro -
- - pc
- vtt -
- - cliquet
- - derailleur
Polo - -
Est-ce quelqu'un veut bien avoir la gentillesse de m'aider.
Merci
Yvan

9 réponses

1 2
Avatar
Yvan
C'est pire, on ne voit que la première colonne...
@+
yvan
"Jean-Claude" a écrit dans le message de news:

Et en mettant
Cells(i, 4) = James & "/" & Cells(i, 2).Value & "/" & Cells(i, 3).Value

A+
Jc




Avatar
Jean-Claude
Sub essai()
Dim LgnFinal As Integer

LgnFinal = 0
For i = 1 To 3
If LgnFinal < Cells(65536, i).End(xlUp).Row Then LgnFinal = Cells(65536,
i).End(xlUp).Row
Next i
For i = 1 To LgnFinal
If Cells(i, 1) <> "" Then James = Cells(i, 1).Value: Matahari = ""
If Cells(i, 2) <> "" Then Matahari = Cells(i, 2).Value
If Cells(i, 2) = "" Then
Cells(i, 4) = James & Matahari & Cells(i, 3).Value
Else
Cells(i, 4) = James & Cells(i, 2).Value & Cells(i, 3).Value
End If
Next i
Range("A1:" & Cells(LgnFinal, 4).Address).Sort Key1:=Range("D1"),
Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range(Cells(1, 4), Cells(LgnFinal, 4)).ClearContents
End Sub
Avatar
Yvan
Salut Jean-Claude
Merci pour ton code qui marche impecc. !
Je vais essayer de me débrouiller avec.
Je vais aussi essayer de mettre tout dans un tableau (Variant)
pour ne pas avoir de colonne 4 qui s'affiche... sueur et nuit blanche en
perspective...
Encore merci
Super forum et forumers !
Yvan

"Jean-Claude" a écrit dans le message de news:
#
Sub essai()
Dim LgnFinal As Integer

LgnFinal = 0
For i = 1 To 3
If LgnFinal < Cells(65536, i).End(xlUp).Row Then LgnFinal Cells(65536,
i).End(xlUp).Row
Next i
For i = 1 To LgnFinal
If Cells(i, 1) <> "" Then James = Cells(i, 1).Value: Matahari = ""
If Cells(i, 2) <> "" Then Matahari = Cells(i, 2).Value
If Cells(i, 2) = "" Then
Cells(i, 4) = James & Matahari & Cells(i, 3).Value
Else
Cells(i, 4) = James & Cells(i, 2).Value & Cells(i, 3).Value
End If
Next i
Range("A1:" & Cells(LgnFinal, 4).Address).Sort Key1:=Range("D1"),
Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range(Cells(1, 4), Cells(LgnFinal, 4)).ClearContents
End Sub




Avatar
Jean-Claude
"Yvan" a écrit dans le message de news:

Salut Jean-Claude
Merci pour ton code qui marche impecc. !
Je vais essayer de me débrouiller avec.
Je vais aussi essayer de mettre tout dans un tableau (Variant)
pour ne pas avoir de colonne 4 qui s'affiche... sueur et nuit blanche en
perspective...


Tu peux toujours masquer la colonne 4, ni vu ni connu...
A+
Jc

Avatar
Starwing
Bravo Jean-Claude, lui il n'est pas paresseux.

Comme quoi on commence souvent par un tout petit bout de code et à la fin on
se retrouve en avoir créé un plus gros...
;0)


Starwing
Avatar
Jean-Claude
Comme quoi on commence souvent par un tout petit bout de code et à la fin
on
se retrouve en avoir créé un plus gros...
;0)


Starwing
C'est vrai que c'est vicieux ;-{)


Avatar
FxM
Bonsoir,

Ce sujet n'aurait-il point été déjà traité récemment avec une question
remarquablement similaire ?
http://www.google.fr , choisir "groupes"

@+
FxM



Bonjour à tous
J'ai un pb de tri sur 3 colonnes liées avec des groupés différents...
J'aimerais en faire une macro sans "toucher à la feuille".
Je m'explique. (les - sont des cellules vides). J'ai en
A B C
Polo - -
Marie - -
- vtt -
- - derailleur
- - cliquet
- micro -
- - pc
Ali - -
- tricycle -
- bmx -
J'aimerais avoir le tri suivant :
A B C
Ali - -
- bmx
- tricycle -
Marie - -
- micro -
- - pc
- vtt -
- - cliquet
- - derailleur
Polo - -
Est-ce quelqu'un veut bien avoir la gentillesse de m'aider.
Merci
Yvan







Avatar
Yvan
Salut,
C'était en effet moi qui avait posé la question.
Mais je voulais utiliser une macro, améliorer la vitesse et ne pas utiliser
de 4e colonne
pour concaténer les 3 premières. En fait le problème a été brillamment
résolu
par Jean-Claude (encore merci... si, si) mais pas celui de la 4e colonne.
J'avais pensé tout mettre dans une tableau (variant), faire le traitement et
recopier le tri
dans mes 3 colonnes. Ca me parait bien...voilà où j'en suis là.
Je me teste sur les" Redim", et les boucles...
mais j'y arriverais.
Merci FxM
à+
yvan

"FxM" a écrit dans le message de news:
#
Bonsoir,

Ce sujet n'aurait-il point été déjà traité récemment avec une question
remarquablement similaire ?
http://www.google.fr , choisir "groupes"

@+
FxM



Bonjour à tous
J'ai un pb de tri sur 3 colonnes liées avec des groupés différents...
J'aimerais en faire une macro sans "toucher à la feuille".
Je m'explique. (les - sont des cellules vides). J'ai en
A B C
Polo - -
Marie - -
- vtt -
- - derailleur
- - cliquet
- micro -
- - pc
Ali - -
- tricycle -
- bmx -
J'aimerais avoir le tri suivant :
A B C
Ali - -
- bmx
- tricycle -
Marie - -
- micro -
- - pc
- vtt -
- - cliquet
- - derailleur
Polo - -
Est-ce quelqu'un veut bien avoir la gentillesse de m'aider.
Merci
Yvan









Avatar
FxM
Bonsoir,

Testé à partir de ton exemple sur Excel 2000.
Sélectionne toutes les cellules qui doivent être triées puis lance la
macro suivante :

Sub test()
cols = Selection.Columns.Count
ligs = Selection.Rows.Count
Dim zz: zz = Selection
Dim yy: ReDim yy(ligs, cols)

For col = 1 To cols
For lig = 1 To ligs
yy(lig, col) = zz(lig, col)
Next lig
Next col

For lig = 2 To ligs
For col = 1 To cols
If IsEmpty(yy(lig, col)) Then
yy(lig, col) = yy(lig - 1, col)
Else
Exit For
End If
Next col
Next lig

For lig = 1 To ligs
texte = ""
For col = 1 To cols
texte = texte & yy(lig, col)
Next col
yy(lig, 0) = texte
Next lig

For liga = 1 To ligs - 1
For ligb = liga + 1 To ligs
If yy(liga, 0) > yy(ligb, 0) Then
For col = 0 To cols
yy(0, col) = yy(liga, col)
yy(liga, col) = yy(ligb, col)
yy(ligb, col) = yy(0, col)
yy(0, col) = ""
Next col
End If
Next ligb
Next liga

For lig = 1 To ligs
If yy(lig, 1) <> "" And yy(lig, 2) <> "" And yy(lig, 3) <> "" Then
yy(lig, 1) = ""
yy(lig, 2) = ""
End If
If yy(lig, 1) <> "" And yy(lig, 2) <> "" Then
yy(lig, 1) = ""
End If
Next lig

For col = 1 To cols
For lig = 1 To ligs
zz(lig, col) = yy(lig, col)
Next lig
Next col
Selection = zz
End Sub

@+
FxM




Salut,
C'était en effet moi qui avait posé la question.
Mais je voulais utiliser une macro, améliorer la vitesse et ne pas utiliser
de 4e colonne
pour concaténer les 3 premières. En fait le problème a été brillamment
résolu
par Jean-Claude (encore merci... si, si) mais pas celui de la 4e colonne.
J'avais pensé tout mettre dans une tableau (variant), faire le traitement et
recopier le tri
dans mes 3 colonnes. Ca me parait bien...voilà où j'en suis là.
Je me teste sur les" Redim", et les boucles...
mais j'y arriverais.
Merci FxM
à+
yvan

"FxM" a écrit dans le message de news:
#

Bonsoir,

Ce sujet n'aurait-il point été déjà traité récemment avec une question
remarquablement similaire ?
http://www.google.fr , choisir "groupes"

@+
FxM




Bonjour à tous
J'ai un pb de tri sur 3 colonnes liées avec des groupés différents...
J'aimerais en faire une macro sans "toucher à la feuille".
Je m'explique. (les - sont des cellules vides). J'ai en
A B C
Polo - -
Marie - -
- vtt -
- - derailleur
- - cliquet
- micro -
- - pc
Ali - -
- tricycle -
- bmx -
J'aimerais avoir le tri suivant :
A B C
Ali - -
- bmx
- tricycle -
Marie - -
- micro -
- - pc
- vtt -
- - cliquet
- - derailleur
Polo - -
Est-ce quelqu'un veut bien avoir la gentillesse de m'aider.
Merci
Yvan














1 2