[VBA] Bouton de commande figé à une cellule ou comment récupérer la ligne du bouton.

Fred

XLDnaute Nouveau
Bonjour à tous,

C'est la première fois que j'utilise votre forum pour poster mais j'ai déjà lu quelques sujets. C'est très intéressant. =)

Mon problème est le suivant :
Je dois créer un tableau principal dans lequel sont archivées des données pour résumer des formulaires. Chaque formulaire correspond à une feuille Excel. Pour récupérer les données, aucun soucis. Maintenant, en bout de chaque ligne, j'ai mis un bouton (de formulaire) permettant d'accéder directement au formulaire de la feuille i. Cependant, """le bouton""" récupère l'information principale sur la ligne qui est un texte toujours situé en colonne A. J'ai donc eu l'idée d'utiliser activecells, de récupérer la ligne et ensuite d'aller en colonne A. Mais si l'utilisateur a cliqué ailleurs dans la table, on ne peut plus rejoindre le bon onglet (feuille).
Je voudrais donc savoir, malgré de nombreuses recherches, s'il était possible qu'en cliquant sur mon bouton j'ai accès à la ligne sur laquelle est positionné mon bouton ??? Ce serait vraiment géant ! =)

Merci d'avance. J'espère bientôt apporter mon aide également. =)
 

kjin

XLDnaute Barbatruc
Re : [VBA] Bouton de commande figé à une cellule ou comment récupérer la ligne du bou

Re,
Pour sûr que si tu n'adjoins pas le code idoine il ne se passera pas grand chose
Puisqu'on a pas de fichier, en supputant que dans la colonne A on a les noms de feuille dans la plage A1:A10, colle ce code dans le module de la feuille qui contient tes boutons, si tant est que j'ai compris...
Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, Range("A1:A10")) Is Nothing Then
    Cancel = True
    Sheets(CStr(Target)).Activate
End If
End Sub
...en double-clikant sur une cellule de la plage A1:A10, la maco devait te permettre d'activer l'onglet correspondant
Sinon, fait passer un fichier exemple

Edit : j'oubliais, les boutons ne sont plus utiles

A+
kjin
 
Dernière édition:

Fred

XLDnaute Nouveau
Re : [VBA] Bouton de commande figé à une cellule ou comment récupérer la ligne du bou

Effectivement, je n'ai pas joint le code. Je répare cette erreur immédiatement.
Code:
Sub Link_form()

Dim i As Integer
Dim k As Integer
Dim Sheet As Worksheet
Dim Val As Variant
Dim Val_text As String

k = ActiveCell.Row 'We get the index of the line.
'TROUVER UN MOYEN POUR OBTENIR L'INDICE DE LA LIGNE DANS LA VARIABLE K POUR ENSUITE
' FAIRE UNE RECHERCHE SUR LES FEUILLES QVEC LE CONTENU DE LQ CELLULE A,k.
' COMME CQ ON FQIT UNE SEULE MQCRO POUR TOUTES LES FORMES ET TOUS LES BOUTONS DE RECHERCHES !!!

For i = 1 To Worksheets.Count
Val_text = (Range("A" & k).value)
If Sheets(i).Name = Val_text Then
Sheets(i).Select
RESPONSE = "OK"
Exit Sub
End If
Next i

If RESPONSE <> "OK" Then
R = MsgBox("ERROR: This tab can't be found.", vbExclamation)
Exit Sub
End If

End Sub

Je préfère un bouton car c'est plus visuel pour la personne qui utilisera le fichier après moi. Une fois fini, ce fichier sera géré intégralement par le manager qui en a besoin. Or, ce fichier devra durer dans le temps et donc je veux qu'ils soit facile à utiliser et viseul. =)

Merci.
 

kjin

XLDnaute Barbatruc
Re : [VBA] Bouton de commande figé à une cellule ou comment récupérer la ligne du bou

Bonsoir,
Si tu ne veux pas double-clicker...renome tes boutons en incluant dans leur nom le N° de la ligne auquel il se réfère et dans le code associé
ex : ici un bouton dans la ligne 2 nommé Btn2
Code:
NomDuBouton = Application.Caller
k = Int(Mid(NomDuBouton, 4, Len(NomDuBouton)))
A+
kjin
 

Fred

XLDnaute Nouveau
Re : [VBA] Bouton de commande figé à une cellule ou comment récupérer la ligne du bou

