[déplacé VB.NET -> VBA] Erreur 1004 macro excel suite à un tri dans le code d'un

Signaler
Messages postés
9
Date d'inscription
lundi 1 mars 2010
Statut
Membre
Dernière intervention
3 mars 2010
-
Messages postés
9
Date d'inscription
lundi 1 mars 2010
Statut
Membre
Dernière intervention
3 mars 2010
-
Bonjour,

J'ai un bouton de commande sur un feuille d'un classeur X, et lorsque je clique dessus je souhaite (entre autrre) qu'il me trie des données sur une feuille d'un classeur Y. J'ai obtenue le code en faisant enregistrer une macro, mais lorsque je copie le code et que je le colle dans le code du bouton de commande la fonction tri ne marche plus!! Je sais que ça marcherais avec une bouton de formulaire mais je ne veux pas utiliser de bouton de formulaire pour la raison suivante: mon classeur X contient une 50aine de feuille, et dans chaque feuille j'aurais ce même bouton de commande avec seul changement le nom de la feuille... Et si je crée un bouton de formulaire je devrais avoir autant de macro que de feuille et je risque donc d'etre un peu perdue! Donc voila mon bout de code

Sheets("Données filtrées").Range("A1:C65536").Select
Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Key2:=Range("C2") _
, Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
False, Orientation:=xlTopToBottom, DataOption1:=xlSortTextAsNumbers, _
DataOption2:=xlSortNormal

Pour information, lorsque j'en arrive à ce niveau de la macro, je suis bien dans le classeur qui m'intéresse et dans la feuille qui m'intéresse. Il me sélectionne bien mes colonnes, mais ensuite me sort une erreur 1004 avec la ligne "selection.sort etc" surlignée en jaune. Le code marche lorsqu'il est pris en dehors de mon bouton de commande...

Je crois que je travaille sous excel 2002 (c'est au boulot, je sais pas trop comment vérifier)

Merci d'avance!!!

7 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
Bonjour,

le code montré ne pouvant normalement que fonctionner, il te faut rechercher l'erreur ailleurs que dans la fonction de tri à proprement parler.
Probablement dxans ta sélection elle-même !
1) Je te suggère donc ceci :
ajouter un :
MsgBox Selection.Address

juste après ta ligne disant :
Sheets("Données filtrées").Range("A1:C65536").Select 

Lance et dis-nous ce qui s'affiche ...
2) confirme-nous que la feuille en cause n'est pas protégée.
Car bien évidemment : si elle est protégée ===>> Erreur 1004 puisque étant protégée, pas de tri possible
____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
Messages postés
9
Date d'inscription
lundi 1 mars 2010
Statut
Membre
Dernière intervention
3 mars 2010

J'obtiens le message suivant: $A:$C (je vois pas trop ce que ça peut vouloir dire) puis mon erreur 1004... Comment je peux vérifier que ma feuille n'est pas protégée?
Messages postés
9
Date d'inscription
lundi 1 mars 2010
Statut
Membre
Dernière intervention
3 mars 2010

Je viens de vérifier, ma feuille n'est pas protégée...

Pour information voici ma macro complète, si ça peut aider.

Alors voila la macro toute seule qui marche bien:
Sub MAJtop10ref()
'
' MAJtop10ref Macro
' Macro enregistrée le 26/02/2010 par cdescham
'

'
Windows("Données.xls").Activate
Sheets("Données").Select
Columns("B:B").Select
Range("B:B,K:K,AS:AS").Select
Range("AS1").Activate
Selection.Copy
Sheets("Données filtrées").Select
Range("A1").Select
ActiveSheet.Paste
Sheets("Données").Select
Application.CutCopyMode = False
Range("B:B,K:K,AT:AT").Select
Selection.Copy
Sheets("Données filtrées").Select
Range("D1").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Range("H2").Select
ActiveCell.FormulaR1C1 = "=[indicateur.xls]Honda!R4C2"
Columns("A:C").Select
Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Key2:=Range("C2") _
, Order2:=xlDescending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
False, Orientation:=xlTopToBottom, DataOption1:=xlSortTextAsNumbers, _
DataOption2:=xlSortNormal
Columns("D:F").Select
Selection.Sort Key1:=Range("D2"), Order1:=xlAscending, Key2:=Range("F2") _
, Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
False, Orientation:=xlTopToBottom, DataOption1:=xlSortTextAsNumbers, _
DataOption2:=xlSortNormal
Windows("indicateur.xls").Activate
Windows("Données.xls").Activate
Range("A1").Select
Range("A1:F46864").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
Range("I1:I2"), Unique:=False
Range("B4984:C4993").Select
Selection.Copy
Windows("indicateur.xls").Activate
Range("C23").Select
ActiveSheet.Paste
Windows("Données.xls").Activate
Range("E4984:F4993").Select
Application.CutCopyMode = False
Selection.Copy
Windows("indicateur.xls").Activate
Range("E23").Select
ActiveSheet.Paste
ActiveWindow.SmallScroll Down:=9
Range("C23:D32").Select
Application.CutCopyMode = False
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThick
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThick
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThick
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
Range("E23:F32").Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThick
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThick
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThick
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
Windows("Données.xls").Activate
Sheets("Données filtrées").Select
ActiveSheet.ShowAllData


