Macro sur feuille active sous Excel

Résolu/Fermé
Signaler
Messages postés
145
Date d'inscription
vendredi 2 juillet 2010
Statut
Membre
Dernière intervention
2 septembre 2014
-
Messages postés
145
Date d'inscription
vendredi 2 juillet 2010
Statut
Membre
Dernière intervention
2 septembre 2014
-
Bonjour,

J'ai des tableaux à remplir pour répertorier des achats de matériaux chez différents fournisseurs. Je voudrais qu'une fois mes nouvelles lignes ajoutées, je puisse lancer une macro pour trier le tableau de ma page active selon un ordre bien précis.

J'ai essayé l'enregistrement banal de macro mais évidemment il enregistre le fait qu'il faut appliquer la macro dans une feuille nommée "feuille1" et non dans la feuille active...

C'est cette ligne qui ne va pas (répétée plusieurs fois dans mon script):
ActiveWorkbook.Worksheets("feuille1").Sort.SortFields.Add _

Des idées?

Je vous remercie d'avance.

3 réponses

Messages postés
579
Date d'inscription
mardi 10 août 2010
Statut
Membre
Dernière intervention
11 novembre 2018
311
Bonjour,

Peut-être en remplaçant tout simplement :

ActiveWorkbook.Worksheets("feuille1")


par :

ActiveSheet


Bonne journée
Messages postés
145
Date d'inscription
vendredi 2 juillet 2010
Statut
Membre
Dernière intervention
2 septembre 2014
53
Impeccable ça marche merci !!

Une 2ème question qui va bien avec:
"lorsque je fais ma macro sur une feuille, il applique le tri au tableau de la feuille active en enregistrant les dimensions de ce tableau, or les tableaux des différentes feuilles ne sont pas tous de la même taille, il faudrait modifier cette ligne:
Range("C4:C517")
Pour que la macro prenne toute la colonne à partir de C4 par exemple...
Une idée?"

Merci.
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 188
Bonjour,

Pour trouver la dernière ligne renseignée :

' Ici pour la colonne 4
Dim LastLig As Long
LastLig = Range("C65536").End(xlUp).Row


Ton code devient :

Range("C4:C" & LastLig) 


Bon courage

;o)
Messages postés
145
Date d'inscription
vendredi 2 juillet 2010
Statut
Membre
Dernière intervention
2 septembre 2014
53
Erreur dans le Range.
Ancien code:
Sub tri_tab()
'
' tri_tab Macro
'
' Touche de raccourci du clavier: Ctrl+k
'
    Range("B3:I3").Select
    ActiveSheet.Sort.SortFields.Clear
   ActiveSheet.Sort.SortFields.Add Key:= _
        Range("B4:B13"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    ActiveSheet.Sort.SortFields.Add Key:= _
        Range("C4:C13"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    ActiveSheet.Sort.SortFields.Add Key:= _
        Range("E4:E13"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With ActiveSheet.Sort
        .SetRange Range("B3:I13")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub


Nouveau code:
Sub tri_tab()
'
' tri_tab Macro
'
' Touche de raccourci du clavier: Ctrl+k
'
    Range("B3:I3").Select
    ActiveSheet.Sort.SortFields.Clear
   ActiveSheet.Sort.SortFields.Add Key:= _
        Range("B4:B" & LastLig), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    ActiveSheet.Sort.SortFields.Add Key:= _
        Range("C4:C" & LastLig), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    ActiveSheet.Sort.SortFields.Add Key:= _
        Range("E4:C" & LastLig), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With ActiveSheet.Sort
        .SetRange Range("B3:I" & LastLig)
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub


D'après lui:
"Range(Cell1,[Cell2]) As Range"

Merci de ta réponse ;)
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 188
Tu as mis où la déclaration de la variable LastLig ?
Ainsi que LastLig =Range("C65536").End(xlUp).Row ?

Essaie avec ça:

Sub tri_tab()
'
' tri_tab Macro
'
' Touche de raccourci du clavier: Ctrl+k
'
Dim LastLig As Long
LastLig = Range("C65536").End(xlUp).Row

    Range("B3:I3").Select
    ActiveSheet.Sort.SortFields.Clear
   ActiveSheet.Sort.SortFields.Add Key:= _
        Range("B4:B" & LastLig), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    ActiveSheet.Sort.SortFields.Add Key:= _
        Range("C4:C" & LastLig), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    ActiveSheet.Sort.SortFields.Add Key:= _
        Range("E4:C" & LastLig), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With ActiveSheet.Sort
        .SetRange Range("B3:I" & LastLig)
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub


;o)
Messages postés
4239
Date d'inscription
lundi 20 avril 2009
Statut
Contributeur
Dernière intervention
12 septembre 2014
1 301
Bonjour,

Polux31 : pour déterminer la dernière ligne d'une colonne, il est malhabile d'utiliser le Range("C65536"), car ceci n'est valable que pour Excel 2003 (même si je te l'accorde, il est rare de voir un fichier excel sur plus de 65000 lignes, même en version 2007 ou 2010).

