Contrôler la récupération de données avec VBA
Bonjour à tous,
Je sollicite votre aide aujourd'hui sur un petit projet. Je souhaite faire 2 choses (j'en ai réussi 1 sur 2).
1- Je souhaite récupérer et afficher sur la Feuil1, les valeurs présentes sur une ligne de ma Feuil2. En saisissant une valeur de numéro présente dans la colonne C, je récupère les données de toute la ligne. Cela marche bien avec la formule Excel dans les cellules (voir pièce jointe). Mon besoin est ceci : je souhaite passer les formules en macro et lancer (à l'aide d'un raccourci clavier) la récupération ou la mise à jour des données d'une ligne seulement quand je le souhaite. En d'autres termes, je ne veux pas que les modifications apportées dans une cellule sur la Feuil2 modifie les valeurs déjà récupérées sur la Feuil1. Une fois les informations récupérées, elles sont vérifiées puis validées avec une signature (liste prédéfinie avec validation de données).
2- Après récupération des données de ma ligne, une signature dans une cellule de la colonne O verrouille automatiquement la ligne avec le mot de passe "YYY". J'ai réussi à le faire à l'aide d'une macro (voir pièce jointe) mais les modifications sur la Feuil2 se font toujours automatiquement sur la Feuil1. Je souhaite qu'aucune modification des données de la ligne ne soit possible après signature.
Mon besoin résumé est donc de pouvoir récupérer les données une seule fois (à l'aide d'une macro) et que celles-ci ne changent pas automatiquement en cas de modification sur la source (Feuil2). Puis une fois validée avec une signature dans une cellule de la colonne O, que la ligne se verrouille automatiquement avec le mot de passe "YYY".
Pouvez-vous m'aider svp ? Merci
Bonjour
1. Vous devriez compléter votre profil parce que déjà à la lecture de votre fichier, je pense que vous êtes sous excel MAC. Quelle est votre version ?
2. Vous avez un code change dans votre feuille 1. Est-il toujours d'application ?
Cordialement
Bonjour Dan et merci pour votre réponse.
1. J'ai envoyé ma demande depuis mon Mac effectivement mais le fichier sera utilisé sur un système Windows 10.
2. Oui, le code change est toujours d'actualité grâce à la macro liée à la Feuil1. A terme, c'est le résultat final que je souhaite obtenir en terme de verrouillage de ligne (dès que l'utilisateur signe, il est averti qu'aucune modification ne sera possible avant de confirmer son choix). Le mot de passe pour retirer la protection est "YYY".
En restant votre disposition pour toute information complémentaire.
Cordialement.
Bonjour
Dans la feuille 1 en colonne M, vous avez "Autre mat", cela ne correspond à rien dans la feuille 2. Normal ?
Sinon voyez votre fichier en retour et entrez le numéro en colonne C de la feuille 1
Cordialement
Merci Dan.
Je viens d'essayer le fichier. Il fonctionne mais :
1. Les valeurs de la ligne s'affichent sur la Feuil1 systématiquement sur la même ligne que sur la Feuil2. Exemple : Quand je me positionne en C11 et que j'entre 3600, je souhaite récupérer sur la ligne 11 les données de la ligne 4 de la Feuil2. Avec le fichier "atomic-essai2", quand je saisi 3600 en C11, les données s'affichent sur la ligne 4 peu importe où je me positionne dans la colonne. C'est la même remarque pour les autres valeurs de la colonne C sur la Feuil2.
Est-il possible de modifier la macro de façon à récupérer sur la ligne active les données correspondante au numéro saisi ?
2. Je réadapterai la macro plus tard à mon besoin spécifique et j'aimerais savoir si :
En changeant dans la macro la source de récupération ("Feuil2") par une source sur serveur sous ce format "X:\Dossier\Sous-dossier\[Fichier_source.xlsx]Feuil2", le fichier fonctionnera pareil ?
Aussi, je confirme que la colonne M de la Feuil1 ne correspond à rien sur la Feuil2. C'est normal.
Merci.
1. Les valeurs de la ligne s'affichent sur la Feuil1 systématiquement sur la même ligne que sur la Feuil2.
Oui juste ! désolé... mais ce n'est pas compliqué à modifier. Dans le code remplacez
Range("A" & lig) = Sheets("Feuil2").Range("A" & lig) 'datepar
Range("A" & Target.Row) = Sheets("Feuil2").Range("A" & lig) 'dateFaites de même pour toutes les lignes en dessous. range("B"..., Range("C"... etc
Pour votre question au point 2, là il va falloir dire où se trouve la feuille et avec les serveurs ce n'est jamais simple....
Il faut le chemin du seveur, le fichier et la feuille.
Bonjour Dan,
Merci pour ton temps et la correction apportée. J'ai le résultat que je voulais avec le fichier essai.
Effectivement l'adaptation au serveur me pose problème. Le fichier source (équivalent de Feuil2 de l'exemple) est sur un serveur partagé. L'idée est de pouvoir indexer dans la macro, le chemin d'accès du fichier source sur le serveur puis de préciser la feuille sur laquelle la recherche du numéro sera faite en colonne C.
Il y a différents serveur qui ont été renommé avec des lettres différentes , mais c'est le serveur X qui m'intéresse d'où le modèle utilisé plus bas (X:\Dossier\Sous-dossier\[Fichier_source.xlsx]Feuil2").
J'ai essayé de bidouiller des trucs mais je m'y prends peut-être mal. Je te remercie pour ton coup de main.
Cordialement.
Bonjour
Je dirais de faire un essai comme ceci. dans le code déclarer le répertoire dans une variable Chemin puis aller cherche le nom du fichier pour l'ouvrir
Dim chemin As String, Fichier As String
chemin = "X:\Dossier\Sous-dossier\"
Fichier = Application.GetOpenFilename
Shell "explorer.exe /e," & Fichier, vbNormalFocusensuite une fois ouvert, on peut aller chercher les données de la feuille 2. Reste à savoir comment la feuille 2 est nommée, si elle est seule dans le fichier et surtout si elle peut changer de nom.
Une fois ouvert on pourrait aussi copier la feuille du serveur dans le fichier concerné puis seulement exécuter le code
Pour les mises à jour, on peut virer la feuille avant de réimporter la feuille modifiée dans le fichier se trouvant sur le serveur
C'est juste une idée mais à voir chez vous
Un exemple dans ce fil peut être --> https://forum.excel-pratique.com/s/goto/299387