VBA Selection de toute la plage occupée d'une feuille

Le
Domi
Bonjour à tous,

Question double !

1°) je voudrais appliquer un traitement (formatage) à la totalité de la
plage utilisée sur une feuille

Quel code utiliser pour sélectionner la plage comprise entre A1 et la
dernière cellule contenant une valeur dans une feuille (dernière ligne et
dernière colonne occupée !)

2°) je voudrais ensuite appliquer ce même traitement à l'ensemble des
feuilles du classeur

Là encore quelqu'un pourrait-il m'indiquer le code ?

Merci pour votre aide

Domi
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Daniel.C
Le #20727961
Bonjour.
Esssaie :

Sub UneFeuille()
Dim Plage As Range, l As Long, Col As Integer
Col = Cells.Find("*", [A1], , , , xlPrevious).Column
l = Cells.Find("*", [A1], , , , xlPrevious).Row
Set Plage = Range([A1], Cells(l, Col))
MsgBox Range([A1], Cells(l, Col)).Address
'ton formatage de la plage
End Sub

Sub PlusieursFeuuilles()
Dim Plage As Range, l As Long, Col As Integer, Sh As Worksheet
For Each Sh In Worksheets
With Sh
Col = .Cells.Find("*", .[A1], , , , xlPrevious).Column
l = .Cells.Find("*", .[A1], , , , xlPrevious).Row
Set Plage = Range(.[A1], .Cells(l, Col))
MsgBox Range([A1], Cells(l, Col)).Address
'ton formatage de la plage
End With
Next Sh
End Sub

Cordialement.
Daniel


Bonjour à tous,

Question double !

1°) je voudrais appliquer un traitement (formatage) à la totalité de la plage
utilisée sur une feuille

Quel code utiliser pour sélectionner la plage comprise entre A1 et la
dernière cellule contenant une valeur dans une feuille (dernière ligne et
dernière colonne occupée !)

2°) je voudrais ensuite appliquer ce même traitement à l'ensemble des
feuilles du classeur

Là encore quelqu'un pourrait-il m'indiquer le code ?

Merci pour votre aide

Domi


FFO
Le #20727951
Salut à toi

essaies ceci :

Range("A1", Range("A1").SpecialCells
(xlCellTypeLastCell).Address).Activate
Traitement Format.....

Pour toutes les feuilles :

For i = 1 to Sheets.Count
Sheets(i).Activate
Range("A1", Range("A1").SpecialCells
(xlCellTypeLastCell).Address).Activate
Traitement Format.....
Next

Celà devrait convenir

Dis moi !!!!!
Daniel.C
Le #20728221
Bonjour FFO
Il faut se méfier de xlCellTypeLastCell. Une cellule effacée ou vide
mais formatée peut fausser le résultat.
Cordialement.
Daniel

Salut à toi

essaies ceci :

Range("A1", Range("A1").SpecialCells
(xlCellTypeLastCell).Address).Activate
Traitement Format.....

Pour toutes les feuilles :

For i = 1 to Sheets.Count
Sheets(i).Activate
Range("A1", Range("A1").SpecialCells
(xlCellTypeLastCell).Address).Activate
Traitement Format.....
Next

Celà devrait convenir

Dis moi !!!!!


michdenis
Le #20728411
Bonjour Daniel,

Si tu permets, j'aimerais ajouter un petit détail à ta présentation.

A ) Quelle la dernière cellule recherchée dans la feuille ?
1 - Celle qui contient une donnée (valeur) ?
2 - Celle qui contient une formule ?
Dans ce dernier cas (formule), il arrive que certaines formules
retourne "" et non pas une valeur. Il faut porter une attention
particulière au paramètre LookIn de la méthode "Find".

Si on désire trouver la dernière cellule occupée soit par une formule
ou par une valeur, LookIn:=XlFormulas , si on désire trouver la dernière
cellule occupée par une Valeur, LookIn:=XlValues

B ) Le paramètre "SearchOrder" doit aussi être renseigner. Certains tableaux
n'ont pas nécessairement la forme rectangulaire ou la dernière colonne
ou ligne ne contient pas nécessairement des données dans chacune des
cellules de la plage... Fais quelques tests, tu verras !

C ) Si on fait une boucle sur plusieurs feuilles, tu as déjà testé ces lignes
d'erreur, si la feuille est vierge, une erreur de type 91 est retournée,
il est prudent d'utiliser le "On error resume next" en début de boucle.

Le temps me presse .... à plus tard !

Pour trouver la dernière ligne :
with worksheets("Feuil1")
DerLig = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
End with