Grâce à pijaku (que je remercie au passage), il est maintenant préférable d'utiliser
Range("C"& Rows.Count)
, qui donne la même chose au final, mais qui fait que le code fonctionnera aussi bien sur Excel 2007 ou sur les versions plus anciennes.

Cordialement.
Messages postés
145
Date d'inscription
vendredi 2 juillet 2010
Statut
Membre
Dernière intervention
2 septembre 2014
53
@Polux31:
Je n'avais pas compris ça comme une variable effectivement !!
J'ai compris et cela fonctionne à merveille :D !! Je l'ai même adapté pour une mise en forme des bordures et aucun soucis. Juste que pour Excel 2007 il faut utiliser "1 048 576" de lignes.

@chossette9:
"Rows.count" permet de compter le nombre de ligne de la feuille c'est ça? Donc il faudrait rajouter une variable en plus avant c'est ça? Cela permet cependant de s'adapter à tous les fichiers excel peut importe l'année c'est bien ça?

@Tous:
Merci pour vos commentaires !!
Messages postés
145
Date d'inscription
vendredi 2 juillet 2010
Statut
Membre
Dernière intervention
2 septembre 2014
53
Ah finalement une autre question, j'ai ce code pour mettre les bordures du contour d'un tableau automatiquement:
Sub tour_tab()
'
' tour_tab Macro
'
' Touche de raccourci du clavier: Ctrl+m
'
    Range("B5:BE1048576").Select
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    Selection.Borders(xlEdgeLeft).LineStyle = xlNone
    Selection.Borders(xlEdgeTop).LineStyle = xlNone
    Selection.Borders(xlEdgeBottom).LineStyle = xlNone
    Selection.Borders(xlEdgeRight).LineStyle = xlNone
    Selection.Borders(xlInsideVertical).LineStyle = xlNone
    Selection.Borders(xlInsideHorizontal).LineStyle = xlNone

Dim ligne As Long
ligne = Range("B1048576").End(xlUp).Row

    Range("B5:BE" & ligne).Select
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    With Selection.Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlMedium
    End With
    With Selection.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlMedium
    End With
    With Selection.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlMedium
    End With
    With Selection.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlMedium
    End With
    Selection.Borders(xlInsideVertical).LineStyle = xlNone
    Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
End Sub


Donc cela fonctionne bien, il me vide la feuille de toute bordure à partir d'une ligne voulue et me crée le contour au niveau de ma dernière cellule en B. Sauf que cela marche dans un sens mais pas dans l'autre...

Lorsque j'agrandis le tableau aucun soucis, effacement puis création.
Mais lorsque je supprime des lignes, il me recrée le tableau au niveau de l'ancienne ligne?! Comme si il ne changeait pas la variable pour diminuer, juste pour augmenter sa valeur?!

Merci d'avance ;D !!
Messages postés
145
Date d'inscription
vendredi 2 juillet 2010
Statut
Membre
Dernière intervention
2 septembre 2014
53
Problème résolu !!

En fait au lieu de supprimer la case qui me servait à repérer la dernière ligne du tableau, je mettais un "espace" (fâcheuse habitude à supprimer en tapant un espace...) et du coup la macro le prenais comme un caractère à part entière.