Ouvrir 1 formulaire sur 1 enregistrement défini

JeanGio

XLDnaute Nouveau
Bonjour à tous,

Sous Excel 2007, très tâtonnant en VBA, après bien des recherches, je n'arrive pas à trouver la solution possible au problème suivant.

J'essaye d'ouvrir un formulaire (de modification) sur un enregistrement (ligne) précis d'une feuille ("Individus") à partir d'une valeur (N° de fiche "Adhérent") stockée temporairement dans une cellule tampon ("Memo") en page d'accueil (page qui ne contient aucune autre donnée).

Le contexte :

Pour éviter les saisies ou modifications malencontreuses des différents utilisateurs possibles du fichier, j'ai souhaité une procédure indirecte pour les modifications.

Le formulaire de Consultation (ouverture par bouton "Membres" en page "Accueil") comporte un bouton "Modifier", qui permet d'abord de stocker la valeur du N° Adhérent (col P de la feuille "Individus") dans une cellule "Memo", avant de fermer ce formulaire de Consultation et d'ouvrir ensuite celui de Modification.

Pour le moment, j'arrive juste à récupérer le n° Adhérent dans le formulaire de Modification, mais pas le contenu de la ligne correspondant à ce N°.

Merci d'avance à qui pourra me mettre sur la bonne voie (ou fournir le code exemple ...)
 

Pièces jointes

  • FACTICE.xlsm
    203.5 KB · Affichages: 48

Modeste

XLDnaute Barbatruc
Re : Ouvrir 1 formulaire sur 1 enregistrement défini

Bonjour JeanGio et bienvenue à toi,

Je n'ai pas testé, ni avancé plus loin, ne sachant pas:
- si j'avais bien compris
- si tu continueras seul avec une première indication (vu ce qui est déjà fait, je suppose que tu devrais t'en sortir)

Si tu ajoutes la ligne suivante (dans la partie de ton code où tu vas charger le formulaire avec les coordonnées de l'adhérent concerné)
Code:
laLigne = Application.Match([MEMO], Sheets("INDIVIDUS").[P:P], 0)
la variable laLigne aura pour valeur le n° de ligne (dans la feuille de calcul) où figure l'adhérent en question.
Dans ton exemple, laLigne vaudra 6, pour l'adhérent 052

Ai-je bien compris? Cette indication te suffit-elle?
 

JeanGio

XLDnaute Nouveau
Re : Ouvrir 1 formulaire sur 1 enregistrement défini

Bonjour Modeste,

Merci pour ton accueil et pour ta réponse rapide.
Pendant mes diverses recherches, j'avais déjà constaté une fréquente participation de ta part pour aider les autres, sur ce forum vers lequel Google m'a souvent dirigé.

Je pense que tu as bien compris le problème.
Sans être à l'aise avec le code, je décrypte quand même que ta réponse va dans le sens recherché.
Cela étant, comme le gruyère je suis plein de trous, et je m'y prends certainement mal pour placer le code comme il faut.
Où et comment déclarer "laLigne" ? Dans sub userForm initialize ?
Pour le moment, je bute sur une "incompatibilité de type" au moment de l'ouverture du formulaire de modification.

Si tu as encore du temps et de la patience, je suis preneur.

Encore merci :)
 

Modeste

XLDnaute Barbatruc
Re : Ouvrir 1 formulaire sur 1 enregistrement défini

Re-bonjour et bonsoir :)

En regardant ton code d'un peu plus près ... je comprends moins ta question :confused:

Quand tu sélectionnes un "Rang" dans ton UserFormMembres, tu garnis les différents TextBox, dans la procédure ComboBox1_Change(). Pour trouver la ligne de l'adhérent, tu utilises Ligne = Me.ComboBox1.ListIndex + 3
... et donc tu l'as déjà, le n° de ligne correspondant à l'élément sélectionné!? Dès lors je ne comprends pas bien
j'arrive juste à récupérer le n° Adhérent dans le formulaire de Modification, mais pas le contenu de la ligne correspondant à ce N°
puisque tes TextBox se remplissent avec Ind.Cells(Ligne, i), peux-tu repréciser ta question?
 

JeanGio

XLDnaute Nouveau
Re : Ouvrir 1 formulaire sur 1 enregistrement défini

Bonsoir Modeste,

Comme tu l'as vu, j'utilise 2 formulaires, d'aspect identique.