Merci pour ta réponse.
J'ai utilisé des boutons de formulaires et pas des boutons de commande. Il faut donc que je change chaque bouton en bouton de commande et que je les renomme en fonction de la ligne sur laquelle ils sont.
Comme ça, quand je clique sur le bouton, il lance une seule macro de recherche et il va, si elle existe, à la feuille correspondante à l'indice contenu dans le nom du bouton. Je nomme mes feuilles avec le numéro du changement donc je peux imaginer nommer mes boutons de la même façon. Non ?

Tu pourrais aussi commenter ton code stp ? A quoi sert Mid() ? Je comprends pas ce que vient faire le 4 ? Que signifie Len(NomDuBouton) ? Aussi, NomDubouton = Application.Caller ?

Merci ! (y)
 
Dernière édition:

kjin

XLDnaute Barbatruc
Re : [VBA] Bouton de commande figé à une cellule ou comment récupérer la ligne du bou

Bonsoir,
C'est moi qui suit obligé de fournir un fichier :rolleyes:
Dans l'éditeur vbe, tu as la touche F1, c'est très instructif
A+
kjin
 

Pièces jointes

  • fred.xls
    20 KB · Affichages: 504
  • fred.xls
    20 KB · Affichages: 524
  • fred.xls
    20 KB · Affichages: 526

Fred

XLDnaute Nouveau
Re : [VBA] Bouton de commande figé à une cellule ou comment récupérer la ligne du bou

C'est absolument super ce que tu me donnes, ça marche nikel. Mais je ne veux pas copier / coller bêtement, je veux comprendre chaque point du code. Dans mon dernier message, je te demandais les points que je ne comprennais pas. Tu pourrais m'expliquer ? Merci ! =) Mais c'est génial le bout de code que tu m'as filé !

A quoi sert Mid() ? Je comprends pas ce que vient faire le 4 ? Que signifie Len(NomDuBouton) ? Aussi, NomDubouton = Application.Caller ?
 

kjin

XLDnaute Barbatruc
Re : [VBA] Bouton de commande figé à une cellule ou comment récupérer la ligne du bou

A quoi sert Mid() ? Je comprends pas ce que vient faire le 4 ? Que signifie Len(NomDuBouton) ? Aussi, NomDubouton = Application.Caller ?
Je t'ai répondu
Dans l'éditeur vbe, tu as la touche F1, c'est très instructif
Dans VBE, lorsque tu ne connais pas la signification d'un mot il suffit de mettre ce mot en surbrillance dans le code et d'appuyer sur la touche F1, l'aide VBA me parait suffisemment clair concernant ce que tu demandes.
Néanmoins, je t'invite à revenir si ça n'était pas le cas
A+
kjin
 

Fred

XLDnaute Nouveau
Re : [VBA] Bouton de commande figé à une cellule ou comment récupérer la ligne du bou

Merci. J'ai effectivement utilisé F1 qui est bien mieux que ce que je pensais. =)
Cependant, je ne comprends pas pourquoi juste avec
Code:
nomdubouton = Application.Caller
tu nommes le bouton Fredi avec i le numéro de la ligne ?
D'après l'aide Office, Application.Caller :
Cette propriété renvoie des informations relatives à la manière dont Visual Basic a été appelé (pour plus d'informations, consultez la section Remarques).
Ici Visual Basic est appelé grâce a un bouton et du coup nomdubouton doit juste indiqué la ligne ?

Merci, je n'aurais jamais réussi ça solo... =)
 

kjin

XLDnaute Barbatruc
Re : [VBA] Bouton de commande figé à une cellule ou comment récupérer la ligne du bou

Re,
Bon, on va tâcher d'être clair
J'ai nommé tes boutons Fred2, Fred3,...2, 3 représentant le n° de la ligne à laquelle chaque bouton est associé, Fred8 pour ligne n°8 donc.
Caller dans le cas présent renvoie le nom de l'objet qui a activé la macro, donc si c'est par le bais du bouton Fred8 par exemple
Code:
nomdubouton = Application.Caller
nomdubouton renvoie Fred8
Il ne reste plus qu'à récuperer le n° de ligne avec les fonctions Mid et Len
Tu auras compris que le nom des boutons n'a aucune importance, mais que le nombre de caractères avant le premier à extraire lui doit être constant
A+
kjin
 

Discussions similaires

Statistiques des forums

Discussions
312 177
Messages
2 085 972
Membres
103 073
dernier inscrit
MSCHOE16