[VB Excel] macro trie avec erreur 1004
DunKaNMLNJ
Messages postés
12
Date d'inscription
Statut
Membre
Dernière intervention
-
Utilisateur anonyme -
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.
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:
- [VB Excel] macro trie avec erreur 1004
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Comment trier par ordre alphabétique sur excel - Guide
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Déplacer colonne excel - Guide
3 réponses
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 !
Lupin
À 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
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 ?
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 ?
re :
tu dis : ... ça fonctionne pour la première feuille
Lupin
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