Et la macro bidouillée pour mon bouton de commande, qui bug au niveau du tri (je copie que le début)
Private Sub CommandButton2_Click()
Windows("Données.xls").Activate
Sheets("Données").Select
Sheets("Données").Range("B:B,K:K,AS:AS").Select
Selection.Copy
Sheets("Données filtrées").Select
Sheets("Données filtrées").Range("A1").Select
ActiveSheet.Paste
Sheets("Données").Select
Application.CutCopyMode = False

Sheets("Données").Range("B:B,K:K,AT:AT").Select
Selection.Copy
Sheets("Données filtrées").Select
Sheets("Données filtrées").Range("D1").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Sheets("Données filtrées").Range("H2").Select
ActiveCell.FormulaR1C1 = "=[indicateur.xls]Honda!R4C2"
Sheets("Données filtrées").Range("A1:C65536").Select
MsgBox Selection.Address
Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Key2:=Range("C2") _
, Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
False, Orientation:=xlTopToBottom, DataOption1:=xlSortTextAsNumbers, _
DataOption2:=xlSortNormal

Pour rappel, je ne veux pas utiliser de bouton de formulaire!!
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
1) Comment as-tu vérifié cette absence de protection ? Par quelle méthode exactement ? Et sur quelle feuille ?
voici ce que tu dois écrire pour le vérifier :
If Worksheets("Données filtrées").ProtectContents = True Then
  MsgBox "protection présente"
Else
    MsgBox "    aucune protection"
End If


Il te faut par ailleurs vérifier que le tri est permis sur les plages non verrouillées !
Ainsi :
If Worksheets("Données filtrées").Protection.Allowsorting = True Then
        MsgBox "tri permis"
    Else
        MsgBox "tri non permis"
    End If


Essaye paer ailleurs de te débarrasser de cette mauvaise habitude de tout faire par des successions de Select, Copy, Paste ... ===>> pointe directement (et travaille avec) sur tes feuilles, cellules, plages !


____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
Messages postés
9
Date d'inscription
lundi 1 mars 2010
Statut
Membre
Dernière intervention
3 mars 2010

Je viens d'inclure tes deux bouts de code, alors ma feuille n'est pas protégée et le tri est permis (d'ailleurs je m'en doutais, parce que la macro initiale fonctionne, c'est lorsque je clique sur mon bouton de commande que ça bug au niveau du tri)
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
Comme chez moi çà ne bogue pas, que ce soit au niveau d'une macro ou à celui d'un bouton sur une feuille ou même depuis un bouton sur un Userform, je ne sais quoi te dire !
Quand je dis que ça ne bogue pas : je ne parle bien évidemment que de la ligne incriminée, en faisant totale abstraction du reste (puisque je n'ai pas le "reste"...).
Je n'ai donc aucune autre conclusion !
____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
Messages postés
9
Date d'inscription
lundi 1 mars 2010
Statut
Membre
Dernière intervention
3 mars 2010

J'ai trouvé!!! Je savais bien que c'était con... Donc j'ai remplacé

Sheets("Données filtrées").Range("A1:C65536").Select
Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Key2:=Range("C2") _
, Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
False, Orientation:=xlTopToBottom, DataOption1:=xlSortTextAsNumbers, _
DataOption2:=xlSortNormal

par

Sheets("Données filtrées").Range("A1:C65536").Sort Key1:=Sheets("Données filtrées").Range("A2"), Order1:=xlAscending, Key2:=Sheets("Données filtrées").Range("C2") _
, Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
False, Orientation:=xlTopToBottom, DataOption1:=xlSortTextAsNumbers, _
DataOption2:=xlSortNormal

...