Ouvrir feuille avec clic sur cellule excel [Résolu/Fermé]

Signaler
Messages postés
4
Date d'inscription
mercredi 21 septembre 2011
Statut
Membre
Dernière intervention
23 septembre 2011
-
Messages postés
12185
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
21 septembre 2020
-
Bonjour,

Je suis en train de faire une base de données concernant la gestion d'un petit stock dans excel 2003

J'ai ma liste de produit en feuil1"produit"
J'ai fait un formulaire en feuil2."fiche"

Je voudrais savoir s'il est possible en cliquant sur le produit (1 cellule de la feuille "produit", accéder à la fiche et que toute les données de la ligne soient copiées dans la "fiche".

J'y arrive en utilisant un bouton mais pas en cliquant sur la cellule.

j'ai cherché partout comment faire et je n'ai rien trouvé.

J'espère que quelqu'un pourra m'aider, et je vous en remercie d'avance.





4 réponses

Messages postés
12185
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
21 septembre 2020
2 495
Bonjour,
Tu peux utiliser les événements de ta feuille. Pour infos les événements disponibles pour l'objet WorkSheet sont :

Utiles pour ton cas :
Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
==> la procédure se déclenche lors d'un double clic sur la feuille juste avant le 2nd clic...

Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
==> la procédure se déclenche lors d'un clic droit sur la feuille

Worksheet_SelectionChange(ByVal Target As Range)
==> la procédure se déclenche lors d'un changement de sélection de cellule dans ta feuille

Worksheet_Change(ByVal Target As Range)
==> la procédure se déclenche lorsque le contenu d'une cellule est modifiée

------------------------------------------------------------------------------------------------

Pas utiles pour ton cas : (mais je les cite quand même pour info)
Worksheet_Calculate()
==> la procédure se déclenche lorsque la feuille est recalculée uniquement si l'option de calcul automatique n'est pas activée

Worksheet_Activate()
==> la procédure se déclenche lorsque la feuille est activée

Worksheet_Deactivate()
==> la procédure se déclenche lorsque la feuille est désactivée

Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
==> la procédure se déclenche lors d'un clic sur un lien dans la feuille

Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
==> la procédure se déclenche lors de la mise à jour d'un TCD dans ta feuille

Tests à effectuer pour faire ton choix :
Codes :
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Column <> 1 Then Exit Sub
MsgBox "Ca ne fonctionne que pour la première colonne"
End Sub

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
If Target.Column <> 1 Then Exit Sub
MsgBox "Ca ne fonctionne que pour la première colonne"
End Sub


Mise en place :
- copier ces deux codes,
- ouvrir le classeur, clic droit sur l'onglet de la feuille concernée, Visualiser le code,
- coller le code et refermer la fenêtre Visual Basic Editor

Tests :
- double-clic n'importe ou dans la feuille (sauf colonne A)
- Clic droit n'importe ou dans la feuille (sauf Col A)
- Clic droit ou double-clic dans la colonne A

Tu testes et tu dis...

A noter : L'inconvénient du clic droit, c'est l'activation du menu contextuel habituellement lié au clic droit. Il est possible de le désactiver par VBA...
Messages postés
4
Date d'inscription
mercredi 21 septembre 2011
Statut
Membre
Dernière intervention
23 septembre 2011

Merci beaucoup .
Je vais revoir tout ce que tu as écris et je te tiendrais au courant.
Encore merci.
cordialemement

Sol.C.
Messages postés
12185
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
21 septembre 2020
2 495
N'hésite pas!
Messages postés
4
Date d'inscription
mercredi 21 septembre 2011
Statut
Membre
Dernière intervention
23 septembre 2011

bonjour,

Je reviens solliciter de l'aide car encore un petit souci même si j'ai un peu progressé avec les conseils de PIJAKU que je remercie encore.

