Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

En VBA Excel, comment trouver la fin d'une feuille ?

8 réponses
Avatar
jean.paulo
Bonjour.

Dans une routine publiée par Windows News, j'ai deux problèmes :

Comment déterminer la taille d'une feuille (dernière cellule utilisée) en
VBA. La fonction
x..lastcell.. ne semble pas donner celle de la feuille, mais plutot celle
d'un range ?

Comment utiliser un lien 'hyperlink' vers une feuille, si le nom de celle-ci
comporte
un espace (comme 'page (2)').

Merci.

--
Jean.paulo

8 réponses

Avatar
jean.paulo
J'ai trouvé sur le Web quelques exemples. Ce n'est pas simple, mais ça doit
aller.

Pourtant, une dernière question :

Existe t'il une fonction qui traduise facilement les noms de colonnes (a3)
en offset ?



--
Jean.paulo

"jean.paulo" a écrit dans le message de
news:
Bonjour.

Dans une routine publiée par Windows News, j'ai deux problèmes :

Comment déterminer la taille d'une feuille (dernière cellule utilisée) en
VBA. La fonction
x..lastcell.. ne semble pas donner celle de la feuille, mais plutot celle
d'un range ?

Comment utiliser un lien 'hyperlink' vers une feuille, si le nom de


celle-ci
comporte
un espace (comme 'page (2)').

Merci.

--
Jean.paulo



Avatar
electron
Bonjour,

la ligne suivante te permet d'atteindre la dernière cellule utilisée :

Selection.SpecialCells(xlCellTypeLastCell).Select

en espérant que cette information t'aidera ...


"jean.paulo" a écrit :

(dernière cellule utilisée) en VBA. La fonction


Avatar
electron
Re Bonjour,

j'ai utilisé cet artifice :

colonne = ActiveCell.Column
ligne = ActiveCell.Row
offsetcolonne = 2
offsetligne = 5
Cells(ligne + offsetligne, colonne + offsetcolonne).Select

Je sais qu'il existe un truc du genre L()+1,C(+2) que je ne retrouve plus ...

Peut-être que les ligne de code ci-dessu t'inspireront.



"jean.paulo" a écrit :


Existe t'il une fonction qui traduise facilement les noms de colonnes (a3)
en offset ?


Avatar
electron
Re Re Bonjour,

J'ai retrouvé ma ligne de code pour les déplacements relatifs :

par exemple pour un copier / coller(valeur)

Range("A2").Select
Selection.Copy
ActiveCell.Offset(1, 3).PasteSpecial (xlPasteValues)

C'est un peu plus élégant ...
Avatar
Hervé
Bonsoir,
Voici une fonction qui te retourne la plage de la feuille passée en
argument :

Sub TestPlageUtilisee()
Dim LaPlage As Range
'gère l'erreur de la feuille vide
On Error Resume Next
Set LaPlage = Plage(ActiveSheet)
If Err.Number = 0 Then
MsgBox LaPlage.Address
End If
End Sub

Function Plage(Fe As Worksheet) As Range
With Fe
Set Plage = .Range(.Cells(1, 1), _
.Cells( _
.Cells.Find("*", .[A1], -4123, , _
1, 2).Row, _
.Cells.Find("*", .[A1], -4123, , _
2, 2).Column))
End With
End Function

Pour le lien sur une feuille avec espace, , il te faut mettre le nom de la
feuille entre apostrophes :
ActiveSheet.Hyperlinks.Add [A1], "", "'Feuil 3'!C19"

Hervé.

"jean.paulo" a écrit dans le message de news:

Bonjour.

Dans une routine publiée par Windows News, j'ai deux problèmes :

Comment déterminer la taille d'une feuille (dernière cellule utilisée) en
VBA. La fonction
x..lastcell.. ne semble pas donner celle de la feuille, mais plutot celle
d'un range ?

Comment utiliser un lien 'hyperlink' vers une feuille, si le nom de
celle-ci
comporte
un espace (comme 'page (2)').

Merci.

--
Jean.paulo



Avatar
jean.paulo
Merci.

