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 !
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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 !
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
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+
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
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+
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+
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" <anonymousA@wanadoo.fr> a écrit dans le message de news: 1127988931.382065.184300@g49g2000cwa.googlegroups.com...
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
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+
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.
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
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.
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.
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" <anonymousA@wanadoo.fr> a écrit dans le message de news: 1127993282.736905.158580@g43g2000cwa.googlegroups.com...
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
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.
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,
fera l'affaire souhaitée si on veut se prémunir de cette sorte de difficulté.
Salutations .
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,
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,