Macro excel VBA pour tri complexe
Résolu/Fermé
gillessimon
Messages postés
9
Date d'inscription
lundi 10 mars 2008
Statut
Membre
Dernière intervention
8 décembre 2012
-
10 mars 2008 à 14:29
gillessimon Messages postés 9 Date d'inscription lundi 10 mars 2008 Statut Membre Dernière intervention 8 décembre 2012 - 11 mars 2008 à 15:06
gillessimon Messages postés 9 Date d'inscription lundi 10 mars 2008 Statut Membre Dernière intervention 8 décembre 2012 - 11 mars 2008 à 15:06
A voir également:
- Macro excel VBA pour tri complexe
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Liste déroulante excel - Guide
- Trier sur excel - Guide
- Formule excel pour additionner plusieurs cellules - Guide
- Si et excel - Guide
7 réponses
LatelyGeek
Messages postés
1758
Date d'inscription
vendredi 4 janvier 2008
Statut
Membre
Dernière intervention
5 janvier 2023
550
10 mars 2008 à 15:38
10 mars 2008 à 15:38
Déjà, le bonjour d'une cavalière (Moi, c'est une gestion de complet avec Access que j'ai mise en place...)
Je procèderais comme suit.
D'abord, concaténer tes valeurs:
En colonne D :
=B2 & C2
pour obtenir CC5a
Les concaténer tant que le numéro de concours ne change pas:
=SI(A3=A2;D2 &" "& B3 & C3;B3 & C3)
Marquer dans la colonne E le changement de numéro:
=SI(A3=A4;"";"Fin")
Les formules des colonnes D et E recopiées sur toutes les lignes concernées
Et ensuite, filtrer ta liste sur la colonne E...
200801055 CC 4-------CC4
200801055 CC 5a------CC4 CC5a
200801055 CC 5b------CC4 CC5a CC5b
200801055 CL CL1----CC4 CC5a CC5b CLCL1-----Fin
200802015 CL CL1----CLCL1
200802015 CC 4-------CLCL1 CC4
200802015 CL CL2----CLCL1 CC4 CLCL2
200802015 CC 5-------CLCL1 CC4 CLCL2 CC5-----Fin
Eventuellement tu peux automatiser ça par une macro si tu dois le faire souvent, sinon tu crées une feuille modèle avec ces formules, dans lesquelles tu colles les données du mois...
Je procèderais comme suit.
D'abord, concaténer tes valeurs:
En colonne D :
=B2 & C2
pour obtenir CC5a
Les concaténer tant que le numéro de concours ne change pas:
=SI(A3=A2;D2 &" "& B3 & C3;B3 & C3)
Marquer dans la colonne E le changement de numéro:
=SI(A3=A4;"";"Fin")
Les formules des colonnes D et E recopiées sur toutes les lignes concernées
Et ensuite, filtrer ta liste sur la colonne E...
200801055 CC 4-------CC4
200801055 CC 5a------CC4 CC5a
200801055 CC 5b------CC4 CC5a CC5b
200801055 CL CL1----CC4 CC5a CC5b CLCL1-----Fin
200802015 CL CL1----CLCL1
200802015 CC 4-------CLCL1 CC4
200802015 CL CL2----CLCL1 CC4 CLCL2
200802015 CC 5-------CLCL1 CC4 CLCL2 CC5-----Fin
Eventuellement tu peux automatiser ça par une macro si tu dois le faire souvent, sinon tu crées une feuille modèle avec ces formules, dans lesquelles tu colles les données du mois...
gillessimon
Messages postés
9
Date d'inscription
lundi 10 mars 2008
Statut
Membre
Dernière intervention
8 décembre 2012
10 mars 2008 à 17:44
10 mars 2008 à 17:44
Merci pour cette brillante idée mais il me faut impérativement une ligne par numéro de concours.
Je dois donc obtenir:
200801055 CC4 CC5a CC5b CLCL1 (200801055 en colA, CC4 CC5a CC5b CLCL1 en colE)
200802015 CLCL1 CC4 CLCL2 CC5
et cela par macro, mais là je ne sais pas faire....c'est là ou le bas blesse.
Merci tout de même à la cavalière de complet !!!
Gilles.
Je dois donc obtenir:
200801055 CC4 CC5a CC5b CLCL1 (200801055 en colA, CC4 CC5a CC5b CLCL1 en colE)
200802015 CLCL1 CC4 CLCL2 CC5
et cela par macro, mais là je ne sais pas faire....c'est là ou le bas blesse.
Merci tout de même à la cavalière de complet !!!
Gilles.
LatelyGeek
Messages postés
1758
Date d'inscription
vendredi 4 janvier 2008
Statut
Membre
Dernière intervention
5 janvier 2023
550
10 mars 2008 à 21:50
10 mars 2008 à 21:50
Oui, mais c'est juste la suite logique. Une fois que tu as fait ça, tu écris la macro suivante:
Range("A1").Select
Selection.CurrentRegion.Select
Selection.AutoFilter
Selection.AutoFilter Field:=5, Criteria1:="Fin"
Selection.Copy
Sheets("NomDeLaFeuilleDeDestination").Select
Range("A1").Select
ActiveSheet.Paste
Je détaille:
On envoie la sélection en A1
On sélectionne toutes les données - Quelqu'en soit le nombre
On applique le filtre
On filtre sur colonne E = "Fin", donc ligne de concours entière
On sélectionne tout
On copie
On colle en A1 dans une autre feiulle.
Ca ne fait pas l'affaire?
Range("A1").Select
Selection.CurrentRegion.Select
Selection.AutoFilter
Selection.AutoFilter Field:=5, Criteria1:="Fin"
Selection.Copy
Sheets("NomDeLaFeuilleDeDestination").Select
Range("A1").Select
ActiveSheet.Paste
Je détaille:
On envoie la sélection en A1
On sélectionne toutes les données - Quelqu'en soit le nombre
On applique le filtre
On filtre sur colonne E = "Fin", donc ligne de concours entière
On sélectionne tout
On copie
On colle en A1 dans une autre feiulle.
Ca ne fait pas l'affaire?
gillessimon
Messages postés
9
Date d'inscription
lundi 10 mars 2008
Statut
Membre
Dernière intervention
8 décembre 2012
11 mars 2008 à 12:36
11 mars 2008 à 12:36
En fait, je souhaiterais faire l'ensemble de la manipulation en une seule macro, sans traitement des donées au préalable.
Merci tout de même.
J'espère qu'un guru de la programmation VBA va pouvoir m'aider,
D'avance merci,
Gilles
Merci tout de même.
J'espère qu'un guru de la programmation VBA va pouvoir m'aider,
D'avance merci,
Gilles
LatelyGeek
Messages postés
1758
Date d'inscription
vendredi 4 janvier 2008
Statut
Membre
Dernière intervention
5 janvier 2023
550
11 mars 2008 à 14:41
11 mars 2008 à 14:41
Fais gaffe à la façon dont tu rédiges tes messages....
Merci tout de même.
J'espère qu'un guru de la programmation VBA va pouvoir m'aider,
La voilà, ta solution:
Sub Macro1()
'
' Macro1 Macro
' Macro enregistrée le 11/03/2008 par LatelyGeek
'
'
Range("D2").Select
ActiveCell.FormulaR1C1 = "=RC[-2]&RC[-1]"
While ActiveCell.Offset(1, -1) <> ""
ActiveCell.Offset(1, 0).Select
ActiveCell.FormulaR1C1 = _
"=IF(RC[-3]=R[-1]C[-3],R[-1]C&"" ""&RC[-2]&RC[-1],RC[-2]&RC[-1])"
Wend
Range("E1").Select
While ActiveCell.Offset(1, -1) <> ""
ActiveCell.Offset(1, 0).Select
ActiveCell.FormulaR1C1 = "=IF(RC[-4]=R[1]C[-4],"""",""Fin"")"
Wend
Selection.CurrentRegion.Select
Selection.AutoFilter
Selection.AutoFilter Field:=5, Criteria1:="Fin"
Selection.CurrentRegion.Select
Selection.Copy
Sheets("Feuil2").Select
ActiveSheet.Paste
End Sub
De rien,
signé
Un guru de la programmation...
Merci tout de même.
J'espère qu'un guru de la programmation VBA va pouvoir m'aider,
La voilà, ta solution:
Sub Macro1()
'
' Macro1 Macro
' Macro enregistrée le 11/03/2008 par LatelyGeek
'
'
Range("D2").Select
ActiveCell.FormulaR1C1 = "=RC[-2]&RC[-1]"
While ActiveCell.Offset(1, -1) <> ""
ActiveCell.Offset(1, 0).Select
ActiveCell.FormulaR1C1 = _
"=IF(RC[-3]=R[-1]C[-3],R[-1]C&"" ""&RC[-2]&RC[-1],RC[-2]&RC[-1])"
Wend
Range("E1").Select
While ActiveCell.Offset(1, -1) <> ""
ActiveCell.Offset(1, 0).Select
ActiveCell.FormulaR1C1 = "=IF(RC[-4]=R[1]C[-4],"""",""Fin"")"
Wend
Selection.CurrentRegion.Select
Selection.AutoFilter
Selection.AutoFilter Field:=5, Criteria1:="Fin"
Selection.CurrentRegion.Select
Selection.Copy
Sheets("Feuil2").Select
ActiveSheet.Paste
End Sub
De rien,
signé
Un guru de la programmation...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
gillessimon
Messages postés
9
Date d'inscription
lundi 10 mars 2008
Statut
Membre
Dernière intervention
8 décembre 2012
11 mars 2008 à 14:59
11 mars 2008 à 14:59
merci pour tout et désolé pour le message précédent, il n'était pas offensant.
Gilles
Gilles
LatelyGeek
Messages postés
1758
Date d'inscription
vendredi 4 janvier 2008
Statut
Membre
Dernière intervention
5 janvier 2023
550
11 mars 2008 à 15:05
11 mars 2008 à 15:05
Ca fonctionne, au moins?
gillessimon
Messages postés
9
Date d'inscription
lundi 10 mars 2008
Statut
Membre
Dernière intervention
8 décembre 2012
11 mars 2008 à 15:06
11 mars 2008 à 15:06
oui, merci encore mille fois,
Gilles
Gilles