[VB Excel] macro trie avec erreur 1004

DunKaNMLNJ Messages postés 12 Statut Membre -  
 Utilisateur anonyme -
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.
Configuration: Windows XP
Internet Explorer 7.0

3 réponses

  1. Utilisateur anonyme
     
    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
  2. DunKaNMLNJ Messages postés 12 Statut Membre
     
    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
  3. Utilisateur anonyme
     
    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