Le userFormMembres fonctionne sans problème avec les instructions liées à comboBox1 ou comboBox 2, et affiche bien les informations de la ligne sélectionnée, soit à partir du "Nom", soit à partir du "Rang".

Par contre, ce que je n'arrive pas à obtenir, c'est le remplissage du userFormMbrModif avec l'ensemble des mêmes informations.
Je sais juste récupérer le N° d'adhérent ("Rang").

Ce sera peut-être plus explicite avec une image (jointe) synthétisant le "parcours", qui est le suivant :
- ouverture de userFormMembres - sélection d'un individu (par le "Nom" ou le "Rang") - demande de passage en mode modification - mémorisation ("MEMO") de la valeur "Rang" de l'individu en cours - fermeture du userFormMembres - ouverture du userFormMbrModif, pour modification de la fiche - récupération de la valeur mémorisée ("MEMO") ... et là vient le problème.

Je n'ai pas su trouver la méthode pour afficher tout le contenu de la ligne correspondant à cette valeur "Rang" (272 sur l'exemple) à partir de la feuille "Individus".

Il est très possible que la solution soit évidente, mais comme je l'ai dit, je tâtonne beaucoup, et je rate sans doute bien des choses ...

Encore merci pour l'intérêt que tu portes à mon problème, et pour ta patience.
 

Pièces jointes

  • gecercom-pb.jpg
    gecercom-pb.jpg
    48.5 KB · Affichages: 31

Modeste

XLDnaute Barbatruc
Re : Ouvrir 1 formulaire sur 1 enregistrement défini

Bonjour,

On va finir par y arriver :p
Une première chose pose problème: dans ta feuille INDIVIDUS, en colonne P, tu as des valeurs numériques et d'autres ... qui ne le sont pas!? (si tu regardes bien, un petit triangle vert t'en avertit dans une série de cellules). Sur chacune de ces cellules, fais un clic, puis un autre clic sur le petit point d'exclamation qui apparaît et choisis "convertir en nombre".

Une fois ces rectifications effectuées, dans ton formulaire "UserFormMbrAjout", quand tu copies les valeurs du n° de fiche en colonne "Adhérent", il faut convertir le contenu du TextBox (qui est du texte, comme son nom l'indique) en numérique. Dans la procédure CommandValider_Click, écris plutôt Range("P" & L).Value = 1 * TextBox16.Value en ligne 95.
Fais éventuellement la même chose avec le contenu des autres TextBox dont tu aurais besoin qu'ils soient numériques, une fois copiés dans tes cellules.

Dans ton "UserFormMbrModif", cette fois et dans la procédure UserForm_Initialize, juste après avoir stocké le n° de membre dans ton TextBox16, ajoute les trois lignes suivantes:
VB:
laLigne = Application.Match([MEMO].Value, Ind.[P:P], 0)
TextBox2 = Ind.Cells(laLigne, 2)
TextBox3 = Ind.Cells(laLigne, 3)
Les Nom et Prénom de l'adhérent dont le n° est stocké dans ta cellule nommée MEMO devraient figurer dans le formulaire. Fais deux ou trois tests, pour t'assurer que ça fonctionne bien ... et dis-nous.

PS: je n'ai pas exploré le code de chaque UserForm pour détecter d'autres soucis, hein! Je me contente d'essayer de répondre au problème posé :)
 

JeanGio

XLDnaute Nouveau
Re : Ouvrir 1 formulaire sur 1 enregistrement défini

Bonjour Modeste,

Et tout de suite un grand merci :)
Ta solution fonctionne (voir image jointe).
Tu peux donc dire "on a fini par y arriver". :eek:

Pour les cellules de format différents, ça tient au fait que le fichier a été récupéré en l'état, avec un contenu disparate et d'assez nombreuses erreurs ou différences de méthode de saisie (c'est apparemment une migration de Works vers Excel).
Ce qui m'amène justement à vouloir contrôler le mode de fonctionnement futur.

Tes conseils pour la remise "aux normes" (présence du triangle vert notamment) m'amèneront à me pencher sur tout ce qui peut être source d'erreurs. Laborieusement je ne le cache pas ... mais les forums et les gens dévoués comme toi sont une aide précieuse.

Alors, encore un très grand merci, très bonne journée à toi, et (il y a de fortes chances) à plus tard.
Avec mes plus amicales salutations. :)
 

Pièces jointes

  • gecercom-OK.jpg
    gecercom-OK.jpg
    53 KB · Affichages: 35

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 909
Membres
101 836
dernier inscrit
karmon