XL 2016 Formulaire et renvoi de donnée dans une base

Sebski

XLDnaute Nouveau
Bonjour à tous,

Actuellement employé par une association qui présente quelques difficultés à gérer leur effectif, j'ai pris sur moi de créer un petit logiciel sous Excel pour leur faciliter la tâche à l'avenir.

J'ai procédé par des formulaires qui permettent d'intégrer de nouvelles données dans la base et aussi de générer des listes selon différents critères (abonnement à la revue, membre à jour de ses cotisations ou non...)

C'est avec le formulaire de gestion des adhérents existants que je rencontre un problème.
La première idée était de pouvoir faire remonter dans ce formulaire l'ensemble des coordonnées d'un membre à partir de son numéro d'adhérent ou de son nom de famille associé à son prénom dans le cas d'homonymes. Sur ce point, c'est bon.

En revanche, une fois les données remontées dans le formulaire et éventuellement modifiées, je ne parviens pas à les faire redescendre dans la base de données. L'idée n'étant pas de créer une nouvelle ligne mais de modifier celle qui a été remontée au préalable. Et là, je ne vois pas du tout comment faire.

Le fichier étant un peu trop volumineux pour le forum, vous le trouverez au bout de ce lien
Fichier Excel listing

Si l'un de vous voit une manière de faire, je suis prêt à apprendre!

Merci beaucoup!
 
Dernière édition:

Sebski

XLDnaute Nouveau
Il me semble que c'est ce que tu fais pour les renouvellements. Ca ne fonctionne pas ?
@danielco Cela ne fonctionne effectivement pas, lorsque j'active le code sous le bouton "renouvellement adhésion" les modifications apportées aux données initialement remontées dans le formulaire sont remplacées par les données initiales. Après je ne sais pas si ces données sont renvoyées dans la base de données vu qu'elles sont identiques à celles qui y figurent déjà.

Je ne sais pas si c'est très clair... Concrètement, je fais remonter les coordonnées d'un adhérent dans le formulaire, je modifie son numéro de téléphone. Je clique sur "renouvellement adhésion". Dans le formulaire son nouveau numéro est remplacé par l'ancien et dans la base de données, rien ne change.

@fanfan38 J'obtiens le même résultat qu'avec le code sous le bouton "renouvellement adhésion"
 
Dernière édition:

Sebski

XLDnaute Nouveau
Il y a vraiment quelque chose qui m'échappe. Mon code dit

VB:
Private Sub btnRenew_Click()
Dim numligne As Long
numligne = CboID.ListIndex + 1  ' on utilise l'index du selecteur pour trouver le numéro de la ligne excel

Sheets("Liste des adhérents").Activate

Worksheets("Liste des adhérents").Cells(numligne, 1).Value = CboID ' on remplace par les nouvelles données

Worksheets("Liste des adhérents").Cells(numligne, 2).Value = TxtSociety

Ce qui ne produit aucun résultat, aucun changement n'est appliqué dans la base de données.

Alors que si je fais:
Code:
Private Sub btnRenew_Click()
Dim numligne As Long
numligne = CboID.ListIndex + 1  ' on utilise l'index du selecteur pour trouver le numéro de la ligne excel

Sheets("Liste des adhérents").Activate

Worksheets("Liste des adhérents").Cells(numligne, 1).Value = CboID ' on remplace par les nouvelles données

Worksheets("Liste des adhérents").Cells(numligne, 2).Value = "Youpi"

J'ai bien Youpi qui s'affiche dans la deuxième case de la ligne qui était remontée dans le formulaire.

Excel ne comprendrait pas quand je lui indique de prendre la valeur qui est indiquée dans la case texte "Txtsociety" ? Est-ce un problème d'adresse? Faudrait-il lui indiquer la case "Txtsociety" dans le formulaire "FrmMember" (la désignation du formulaire utilisé dans le cas présent)?
 
Dernière édition:

fanfan38

XLDnaute Barbatruc
Bonjour
Fichier corrigé
si tu double clic sur une ligne celle ci s'affiche dans le formulaire
A+ François
pour ton dernier post c'est pas cboID mais cbxID
c'est pour cela que je précise toujours l'origine me. ou frmmember ca évite ce genre de faute
 

Pièces jointes

  • listadherent.xlsm
    47.5 KB · Affichages: 8
Dernière édition:

fanfan38

XLDnaute Barbatruc
Bonjour
Par contre j'ai été surpris du poids de ton fichier
Je l'ai donc repris
Dis moi si c'est bon
A+ François
ps fichier modifié à 6h28
 

Pièces jointes

  • listadherent.xlsm
    78.4 KB · Affichages: 18
Dernière édition:

Sebski

XLDnaute Nouveau
Bonjour @fanfan38,
Bonjour le Forum,

Nous y sommes presque!

Pour le moment l'intégration des données modifiées créé une nouvelle ligne dans la base. Est-il possible d'inscrire les données dans la ligne qui a été remontée dans le formulaire? Ou alors de supprimer cette ligne pour ne laisser que celle nouvellement créée?

Le bouton "Démission" colore uniquement la ligne au dessus de celle qui est traitée dans le formulaire.

VB:
Private Sub CommandButton1_Click() 'enreg modif
  Dim lig As Long
  If Len(Me.Tag) > 0 Then lig = CLng(Me.Tag)
  enregdonnee (lig)
  Me.Tag = ""
End Sub

Enfin @fanfan38, si ce n'est pas trop long pourrais-tu m'expliciter ce que les fonctions "Len" et "CLng" font ou signifient ? "enregdonnee (***)" Je peux le mettre comme ça en fin de code pour ordonner l'enregistrement de ce qui est spécifié entre les parenthèses?

En tous cas, merci beaucoup pour ton aide!
 

fanfan38

XLDnaute Barbatruc
affdonnee(lig) et enregdonnee(lig) sont des macros qui évitent d'inscrire plusieurs fois la même chose
lig étant la ligne qu'il faut traiter...
len(mot) donne la longueur du mot
clng(expression) convertit un chiffre saisit en texte en un entier long...
Pour le reste: j'ai pas compris
Intégration=nouvel adhèrent donc dernière ligne
Modification= même ligne

A+ François
 

Sebski

XLDnaute Nouveau
@fanfan38 Merci pour ces éclaircissement.

En effet, je me suis mélangé dans le vocabulaire.

Je voulais dire: la modification des données engendre la création d'une nouvelle ligne dans la base de données, ligne qui apparaît juste au dessus de celle qui a été remontée dans le formulaire. Est-il possible de faire que la ligne modifiée remplace la ligne qui a été remontée dans le formulaire?
 

fanfan38

XLDnaute Barbatruc
Bonjour
Autant pour moi... C'est une erreur que j'ai corrigé
Dans la macro de frmmember
VB:
Private Sub CbxID_Change()
If Me.CbxID.ListIndex = -1 Then Exit Sub
CbxName.ListIndex = CbxID.ListIndex
CbxFirstName.ListIndex = CbxID.ListIndex
'RECHERCHE DE LIGNE UTILISEE DANS EXCEL
Dim numligne As Long
numligne = CbxID.ListIndex + 2
Me.Tag = numligne
End Sub
ce n'est pas
numligne = CbxID.ListIndex + 1
mais
numligne = CbxID.ListIndex + 2
A modifier sur ton appli
A+ François
 

Discussions similaires

Réponses
27
Affichages
1 K
Réponses
4
Affichages
522
Réponses
15
Affichages
1 K

Statistiques des forums

Discussions
315 089
Messages
2 116 098
Membres
112 661
dernier inscrit
ceucri