Trier un tableau de données

Résolu
Signaler
Messages postés
24
Date d'inscription
vendredi 3 juillet 2009
Statut
Membre
Dernière intervention
21 septembre 2010
-
Messages postés
113
Date d'inscription
lundi 31 mars 2003
Statut
Membre
Dernière intervention
19 décembre 2011
-
Bonjour tt le monde,

Je veux trier des données par rapport à une colonnes nomée "Offer".Cette colonnes n'est pas toujour à la meme place.
J'ai utilisé l'enregisteur de macro pour m'aidé. Puis j'ai introduit ma variable coloffer.
Mais j'ai une erreur d'exécution 1004.
Pouvez vous m'aider?
Merci

Sub Macro2()

Worksheets("default").Activate
nbColonnes = Cells.Find("*", Range("A1"), , , xlByColumns, xlPrevious).Column
Dim coloffer As Integer
For i = 1 To nbColonnes
If Cells(1, i).Text "Offer" Then coloffer i
Next i

Cells.Select
Selection.Sort Key1:=Range(Cells(2, coloffer)), Order1:=xlAscending, Header:=xlYes, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal
End Sub

6 réponses

Messages postés
60
Date d'inscription
vendredi 26 octobre 2007
Statut
Membre
Dernière intervention
30 mars 2010

Bonjour à tous
Bonjour Alban

J'aurais plutôt écrit ceci :

Sub recherche()
Dim c As Range
Dim macolonne As Integer
Dim mavar As String
Dim derlign As Integer

With Worksheets("Feuil1").Range("A:IV")
mavar = "Offer"
Set c = .Find(mavar, LookIn:=xlValues, Lookat:=xlWhole)
If Not c Is Nothing Then
macolonne = c.Column
End If
End With
derlign = Cells(65536, macolonne).End(xlUp).Row

Range(Cells(1, macolonne), Cells(derlign, macolonne)).Select
Selection.Sort Key1:=Cells(1, macolonne), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
End Sub

Il te reste à affiner

Frédéric
Messages postés
24
Date d'inscription
vendredi 3 juillet 2009
Statut
Membre
Dernière intervention
21 septembre 2010

Merci Frédéric

En adaptant la macro à ma situation cela fonctionne trés bien.

Merci beaucoup
Messages postés
22
Date d'inscription
mardi 23 janvier 2007
Statut
Membre
Dernière intervention
31 mars 2010

Bonjour,

L'erreur 1004 vient très probablement du fait que la chaine "Offer" n'a pas été trouvée et que donc coloffer (ou macolonne dans le code de Frederic45) vaut 0.
Dans un premier temps, je vérifierais que l'entête de la colonne Offer contient bien exactement "Offer" (et pas "offer", "Offre", "Offer ", ...).
Au besoin, utiliser les instructions Trim, LCase ou Ucase pour identifier la colonne Offer.

Ensuite, il faut gérer le cas où "Offer" n'a pas été trouvé et dans ce cas ne pas tenter de faire un tri sur une colonne qui n'est pas définie...
Messages postés
113
Date d'inscription
lundi 31 mars 2003
Statut
Membre
Dernière intervention
19 décembre 2011
2
Bonjour,

Pour mettre mon grain de sel, il y a la très pratique propriété CurrentArray (ou à la limite CurrentRegion) qui permet de déterminer les dimensions du tableau en cours sans employer des artifices comme .End(xlUp) et autre...
Mélangé au code de Frederic45, ca donnerait :
Private Sub TrierOffer()
Dim c As Range
Dim monTableau As Range

With Worksheets("default").Range("A:IV")

    Set c = .Find("Offer", LookIn:=xlValues, Lookat:=xlWhole)
    
    If Not c Is Nothing Then
    
        Set monTableau = ActiveSheet.Range(c.Address).CurrentArray
        monTableau.Sort Key1:=Range(c.Address), Order1:=xlAscending, header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal
    
    End If

End With
                
End Sub




Pac
Messages postés
24
Date d'inscription
vendredi 3 juillet 2009
Statut
Membre
Dernière intervention
21 septembre 2010

Salut Pac

J'ai testé ta solution et ça fonctionne tres bien! Je ne conaissais pas CurrentArray. Mais cette propriété va être utile pour la suite de ma macro.

Merci
Messages postés
113
Date d'inscription
lundi 31 mars 2003
Statut
Membre
Dernière intervention
19 décembre 2011
2
Pac