[VB Excel] macro trie avec erreur 1004

Fermé
DunKaNMLNJ Messages postés 12 Date d'inscription mardi 21 août 2007 Statut Membre Dernière intervention 3 mars 2009 - 25 août 2008 à 15:07
 Utilisateur anonyme - 26 août 2008 à 12:58
Salut la compagnie.

Aujourd'hui, j'écris une macro pour un classeur excel contenant plusieurs feuilles. Les données contenues dans les feuilles doivent être triées par ordre décroissant en fonction de la valeur de la cellule de la colonne la plus à droite.

C'est flou hein? Z'inquiétez pas en lisant le code vous allez vite comprendre.
J'ai fait ça:

[quote]
Sub classement()
'
' classement Macro
' Macro enregistrée le 25/08/2008 par *
'

'
Dim feuille As String
Dim r, c, r2, class As Long
Dim f As Integer

Do

Select Case feuille 'permet de passer d'une worksheet à l'autre
Case ""
feuille = "Appro"
Case "Appro"
feuille = "CA"
Case "CA"
feuille = "Comm"
Case "Comm"
feuille = "PuetQ"
End Select

c = 1

a:

If Worksheets(feuille).Cells(1, c + 1) <> "" Then 'permet de savoir combien de colonne compte la feuille
c = c + 1
GoTo a
End If

r = Worksheets(feuille).Range("A1").End(xlDown).Row 'pour connaitre le nombre de lignes de la feuille




Worksheets(feuille).Range(Cells(1, 1), Cells(r, c)).Sort _
Key1:=Worksheets(feuille).Cells(1, c), Order1:=xlDescending, Header:=xlYes, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom

'permet de trier la région "sélectionnée"

f = f + 1
Loop While f < 4

End Sub/quote

Mon problème c'est qu'arrivé à la ligne de trie (la méthode Sort) j'ai une erreur 1004 "erreur définie par l'application ou par l'objet". Je suis sur que c'est une erreur toute bête qui doit venir d'une variable mal initialisée ou mal déclarée mais je n'arrive pas à trouver seul.

toute aide sera la bienvenue, merci d'avance.
A voir également:

3 réponses

Utilisateur anonyme
25 août 2008 à 19:35
Bonjour,

À première vue, le tout devrait être fonctionnel !

J'ai remanié de petites choses, je ne travaille jamais avec les [ GOTOs ] ...
Évriter les mots réservés
Déclaré le type de chaque variable
... Dim r , c , r2 As Long
Ici seul r2 est de type Long, r & c sont de type Variant
Quelques initialisations introuvées ???
... f = 0
... Feuille = ActiveSheet.Name

Une erreur 1004 vise une erreur d'adresses :
Worksheets(Feuille).Range(Cells(1, 1), Cells(r, c))

r & c doivent être > 0 - tester en mode pas à pas !


Option Explicit

Sub Classement()

    Dim Feuille As String, f As Integer
    Dim r As Long, c As Long, r2 As Long
    'Dim Classe As Long ' Le mot [ class  ] est un mot réservé

    f = 0
    Feuille = ActiveSheet.Name

    Do
        Select Case (Feuille) 'permet de passer d'une worksheet à l'autre
            Case ""
                Feuille = "Appro"
            Case "Appro"
                Feuille = "CA"
            Case "CA"
                Feuille = "Comm"
            Case "Comm"
                Feuille = "PuetQ"
        End Select
        
        'pour connaitre le nombre de colonne compte la feuille
        c = Worksheets(Feuille).Range("A1").End(xlRight).Column

        'pour connaitre le nombre de lignes de la feuille
        r = Worksheets(Feuille).Range("A1").End(xlDown).Row

        Worksheets(Feuille).Range(Cells(1, 1), Cells(r, c)).Sort _
            Key1:=Worksheets(Feuille).Cells(1, c), Order1:=xlDescending, Header:=xlYes, _
            OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom

        'permet de trier la région "sélectionnée"
        f = f + 1
    Loop While (f < 4)

End Sub
'

Lupin
-1
DunKaNMLNJ Messages postés 12 Date d'inscription mardi 21 août 2007 Statut Membre Dernière intervention 3 mars 2009
26 août 2008 à 08:33
Merci de ton aide,

surtout pour l'astuce permettant de connaître le nombre de colonnes.
Mais attention ça s'écrit comme ça en fait: c = Worksheets(Feuille).Range("A1").End(xlToRight).Column et non End(xlRight)

Par contre j'ai testé le code et ça ne marche toujours pas.
Pour être plus précis, lorsque j'exécute le code, il fonctionne très bien pour la première feuille mais lorsqu'il passe à la feuille suivante l'instruction Sort plante...

Erreur 1004 blablabla

Si je réinitialise et recommence, cette fois le code plante sur la première feuille.

Mystère...

edit: peut etre que SOrt n'aime pas trop l'indexation en L1C1 ?
-1
Utilisateur anonyme
26 août 2008 à 12:58
re :

tu dis : ... ça fonctionne pour la première feuille

    Feuille = ActiveSheet.Name ' Ici , Feuille prend le nom de la feuille active

    Do
        Select Case (Feuille) 'permet de passer d'une worksheet à l'autre
            Case ""
                Feuille = "Appro"
            Case "Appro"
                Feuille = "CA"
            Case "CA"
                Feuille = "Comm"
            Case "Comm"
                Feuille = "PuetQ"
        End Select

        ' Ajoute ici
        Sheets(Feuille).Select  ' pour pointer sur la bonne feuille au moment du [ Sort ] .
        ...

Lupin
-1