OVH Cloud OVH Cloud

UsedRange

6 réponses
Avatar
DCR
Bonjour,

J'ai une petite question que les spécialistes de vba excel ne devrait pas
avoir trop de problème à me répondre.

J'utilise dans une procédure la méthode UsedRange d'une feuille de calcul.
Cela fonctionne bien lorsque la feuille est "propre". Mais parfois la plage
retournée est bien plus grande que celle réellement utilisée. Il me semblais
qu'il y avait une fonction permettant de nettoyer la feuille de calcul pour
pouvoir retourner le "vrai" usedrange.

Le problème c'est que je ne me souviens plus laquelle... A moins que je n'ai
seulement rêver de cette fonction magique !

Pouvez vous m'aider ?!

Merci

6 réponses

Avatar
Akira
Bonjour,

Tu devrais pouvoir utiliser les fonctions suivantes (réponse donnée
initialement par Michdenis a une de mes questions) qui permettent
d'obtenir la dernière ligne et la dernière colonne utilisées d'un
onglet.

Voici 2 fonctions que tu peux copier dans un module standard :

Et pour les appeler dans une procédure, tu fais comme ceci :

A = DerLig(Worksheets("Feuil1")

OU

A = DerLig(activesheet)


********** PAR FONCTION dERNIÈRE LIGNE **************

Function DerLig(sh As Worksheet)
On Error Resume Next
DerLig = sh.Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
On Error GoTo 0
End Function


'********** PAR FONCTION dERNIÈRE Colonne **************

Function DerCol(sh As Worksheet)
On Error Resume Next
DerCol = sh.Cells.Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious).Column
On Error GoTo 0
End Function
'-------------------------------------------

Bonne chance.




Bonjour,

J'ai une petite question que les spécialistes de vba excel ne devrait pas
avoir trop de problème à me répondre.

J'utilise dans une procédure la méthode UsedRange d'une feuille de calcul.
Cela fonctionne bien lorsque la feuille est "propre". Mais parfois la plage
retournée est bien plus grande que celle réellement utilisée. Il me semblais
qu'il y avait une fonction permettant de nettoyer la feuille de calcul pour
pouvoir retourner le "vrai" usedrange.

Le problème c'est que je ne me souviens plus laquelle... A moins que je n'ai
seulement rêver de cette fonction magique !

Pouvez vous m'aider ?!

Merci


Avatar
anonymousA
bonjour,

plutot qu'utiliser Usedrange, il faut utiliser la plage de données
délimitée par de vraies données.

On Error Resume Next
With Cells
Lxdeb = .Find("*", [IV65536], , , xlByRows, xlNext).Row
Cxdeb = .Find("*", [IV65536], , , xlByColumns, xlNext).Column
Lxfin = .Find("*", [A1], , , xlByRows, xlPrevious).Row
Cxfin = .Find("*", [A1], , , xlByColumns, xlPrevious).Column
End With
Range(Cells(Lxdeb, Cxdeb), Cells(Lxfin, Cxfin)).Select 'pas
obligatoire, juste pour la démo

A+
Avatar
michdenis
Bonjour,

Si dans la dernière cellule de la feuille tu as une formule de ce type :

=si(g1%;"";"") ... en fait ce pourrait être n'importe quelle formule qui retourne "" , est-ce que ta méthode en tient compte dans
la détermination de la "vraie" plage UsedRange ????


Salutations!



"anonymousA" a écrit dans le message de news:
bonjour,

plutot qu'utiliser Usedrange, il faut utiliser la plage de données
délimitée par de vraies données.

On Error Resume Next
With Cells
Lxdeb = .Find("*", [IV65536], , , xlByRows, xlNext).Row
Cxdeb = .Find("*", [IV65536], , , xlByColumns, xlNext).Column
Lxfin = .Find("*", [A1], , , xlByRows, xlPrevious).Row
Cxfin = .Find("*", [A1], , , xlByColumns, xlPrevious).Column
End With
Range(Cells(Lxdeb, Cxdeb), Cells(Lxfin, Cxfin)).Select 'pas
obligatoire, juste pour la démo

A+
Avatar
anonymousA
bonjour,

ben, bien sur que cette cellule est prise en compte et c'est tout à
fait bien comme ca d'ailleurs, car jusqu'à plus ample informé, une
cellule contenant une formule , quand bien même celle-ci renverrait ""
ce que tu suggères , est utile à prendre en compte car c'est une
donnée. Enfin, pour ma part, je la conserverais !! Mais c'est affaire
de choix personnel

salutations.
Avatar
michdenis
En supposant que l'usager ait utilisé la fonction "Recherche" de la commande Menu / édition / Rechercher et que ce dernier ait
utilisé le paramêtre "par valeur" pour effectuer sa recherche, s'il exécute ta procédure par la suite, ta présentation ne tiendra
pas compte de la dernière ligne ou colonne si cette dernière affiche "" comme résultat d'une formule.


Salutations!


"anonymousA" a écrit dans le message de news:
bonjour,

ben, bien sur que cette cellule est prise en compte et c'est tout à
fait bien comme ca d'ailleurs, car jusqu'à plus ample informé, une
cellule contenant une formule , quand bien même celle-ci renverrait ""
ce que tu suggères , est utile à prendre en compte car c'est une
donnée. Enfin, pour ma part, je la conserverais !! Mais c'est affaire
de choix personnel

salutations.
Avatar
anonymousA
ca , par contre, c'est totalement exact dans la mesure où il est vrai
qu' Excel conserve par défaut la dernière option choisie par
l'utilisateur. Dans ces conditions,

With Cells
Lxdeb = .Find("*", [IV65536], xlFormulas, , xlByRows, xlNext).Row
Cxdeb = .Find("*", [IV65536], xlFormulas, , xlByColumns,
xlNext).Column
Lxfin = .Find("*", [A1], xlFormulas, , xlByRows, xlPrevious).Row
Cxfin = .Find("*", [A1], xlFormulas, , xlByColumns,
xlPrevious).Column
End With

fera l'affaire souhaitée si on veut se prémunir de cette sorte de
difficulté.

Salutations .