Macro sur feuille active sous Excel
Résolu
Chonbie
Messages postés
145
Date d'inscription
Statut
Membre
Dernière intervention
-
Chonbie Messages postés 145 Date d'inscription Statut Membre Dernière intervention -
Chonbie Messages postés 145 Date d'inscription Statut Membre Dernière intervention -
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.
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.
A voir également:
- Vba feuille active
- Bruler feuille de laurier - Guide
- Feuille de pointage excel - Télécharger - Tableur
- Feuille a5 - Guide
- Comment supprimer une feuille sur word - Guide
- Active partition disk - Télécharger - Stockage
3 réponses
Bonjour,
Peut-être en remplaçant tout simplement :
par :
Bonne journée
Peut-être en remplaçant tout simplement :
ActiveWorkbook.Worksheets("feuille1")
par :
ActiveSheet
Bonne journée
Bonjour,
Pour trouver la dernière ligne renseignée :
Ton code devient :
Bon courage
;o)
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)
Erreur dans le Range.
Ancien code:
Nouveau code:
D'après lui:
"Range(Cell1,[Cell2]) As Range"
Merci de ta réponse ;)
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 ;)
Tu as mis où la déclaration de la variable LastLig ?
Ainsi que LastLig =Range("C65536").End(xlUp).Row ?
Essaie avec ça:
;o)
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)
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
Cordialement.
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.
@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 !!
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 !!
Ah finalement une autre question, j'ai ce code pour mettre les bordures du contour d'un tableau automatiquement:
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 !!
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 !!
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.