En effet, j'arrive, en cliquant sur n'importe quelle cellule de la colonne A à accéder à la feuille2, mais je n'arrive à copier en C3(feuil2) que le contenu de la cellule A1 de la feuille 1, alors que si je clique en A2 de la feuille I je veux que la C3 prenne le contenu de la ligne2.

je ne sais si je me suis fais bien comprendre, mais j'ai besoin d'aide.

exemple : feuille 1
col A col B col c
robe orange verte
pantalon marron xxxx

Voici mon code :
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

If Target.Column = 1 Then
Sheets("Feuil1").Select
Range("A1").Copy
Sheets("Feuil2").Select
Sheets("Feuil2").Range("C3").PasteSpecial

Sheets("Feuil1").Select
Range("B1").Copy
Sheets("Feuil2").Select
Sheets("Feuil2").Range("C4").PasteSpecial

End If

End Sub

- Si je clique sur robe j'arrive à copier la ligne 1 dans la colonne C3 de la feuil2
Mais, lorsque je clique sur pantalon, au lieu de copier la ligne pantalon, c'est toujours la ligne robe qui se colle.


qu'est-ce qui me manque.


merci encore de m'aider
Messages postés
12185
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
21 septembre 2020
2 495
Salut,
Dans ton code, tu copies systématiquement Range("A1") et Range("B1").
Or ça n'est pas ce que tu veux...
Toi tu veux : lors d'un double clic dans la colonne A : copier la cellule ou tu clic et la cellule d'à côté colonne B. Soit :
Before Double Clic
If Target.Column = 1 Alors 'Target = Range dans lequel je double clic...
Target.copy
Feuille2 C3.PasteSpecial
Target.Offset(0, 1).Copy
Feuille2 C4.PasteSpecial
End
Soit en vrai VBA :


oh et puis non, je vais te laisser chercher... Si tu n'as pas trouvé d'ici cet après midi, demande...
Messages postés
4
Date d'inscription
mercredi 21 septembre 2011
Statut
Membre
Dernière intervention
23 septembre 2011

Bonsoir,

Eh bien, j'y suis arrivée.

Avec ton aide, j'ai pu écrire un code qui fonctionne
le voici :

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

If Target.Column = 1 Then
Target = Target.Cells
Target.Copy
Sheets("feuil2").Range("C3").PasteSpecial
Target.Offset(0, 1).Copy
Sheets("feuil2").Range("C4").PasteSpecial
Target.Offset(0, 2).Copy
Sheets("feuil2").Range("C5").PasteSpecial
Target.Offset(0, 3).Copy
Sheets("feuil2").Range("C6").PasteSpecial
Sheets("feuil2").Activate
End If
End Sub

Je ne sais pas si cette fois je suis en vrai VBA., mais en tout cas ca fonctionne.
J'accepte les critiques.

Maintenant, je vais continuer à avancer., le week-end.
je te dis encore une fois merci pour ton aide .
Bon Week-end...

Sol.C
Messages postés
12185
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
21 septembre 2020
2 495
Bonjour Sol.C
Tout d'abord bravo et bienvenue dans l'univers fantastique du VBA.
Maintenant la porte est ouverte....
Pas de critique, une "amélioration" de ton code, qui est sommes toutes fort exact.
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Column = 1 Then
    Range(Target, Target.Offset(0, 3)).Copy Sheets("feuil2").Range("C3")
    Sheets("feuil2").Activate
End If
End Sub

En fait, l'objet Range peux "représenter" à la fois une cellule mais aussi et surtout une plage.
Range("A1") est une plage de cellules d'une seule cellule : A1
range("A1:A18") est une plage de cellule.
Dans ton code tu dis :
ByVal Target As Range
Target.Copy
Target.Offset(1, 0).Copy
etc...
Donc en fait, tu fais :
Range("A1").copy
Range("A2").copy
etc...
Or puisqu'il s'agit d'un range, tu peux faire : Range("A1:A23").Copy
Soit, avec Offset : Range(Target, Target.Offset(22, 0)).Copy

Ok?
A+