Récupérer une ligne en fonction d'une donnée dans une cellule

Signaler
-
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
-
Bonjour
Je souhaite faire un programme dans Excel qui me permettrait de récupérer une ligne en fonction d'une valeur dans une cellule.
J'ai une ligne dans une feuille "A" : composé de 3 cellules.
Je veux récupérer la ligne si l'utilisateur saisit une valeur numérique dans une cellule, dans une autre feuille (l'utilisateur saisit une quantité dans une cellule et je veux récupérer la ligne dans une autre feuille)
Je veux que la récupération de la ligne se fasse que lorsque l'utilisateur clique sur un bouton "Valider".

Si vous avez des idées, pour m'aider, je débute dans le VBA et j'ai du mal pour faire des choses aussi compliqués...

Merci à vous,

5 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
229
Ce n'est pas nécessaire pour si simple et si peu !
commence donc par écrire dans l'évènement worksheet_change :
msbox target.value & vbcrlf & target.address
va ensuite dans une cellule de ton choix, saisis-y n'importe quoi puis change de cellule et regarde ce qui se produit (cela devrait déjà t'éclairer)
De manière plus générale et plus franche : tu ne devrais pas commencer à développer sans avoir au moins appris les rudiments de ton outil.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
229
Ce ne sont pas les tutoriels qui manquent sur la toile, pourtant !
Bien que, personnellement, je n'en aie suivi aucun, l'aide VBA (que j'ai lue) l'ayant suffi.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
229
Bonjour,
Intéresse-toi (ton aide VBA) :
- à l'évènement WorkSheet_change et à ce qu'est son paramètre Target (nul besoin d'un bouton "valider")
- à IsNumeric

Reviens (c'est ici la règle) avec le code au moins tenté.
Messages postés
7
Date d'inscription
mardi 8 octobre 2013
Statut
Membre
Dernière intervention
26 avril 2014

J'ai regardé la signification de ces fonctions mais je n'arrive pas à comprendre comment faire mon code pour que cela marche.
Est-ce bien de commencer par du pseudo-code pour représenter ce que je veux ?

Cordialement,
Tortuel
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
229
Moi, je veux revenir sur cette question :
"Est-ce bien de commencer par du pseudo-code pour représenter ce que je veux ? "
Il se trouve que ce pseudo-code serait du genre :
Si valeur-cellule modifiée alors
  Si modifiée par une valeur numérique alors
    copier toute la ligne où cette modification a été effectuée
    la coller sur une autre feuille
  fin si
fin si

et il se trouve que Excel/VBA :
- pour la 1ère ligne de ce code : sait que cela a été fait car déclenche un évènement (workSheet_Change). Et qu'il sait quelle cellule a été modifiée (Target) et donc la ligne concernée (Target.row). Cet évènement est parfaitement exposé dans ton aide VBA (frappe Worksheet.Change dans ton aide)
- pour la seconde ligne, la fonction Isnumeric (dont je t'ai parlé) de VBA permet de savoir si oui ou non la saisie est de type numérique. Cette fonction est parfaitement exposée dans l'aide VBA et y est assortie d'une exemple fort clair.
- pour les 3ème et 4ème lignes : ouvre ton aide VBA sur le mot Copy et choisis la rubrique "Range.copy, Méthode". La également : exposé clair, assorti d'un exemple non moins clair !
Tu vois ? ==>> Il n'y a plus qu'à !
Reviens avec ton code d'essai sur ces bases, si encore en difficulté malgré ces lectures indispensables.
Messages postés
7
Date d'inscription
mardi 8 octobre 2013
Statut
Membre
Dernière intervention
26 avril 2014

Merci pour ta réponse, je vais faire des essais et je te dit si cela fonctionne mais ton cheminement me semble clair, maintenant y a plus qu'a me faire comprendre de VBA :)
Messages postés
7
Date d'inscription
mardi 8 octobre 2013
Statut
Membre
Dernière intervention
26 avril 2014

Voila mon code :
Private Sub Worksheet_Change(ByVal Target As Range)
If IsNumeric(Target, Cells(C2:C5)) <> 0 Then
Cells(Target.Row, 3)= Worksheets("Feuil1").Range(1,1).Copy _
destination:=Worksheets("Feuil2").Range("A5")
Else
MsgBox "Entrée une valeur numérique !"

End If

End Sub

Ça ne marche pas, il me dit erreur de syntaxe sur le IsNumeric (ce que je comprends mais moi je veux l'appliquer que dans la cible C2:C5 non ?)
Messages postés
29848
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 octobre 2020
338
Bonsoir.
Tu dois tester si la valeur de la cellule est numérique DANS la plage de cellules qui t'intéresse.
Tu ne peux pas le faire en une seule fois. ..
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
229
IsNumeric(Target, Cells(C2:C5))
n'a de toutes manières aucun sens et met en évidence que tu n'as pas ouvert ton aide VBA sur la fonction Isnumeric

voici ce que tu y aurais lu :

Renvoie une valeur de type Boolean qui indique si une expression peut être interprétée comme un nombre.

Syntaxe
IsNumeric(expression)


cette fonction n'utilise qu'un paramètre (la valeur dont on veut examiner si elle est une expression numérique)
Public Sub Worksheet_Change(ByVal Target As Range)
If IsNumeric(Range("C2:C7")) And (Target("C2:C7")) <> 0 Then
MsgBox "Vous allez commander cette référence"
Else
MsgBox "Entrée une valeur numérique !"

End If

End Sub


J'ai testé ce code, qui est à la suite d'un code sur Worksheet_Change et il me donne "Nom ambiguë détecté".
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
229
Target("C2:C7")
n'a aucun sens. Target est un objet Range (la cellule qui, modifiée, déclenche l'évènement WotkSheet_Change)