Excel MacroVBA : tri avec cellules fusionnées
STS
-
michel_m Messages postés 18903 Date d'inscription Statut Contributeur Dernière intervention -
michel_m Messages postés 18903 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
J'ai une feuille Excel avec des cellules fusionnées. Par exemple, la colonne A ne comporte que des cases (cellules fusionées) contenant 4 cellules, les cellules de la colonne B ne sont pas fusionnées... 1 case de la colonne A correspond donc à 4 cellules de la cellules B...
Je cherche à trier cette feuille en fonction du contenu des cases de la colonne A. Celui ci devrait etre de type chaine de caractere (pas d'heure ou date).
Je n'ai pas à effectuer de tri sur une colonne de celules non fusionnée.
Je me disais que cela devait etre un probleme fréquent et que si quelqu'un avait un bout de code sur une étagère...
Merci d'avance.
J'espere avoir été clair.
Bonne journée.
J'ai une feuille Excel avec des cellules fusionnées. Par exemple, la colonne A ne comporte que des cases (cellules fusionées) contenant 4 cellules, les cellules de la colonne B ne sont pas fusionnées... 1 case de la colonne A correspond donc à 4 cellules de la cellules B...
Je cherche à trier cette feuille en fonction du contenu des cases de la colonne A. Celui ci devrait etre de type chaine de caractere (pas d'heure ou date).
Je n'ai pas à effectuer de tri sur une colonne de celules non fusionnée.
Je me disais que cela devait etre un probleme fréquent et que si quelqu'un avait un bout de code sur une étagère...
Merci d'avance.
J'espere avoir été clair.
Bonne journée.
A voir également:
- Excel MacroVBA : tri avec cellules fusionnées
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Si ou excel - Guide
- Déplacer colonne excel - Guide
- Excel trier par ordre croissant chiffre - Guide
4 réponses
Bonsoir,
que si quelqu'un avait un bout de code sur une étagère... : bin, j'ai construit l'étagère car effectivement, ça doit être fréquent
a essayer(valable pour 2 colonnes jointives, XL<2007):
Ci joint démo
http://www.cijoint.fr/cjlink.php?file=cj200905/cijvk2FwQb.xls
mais il ya peut-^tre + simple....
que si quelqu'un avait un bout de code sur une étagère... : bin, j'ai construit l'étagère car effectivement, ça doit être fréquent
a essayer(valable pour 2 colonnes jointives, XL<2007):
Option Explicit
Const hauteur As Byte = 4 'hauteur des cellules fusionnées
Const zone As String = "A1:B21"
Sub trier_cell_fusionnées()
Dim lig As Long, nbre_lig As Long, etape As Long, col As Byte
Dim tablo_tri
Dim lig_src As Long, lig_cbl As Long
Dim cptr1 As Long, cptr2 As Long, cptr3 As Long, cptr4 As Long
Dim col_B As New Collection
Dim i, j, k As Long
Dim tmp0, tmp1
'---- INITIALISATION
col = Range(zone).Column
lig = Range(zone).Row
nbre_lig = Range(zone).Rows.Count
etape = ((nbre_lig - 1) / hauteur) - 1
ReDim tablo_tri(etape, 1)
'----- MEMORISATION des DONNEES
lig_src = lig
For cptr1 = 0 To etape
'mémorise valeur dans cellule fusionnée
tablo_tri(cptr1, 0) = Cells(lig_src, 1)
'mémorise ligne de la cellule
tablo_tri(cptr1, 1) = lig_src
lig_src = lig_src + hauteur
Next
'collecte les données dans la colonne à droite
For cptr2 = lig To nbre_lig - 1
col_B.Add Cells(cptr2, col + 1).Value
Next
'-----TRI
'trie dans l'ordre crissant valeurs et lignes dans cell fusionnées
For i = 0 To etape
j = i
For k = j + 1 To etape
If tablo_tri(k, 0) <= tablo_tri(j, 0) Then j = k
Next k
If i <> j Then
tmp0 = tablo_tri(j, 0)
tmp1 = tablo_tri(j, 1)
tablo_tri(j, 0) = tablo_tri(i, 0)
tablo_tri(j, 1) = tablo_tri(i, 1)
tablo_tri(i, 0) = tmp0
tablo_tri(i, 1) = tmp1
End If
Next i
'----- RESTITUTION
Application.ScreenUpdating = False
lig_cbl = lig
For cptr3 = 0 To etape
Cells(lig_cbl, col) = tablo_tri(cptr3, 0)
'cellule fusionnée
lig_src = tablo_tri(cptr3, 1)
For cptr4 = 0 To hauteur - 1
'cellule colonne de droite
Cells(lig_cbl + cptr4, col + 1) = col_B(lig_src + cptr4)
Next
lig_cbl = lig_cbl + hauteur
Next
'---- annulation du pointeur
Set col_B = Nothing
End Sub
Ci joint démo
http://www.cijoint.fr/cjlink.php?file=cj200905/cijvk2FwQb.xls
mais il ya peut-^tre + simple....
Histoire d'améliorer les codes sur l'étagère: ;-)
https://www.cjoint.com/?fvoGU5rg3R
on peut sélectionner plusieurs colonnes à droite de la colonne des cellules fusionnées
un formulaire (userform1) demande de sélectionner la zone (appui sur le petit carré à droite avec les points)
le nombre de lignes fusionnées par cellule est calculé (cette hauteur ou" pas",doit ^tre toujours le m^me par ex:4)
annule et remplace le doliprane précédent
https://www.cjoint.com/?fvoGU5rg3R
on peut sélectionner plusieurs colonnes à droite de la colonne des cellules fusionnées
un formulaire (userform1) demande de sélectionner la zone (appui sur le petit carré à droite avec les points)
le nombre de lignes fusionnées par cellule est calculé (cette hauteur ou" pas",doit ^tre toujours le m^me par ex:4)
annule et remplace le doliprane précédent