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

Tortuel - 8 oct. 2013 à 18:21
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 17 oct. 2013 à 22:38
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

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
9 oct. 2013 à 19:34
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.
1
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 9/10/2013 à 19:44
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.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
8 oct. 2013 à 18:29
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é.
0
Tortuel Messages postés 7 Date d'inscription mardi 8 octobre 2013 Statut Membre Dernière intervention 26 avril 2014
9 oct. 2013 à 18:30
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
0
jordane45 Messages postés 38136 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 avril 2024 344
Modifié par jordane45 le 9/10/2013 à 20:24
Bonsoir,

Comme le dit Ucfoutu, il y a de nombreux tutoriels, exemples, faqs..sur le net permettant à tout débutant de pouvoir apprendre le VBA.

Voici quelques exemples pris au hasard (mais qui devraient vous servir)
http://www.excel-pratique.com/fr/vba/proprietes.php
http://www.excelabo.net/excel/range_pas_a_pas
http://msdn.microsoft.com/fr-fr/library/6cd3f6w1(v=vs.90).aspx
http://www.excelabo.net/excel/macro_lors_modification_cellule

Et aussi ceux là (peut-être même à lire en priorité )

http://silkyroad.developpez.com/VBA/ManipulerChainesCaracteres/
http://silkyroad.developpez.com/VBA/LesVariables/
http://silkyroad.developpez.com/VBA/EvenementsFeuille/

Pour apprendre, il faut s'y mettre... ^^

Bonne continuation.
Cordialement,
jordane
0
Tortuel Messages postés 7 Date d'inscription mardi 8 octobre 2013 Statut Membre Dernière intervention 26 avril 2014
9 oct. 2013 à 20:44
Merci pour vos réponses, je connais déjà ces tutoriels :)
J'ai aussi le bouquin "le VBA pour les nuls" et je m'y mets autant que je peux.

Cordialement,
Tortuel
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 9/10/2013 à 21:12
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.
0
Tortuel Messages postés 7 Date d'inscription mardi 8 octobre 2013 Statut Membre Dernière intervention 26 avril 2014
10 oct. 2013 à 11:05
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 :)
0
Tortuel Messages postés 7 Date d'inscription mardi 8 octobre 2013 Statut Membre Dernière intervention 26 avril 2014
13 oct. 2013 à 22:25
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 ?)
0
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é".
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
17 oct. 2013 à 22:38
Target("C2:C7")
n'a aucun sens. Target est un objet Range (la cellule qui, modifiée, déclenche l'évènement WotkSheet_Change)
0
Rejoignez-nous