Macro : rechercher + action

Bonjour à tous,

Je suis tout nouveau dans la création de Macro et l'utilisation de VBA.
Du coup je galère pas mal avec la création de Macro, surtout celle-ci, d'où ma demande d'aide :

J'aimerais créer une Macro qui me permette de copier des données une fois qu'une recherche a été effectuée.
Je m'explique (parce que je ne peux malheureusement pas partager mon fichier, ordinateur d'entreprise) :
J'ai un fichier avec trois feuilles :
- la première comme index
- la deuxième utilisée comme formulaire de saisie
- la troisième en tableau de données

J'aimerais en saisissant un numéro (qui corresponds à une clé unique, un numéro de dossier si on veut), on puisse copier les données du formulaire pour les enregistrer dans le tableau de données.
Par exemple :
Index : je cherche le dossier numéro D-000123
En cliquant sur valider cela copierais les valeurs du formulaire : nom prénom âge
Et cela colle les informations dans la feuille de données (en retrouvant la cellule où se trouve le numéro de dossier D-000123) dans les colonnes correspondantes.

J'aimerais en plus que si le dossier est inconnu, cela affiche un message d'erreur de type : "numéro de dossier inconnu".

J'ai réussi à faire des recherches en VBA, à renvoyer le numéro de la ligne où se trouve le numéro de dossier par exemple.
Mais je n'arrive pas à générer une action lié à ce numéro de ligne.
J'arrive également créer un message en boîte de dialogue.
C'est juste la copie selon le numéro de ligne trouvé qui me bloque et me frustre depuis plusieurs jours et plusieurs forums écoulé.
En même temps, dès que ça dépasse mes compétences, je me sens un peu largué j'avoue ...

Merci d'avance à toute personne qui pourras m'aider sur ce sujet qui me paraît insurmontable T_T
Bonne soirée !
Sync

Bonsoir,

Tu as déjà bien mâché le travail, une fois que tu as ton numéro de ligne, tu vas vouloir transférer des données d'une feuille à une autre si j'ai bien compris, donc il va falloir travailler avec les cellules via des Range pour obtenir et éditer les valeurs des cellules, ce à quoi il faut également que tu fasses attention c'est de préciser les feuilles, si tu ne précises pas la feuille source/cible, ça va sélectionner la feuille active. Quand tu auras passé ces problèmes tout ira mieux, pour préciser une feuille tu peux faire de différentes façons, à toi de voir celle qui te convient le mieux.

J'espère avoir compris tes blocages, j'ai un peu de mal à bien visualiser uniquement à l'écrit...

Bonsoir Ausecour,

Merci pour ton aide ! J'ai essayé de mieux comprendre l'utilisation des Range mais à chaque essai, j'ai des erreurs qui m'ouvrent le débogueur.
J'ai essayé de poster mon fichier mais ça ne marche pas, je n'arrive pas envoyer un fichier avec des Macros T_T
Mon entreprise nous bloque ...

Aussi, voici un exemple simplifié de ce que je cherche à faire :
Feuil1

ABCDE
1IDNOMPRENOMSEXEAGE
21
32

Feuil2

AB
1Indiquez votre ID :
2Indiquez votre prénom :
3Indiquez votre âge :

J'aimerais que lorsque je clique sur un bouton en Feuil2, une Macro se lance.
La Macro :
- regarderait le numéro ID indiqué en Feuil2 Cellule B1
- chercherait si cet ID est trouvable en Feuil1
Si Non => alors ouverture d'une box de message avec "Identifiant inconnu"
Si oui => alors copie des cellules B2 et B3 de Feuil2 dans les colonnes C et E de la ligne dans laquelle se trouve l'ID de la cellule B1 de la Feuil2.

J'espère que c'est plus clair ?
Est-ce que vous pourriez m'aider pour cette Macro ?

Merci par avance !
Sync

Bonsoir,

Bien joué pour avoir rendu le besoin compréhensible sans fichier, pénible la boite

Il faut premièrement se méfier de quelque chose avec les boutons, en fonction de si c'est un contrôle de formulaire ou un contrôle activeX, l'un va avoir son code directement rattaché à la feuille et bloque l'appel d'autres feuilles que celles où il est présent, l'autre va avoir une macro à laquelle on va le rattacher qui sera directement codée dans un module, qui lui pourra appeler des éléments en dehors de la feuille où se trouve le bouton. Pour le cas du contrôle qui possède son code directement dans la feuille, il faut ajouter une ligne qui appellera un programme codé dans un Module, exemple avec un programme qui s'appellerait test:

test

et si il a des paramètres par exemple:

test 1 True "coucou"

Pour travailler avec d'autres feuilles que la feuille active, il faut savoir premièrement que quand on écrit Range("A1") dans le code, cela comprend implicitement ActiveSheet.Range("A2") si on ne lui précise pas une autre feuille, il faudra donc préciser quand on veut utiliser des valeurs en dehors de la feuille 2.

Pour utiliser une feuille on peut faire de 2 façons, en l'appelant par son CodeName, ou en l'appelant par son Name, l'un est modifiable depuis la fenêtre VBA et l'autre depuis le classeur Excel, et ils s'appellent de façon différente.

J'ai joins un fichier exemple avec ce code:

Sub test()
MsgBox Sheets("MaFeuille").Name
MsgBox Feuil1.CodeName
End Sub

Sheets fait appel à la propriété Name, et quand on écrit juste le nom de la feuille sans guillemets on fait appel à la propriété CodeName.

Une fois qu'on sait comment faire appel à une autre feuille on peut facilement comparer les cellules de 2 feuilles différentes, si on veut tester que A1 est pareil dans les 2 feuilles on procède comme suit:

If range("A1") = Feuil1.Range("A1") Then

Dans ton cas comme c'est une recherche sur une zone il faudra utiliser la méthode Find de ton objet Range: https://docs.microsoft.com/fr-fr/office/vba/api/excel.range.find

Tu pourras aussi utiliser With si besoin: https://docs.microsoft.com/fr-fr/office/vba/language/concepts/getting-started/using-with-statements

J'espère avoir pu te faire avancer avec cette réponse, bonne soirée!

Rechercher des sujets similaires à "macro rechercher action"