J'ai utilisé un truc un peu plus sommaire offset = asc(lettre) - asc ("A")
avec prise
en compte des "AA", etc par multiplication par 27.

Mais il s'avère en fait inutile, car la fonction trouvée pour chercher la
dernière
cellule (donnée par plusieurs sites, dont MS), retourne en fait un offset
et non pas un nom de cellule.

Mais il est curieux qu'il n'existe pas une fonction intégrée pour ces
conversions.

Jean.paulo

"electron" a écrit dans le message de
news:
Re Bonjour,

j'ai utilisé cet artifice :

colonne = ActiveCell.Column
ligne = ActiveCell.Row
offsetcolonne = 2
offsetligne = 5
Cells(ligne + offsetligne, colonne + offsetcolonne).Select

Je sais qu'il existe un truc du genre L()+1,C(+2) que je ne retrouve plus


...

Peut-être que les ligne de code ci-dessu t'inspireront.



"jean.paulo" a écrit :


> Existe t'il une fonction qui traduise facilement les noms de colonnes


(a3)
> en offset ?



Avatar
jean.paulo
Non, justement, cette fonction ne marche pas toujours...


Mais la fonction MS qui retourne en fait un offset, est correcte :
Function LastCell(ws As Worksheet) As Range
Dim LastRow&, LastCol%

' Error-handling is here in case there is not any
' data in the worksheet

On Error Resume Next

With ws

' Find the last real row

LastRow& = .Cells.Find(What:="*", _
SearchDirection:=xlPrevious, _
SearchOrder:=xlByRows).Row

' Find the last real column

LastCol% = .Cells.Find(What:="*", _
SearchDirection:=xlPrevious, _
SearchOrder:=xlByColumns).Column

End With

' Finally, initialize a Range object variable for
' the last populated row.

Set LastCell = ws.Cells(LastRow&, LastCol%)

End Function

--
Jean.paulo

"electron" a écrit dans le message de
news:
Bonjour,

la ligne suivante te permet d'atteindre la dernière cellule utilisée :

Selection.SpecialCells(xlCellTypeLastCell).Select

en espérant que cette information t'aidera ...


"jean.paulo" a écrit :

> (dernière cellule utilisée) en VBA. La fonction



Avatar
jean.paulo
Oui, cette fonction est similaire à celle donnée par MS.

Pour les noms avec espaces, j'avais fini par trouver le truc du "'". Mais je
bute
encore sur le probleme des feuilles purement graphiques, qui ne contiennent
pas de cellule "A1"...

Merci.
--
Jean.paulo

"Hervé" a écrit dans le message de
news:
Bonsoir,
Voici une fonction qui te retourne la plage de la feuille passée en
argument :

Sub TestPlageUtilisee()
Dim LaPlage As Range
'gère l'erreur de la feuille vide
On Error Resume Next
Set LaPlage = Plage(ActiveSheet)
If Err.Number = 0 Then
MsgBox LaPlage.Address
End If
End Sub

Function Plage(Fe As Worksheet) As Range
With Fe
Set Plage = .Range(.Cells(1, 1), _
.Cells( _
.Cells.Find("*", .[A1], -4123, , _
1, 2).Row, _
.Cells.Find("*", .[A1], -4123, , _
2, 2).Column))
End With
End Function

Pour le lien sur une feuille avec espace, , il te faut mettre le nom de la
feuille entre apostrophes :
ActiveSheet.Hyperlinks.Add [A1], "", "'Feuil 3'!C19"

Hervé.

"jean.paulo" a écrit dans le message de news:

> Bonjour.
>
> Dans une routine publiée par Windows News, j'ai deux problèmes :
>
> Comment déterminer la taille d'une feuille (dernière cellule utilisée)


en
> VBA. La fonction
> x..lastcell.. ne semble pas donner celle de la feuille, mais plutot


celle
> d'un range ?
>
> Comment utiliser un lien 'hyperlink' vers une feuille, si le nom de
> celle-ci
> comporte
> un espace (comme 'page (2)').
>
> Merci.
>
> --
> Jean.paulo
>