Trier un tableau de données

Résolu
cs_Alban83 Messages postés 24 Date d'inscription vendredi 3 juillet 2009 Statut Membre Dernière intervention 21 septembre 2010 - 23 mars 2010 à 11:04
cs_pacadebord Messages postés 113 Date d'inscription lundi 31 mars 2003 Statut Membre Dernière intervention 19 décembre 2011 - 24 mars 2010 à 09:53
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

cs_Frederic45 Messages postés 60 Date d'inscription vendredi 26 octobre 2007 Statut Membre Dernière intervention 30 mars 2010
23 mars 2010 à 11:39
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
3
cs_Alban83 Messages postés 24 Date d'inscription vendredi 3 juillet 2009 Statut Membre Dernière intervention 21 septembre 2010
23 mars 2010 à 11:57
Merci Frédéric

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

Merci beaucoup
0
r1r2 Messages postés 22 Date d'inscription mardi 23 janvier 2007 Statut Membre Dernière intervention 31 mars 2010
23 mars 2010 à 11:57
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...
0
cs_pacadebord Messages postés 113 Date d'inscription lundi 31 mars 2003 Statut Membre Dernière intervention 19 décembre 2011 2
23 mars 2010 à 14:01
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Alban83 Messages postés 24 Date d'inscription vendredi 3 juillet 2009 Statut Membre Dernière intervention 21 septembre 2010
24 mars 2010 à 09:18
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
0
cs_pacadebord Messages postés 113 Date d'inscription lundi 31 mars 2003 Statut Membre Dernière intervention 19 décembre 2011 2
24 mars 2010 à 09:53
Pac
0