Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

VBA : Création de fonction de sélection

  • Initiateur de la discussion Initiateur de la discussion Kiseki
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Kiseki

XLDnaute Occasionnel
Bonjour,


Je souhaiterai créer une fonction qui sélectionne jusque la dernière cellule non vide (ctrl+maj+bas).

J'ai la version Sub :

Code:
Sub Selectto()
    Range("F6", Range("F6").End(xlDown)).Select
End Sub

Mais je n'arrive pas à la faire marcher comme une fonction.



J'utiliserai bien "décaler" mais j'ai plusieurs tableau de BD sur la même feuille et souhaiterai éviter d'avoir 36 feuilles avec chaque BD.

Sinon une fonction permettant d'inclure cette action :

ctrl+maj+down et/ou ctrl+maj+right


Je n'aurait qu'à faire un NOM qui aurait la formule :

=Selectto(F6) : Afin de sélectionner F6 et tout le bas jusqu'à la dernière case non vide.

=Selectto(F6;1) : 1 pour bas, 2 pour droite, -1 pour haut, -2 pour gauche.



Ce serait super de pouvoir inclure ctrl+maj+bas à la fonction "decaler" (donc pas nbval(F:F).




Merci,
 
Re : VBA : Création de fonction de sélection

Bonjour.
Essayez cette fonction:
VB:
Function ColTabÀ(ByVal PlageDép As Range, Optional ByVal PlagExam As Range = Nothing) As Range
Dim F As Worksheet, LMax As Long, NbL As Long
On Error GoTo RienTrouvé
Set F = PlageDép.Worksheet: If PlagExam Is Nothing Then Set PlagExam = F.UsedRange
LMax = PlagExam.Find("*", F.Cells(1, 1), xlValues, xlWhole, xlByRows, xlPrevious).Row
On Error GoTo 0
NbL = LMax - PlageDép.Row + 1: If NbL < 1 Then GoTo CEstToutVide
Set ColTabÀ = PlageDép.Resize(NbL)
Exit Function
RienTrouvé: Resume CEstToutVide
CEstToutVide: Set ColTabÀ = Nothing
End Function
Code:
=ColTabÀ(Feuil1!$F$6)
devrait pouvoir servir de référence à un nom.

Pour reprendre votre exemple:
VB:
Function Selectto(ByVal PlageDép As Range) As Range
    Set Selectto = Range(PlageDép, PlageDép.End(xlDown))
End Function
Mais elle engloberait des cellules non complètement vides techniquement telles que contenant des chaînes vide ou des formules rendant des chaînes vide

À+
 
Dernière édition:
Re : VBA : Création de fonction de sélection

Bonjour Kiseki, Dranreb,

Voici ce à quoi je suis arrivé :

Code:
Function SelCell(Cellule As Range, Optional Direction As Integer = 1) As Range
Dim p1 As Range, C As Integer, L As Integer

Set p1 = Cellule.Resize(1, 1)

Select Case Direction
    Case 1  'bas
        L = 1: C = 0
    Case 2  'droite
        L = 0: C = 1
    Case -1 'haut
        L = -1: C = 0
    Case -2 'gauche
        L = 0: C = -1
    Case Else
        MsgBox "Mauvais paramètre"
        Exit Function
End Select

'Boucle jusqu'à la prochaine cellule vide
Do Until IsEmpty(p1)
    Set p1 = p1.Offset(L, C)
Loop
Set p1 = p1.Offset(-L, -C)  'sinon une cellule de trop

Set SelCell = Range(Cellule.Resize(1, 1), p1)
End Function

A+
 
Re : VBA : Création de fonction de sélection

Bonjour G.C.Exl
Pas besoin de boucle pénalisante, et pour rester dans l'idée de départ:
VB:
Function SelCell(ByVal Cellule As Range, Optional Direction As Long = 1) As Range
Dim Direct As XlDirection
Select Case Direction
    Case 1:  Direct = xlDown 'bas
    Case 2:  Direct = xlToRight 'droite
    Case -1: Direct = xlUp 'haut
    Case -2: Direct = xlToLeft 'gauche
    Case Else: MsgBox "Mauvais paramètre": Exit Function
    End Select
Set SelCell = Range(Cellule(1, 1), Cellule(1, 1).End(Direct))
End Function
À+
 
Re : VBA : Création de fonction de sélection

Merci beaucoup,


@Dranreb :

La première version évoluée ne fonctionne pas.

L'adaptation de "Selectto" fonctionne mais ne ce met pas à jour automatiquement (par exemple la somme de mon nom définis) mais si je sélectionne le nom, c'est juste.
Cela fonctionne très bien pour une liste (donc pour moi ce me semble bon)

L'adaptation plus simple de GCE fonctionne très bien aussi

@Grand Chaman Excel :

Ta fonction fonctionne mais comme l'autre adaptation il me faut revalider la formule qui y fait référence pour qu'une somme ce mette à jour par exemple.
Cela fonctionne très bien pour une liste (donc pour moi ce me semble bon)





Je pense que cela réglerai mon soucis, je vous remercie.


Mais pourquoi ne ce mettent t'elles pas à jour ?
 
Re : VBA : Création de fonction de sélection

La première version évoluée ne fonctionne pas.
Chez moi ColTabÀ fonctionne, mais ne se réactualise pas en effet quand utilisé dans Excel.
Je n'avais pas pensé à ça. Conçu plutôt pour récupérer une plage dans du code.
Ça vient de ce qu'Excel ne voit aucune raison de la réévaluer étant donné que son résultat semble dépendre uniquement de la valeur d'une cellule passée en paramètre.
Solution: Spécifier Toute la colonne à partir de la cellule de départ: ColTabÀ(A2:A65536)
À+
 
Re : VBA : Création de fonction de sélection

Bonjour Grand Chaman Excel
J'y avais pensé aussi bien évidemment mais je ne l'ai pas proposé car j'estimais qu'il était préférable de la recalculer seulement si des valeurs de cellules changent par suite de calculs dans la plage spécifiée plutôt qu'à chaque fois qu'Excel entreprend un calcul quelconque dans le classeur.
Cordialement

J'en profite pour signaler que les nombres de lignes et de colonnes de la plage ainsi définie ne doivent pas être exploitée dans des formules: cela pourait aboutir à des références circulaires très difficiles à comprendre, où même Excel ne s'y retrouverait pas !
À+
 
Re : VBA : Création de fonction de sélection

Merci beaucoup,


Tu veux dire que je ne peux pas utiliser une telle fonction dans une formule ?

Donc limitée dans une liste de validation ou autre n'exploitant pas le contenu ?
 
Re : VBA : Création de fonction de sélection

Bonjour
Non, je veux simplement dire qu'il faudrait éviter qu'un élément de la liste ait besoin du nombre de ligne de l'ensemble pour pouvoir être calculé: supposez qu'il rende une chaîne vide en fin selon le cas: ça le changerait, il pourrait même devenir indéfini !
À+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Microsoft 365 Code VBA
Réponses
2
Affichages
597
Réponses
6
Affichages
1 K
J
Réponses
13
Affichages
1 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…