Pour trouver la dernière colonne :
With Worksheets("Feuil1")
DerCol = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious).Column
End with
Daniel.C
Le #20728771
Bonjour Denis.

A. On demande la dernière valeur sans préciser s'il s'agit d'une
constante ou d'une formule.
B. Honte à moi. Je rectifie :

Col = Cells.Find("*", [A1], , , xlByColumns, xlPrevious).Column
l = Cells.Find("*", [A1], , , xlByRows, xlPrevious).Row
Set Plage = Range([A1], Cells(l, Col))
MsgBox Range([A1], Cells(l, Col)).Address
'ton formatage de la plage

Les mêmes modifs doivent être repportées dans l'autre macro.

C. Non, je n'ai pas écrit de routine d'erreur, le demandeur peut bien
bosser un peu. Il a écrit "toutes les feuilles" ;-)))

PS. Je n'ai pas non plus resetté les éventuels options ayant pu être
codées dans un précédent Find.
Merci pour tes remarques.
Daniel

Bonjour Daniel,

Si tu permets, j'aimerais ajouter un petit détail à ta présentation.

A ) Quelle la dernière cellule recherchée dans la feuille ?
1 - Celle qui contient une donnée (valeur) ?
2 - Celle qui contient une formule ?
Dans ce dernier cas (formule), il arrive que certaines formules
retourne "" et non pas une valeur. Il faut porter une attention
particulière au paramètre LookIn de la méthode "Find".

Si on désire trouver la dernière cellule occupée soit par une formule
ou par une valeur, LookIn:=XlFormulas , si on désire trouver la dernière
cellule occupée par une Valeur, LookIn:=XlValues

B ) Le paramètre "SearchOrder" doit aussi être renseigner. Certains tableaux
n'ont pas nécessairement la forme rectangulaire ou la dernière colonne
ou ligne ne contient pas nécessairement des données dans chacune des
cellules de la plage... Fais quelques tests, tu verras !

C ) Si on fait une boucle sur plusieurs feuilles, tu as déjà testé ces lignes
d'erreur, si la feuille est vierge, une erreur de type 91 est retournée,
il est prudent d'utiliser le "On error resume next" en début de boucle.

Le temps me presse .... à plus tard !

Pour trouver la dernière ligne :
with worksheets("Feuil1")
DerLig = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
End with

Pour trouver la dernière colonne :
With Worksheets("Feuil1")
DerCol = .Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious).Column
End with


FFO
Le #20729961
Bonjours michdenis

Je partage entièrement ta remarque ayant été mainte fois en proie ave c
cette particularité
Toutefois il ne sagit que de formater une sélection
Et une suppression des colonnes et lignes ayant ce type de cellules
avec enregistrement du fichier résoud la difficulté
C'est même conseillé pour éviter un embonpoint du document

A notre interlocuteur de statuer
Domi
Le #20731861
Merci pour la réponse,
quelques précisions :
La dernière cellule peut effectivement contenir une données en dur ou une
formule...
Il n 'y aura pas de feuille vide
Il y a des lignes et des colonnes entierement vides.

Domi

"Daniel.C"
Bonjour FFO
Il faut se méfier de xlCellTypeLastCell. Une cellule effacée ou vide mais
formatée peut fausser le résultat.
Cordialement.
Daniel

Salut à toi

essaies ceci :

Range("A1", Range("A1").SpecialCells
(xlCellTypeLastCell).Address).Activate
Traitement Format.....

Pour toutes les feuilles :

For i = 1 to Sheets.Count
Sheets(i).Activate
Range("A1", Range("A1").SpecialCells
(xlCellTypeLastCell).Address).Activate
Traitement Format.....
Next

Celà devrait convenir

Dis moi !!!!!






michdenis
Le #20736661
La réponse t'a été donnée sur ce fil !




"Domi"
Merci pour la réponse,
quelques précisions :
La dernière cellule peut effectivement contenir une données en dur ou une
formule...
Il n 'y aura pas de feuille vide
Il y a des lignes et des colonnes entierement vides.

Domi

"Daniel.C"
Bonjour FFO
Il faut se méfier de xlCellTypeLastCell. Une cellule effacée ou vide mais
formatée peut fausser le résultat.
Cordialement.
Daniel

Salut à toi

essaies ceci :

Range("A1", Range("A1").SpecialCells
(xlCellTypeLastCell).Address).Activate
Traitement Format.....

Pour toutes les feuilles :

For i = 1 to Sheets.Count
Sheets(i).Activate
Range("A1", Range("A1").SpecialCells
(xlCellTypeLastCell).Address).Activate
Traitement Format.....
Next

Celà devrait convenir

Dis moi !!!!!






Publicité
Poster une réponse
Anonyme