Macro sur feuille active sous Excel
Résolu/Fermé
Chonbie
Messages postés
145
Date d'inscription
vendredi 2 juillet 2010
Statut
Membre
Dernière intervention
2 septembre 2014
-
9 août 2011 à 17:30
Chonbie Messages postés 145 Date d'inscription vendredi 2 juillet 2010 Statut Membre Dernière intervention 2 septembre 2014 - 12 août 2011 à 14:37
Chonbie Messages postés 145 Date d'inscription vendredi 2 juillet 2010 Statut Membre Dernière intervention 2 septembre 2014 - 12 août 2011 à 14:37
A voir également:
- Feuille active vba
- Feuille de pointage excel - Télécharger - Tableur
- Comment supprimer une feuille sur word - Guide
- Excel reporter des données sur une autre feuille avec conditions - Forum Excel
- Feuille a5 - Guide
- Incompatibilité de type vba ✓ - Forum Programmation
3 réponses
cousinhub29
Messages postés
1011
Date d'inscription
mardi 10 août 2010
Statut
Membre
Dernière intervention
18 février 2025
355
10 août 2011 à 00:42
10 août 2011 à 00:42
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
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
11 août 2011 à 10:27
11 août 2011 à 10:27
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)
Chonbie
Messages postés
145
Date d'inscription
vendredi 2 juillet 2010
Statut
Membre
Dernière intervention
2 septembre 2014
53
11 août 2011 à 12:14
11 août 2011 à 12:14
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 ;)
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
11 août 2011 à 12:22
11 août 2011 à 12:22
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)
chossette9
Messages postés
4239
Date d'inscription
lundi 20 avril 2009
Statut
Contributeur
Dernière intervention
12 septembre 2014
1 309
11 août 2011 à 13:32
11 août 2011 à 13:32
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.
Chonbie
Messages postés
145
Date d'inscription
vendredi 2 juillet 2010
Statut
Membre
Dernière intervention
2 septembre 2014
53
11 août 2011 à 14:54
11 août 2011 à 14:54
@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 !!
Chonbie
Messages postés
145
Date d'inscription
vendredi 2 juillet 2010
Statut
Membre
Dernière intervention
2 septembre 2014
53
12 août 2011 à 10:55
12 août 2011 à 10:55
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 !!
Chonbie
Messages postés
145
Date d'inscription
vendredi 2 juillet 2010
Statut
Membre
Dernière intervention
2 septembre 2014
53
12 août 2011 à 14:37
12 août 2011 à 14:37
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.
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.
11 août 2011 à 10:04
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.