XL 2016 userform pour modifier base de données qui ne modifie rien

Dan

XLDnaute Barbatruc
Bonjour,

Le souci vient du fait que vous avez nommé votre macro initialize comme ceci --> Private Sub UserForm3_Initialize().
Pour l"ouverture d'une userform, vous ne devez jamais mentionner le nom de l'userform. Il vous faut donc uniquement supprimer le chiffre 3.

Pour le code, vous pouvez le remplacer par celui-ci
VB:
Private Sub UserForm_Initialize()
Dim Ws As Worksheet

Set Ws = Sheets("BASE DE DONNEES")
Me.ComboBox1.List = Ws.ListObjects("T_data").ListColumns(1).DataBodyRange.Value
Me.ComboBox2.List = Ws.ListObjects("T_data").ListColumns(6).DataBodyRange.Value
End sub
Dites moi si ok et si autre chose est à vérifier

Cordialement
 

bugg

XLDnaute Junior
bonjour, déjà, merci pour vos explications!
ensuite j'ai modifié le formulaire, mais j'ai une erreur lorsque je modifie la fiche sur la init cbb
je joins la copie écran et le fichier exemple pour plus de compréhension.
merci d'avance pour votre patience !

erreur init cbb.png
 

Pièces jointes

  • 13_erreur-pour-modifier-base-de-donnees-via-userform2-1c (1).xlsm
    62.5 KB · Affichages: 9

Dan

XLDnaute Barbatruc
Bonjour Bugg,

Désolé de mon retour tardif...

Etes-vous toujours en attente d'une solution ? Auquel cas, je regarde votre fichier

Cordialement

Edit : voici ce que vous devez faire

1. Allez dans le menu excel Formules -> Gestionnaire de noms
2. Supprimez les noms --> "Ldossier" et "Nom"
3. Allez dans votre userform3
4. Sélectionnez la combo1 et supprimez la valeur que vous avez mise dans ROWSOURCE. Ensuite faite de même avec la combo2.
5. Supprimez le chiffre 3 dans Private Sub UserForm3_Initialize(). Le nom de la macro doit être --> Private Sub UserForm_Initialize()
6. Remplacez la Sub Init_CBB() par la macro ci-dessous
VB:
Sub Init_CBB()
Dim Ws As Worksheet

Set Ws = Sheets("BASE DE DONNEES")
Me.ComboBox1.List = Ws.ListObjects("T_data").ListColumns(1).DataBodyRange.Value
Me.ComboBox2.List = Ws.ListObjects("T_data").ListColumns(6).DataBodyRange.Value
End Sub

Dans l'attente de votre retour
 
Dernière édition:

bugg

XLDnaute Junior
Qu'est-ce qu'elles sont claires vos explications : Chapeau ! et merci !
je vais tester, car oui je tente toujours de trouver la solution...
questions quand-même, pourquoi faut-il supprimer les noms LDossier et Nom ?
pour ce qui est de rowsource, si j'ai bien compris tout ce que j'ai pu lire sur le forum (dans ma recherche désespérée d'une solution), ça empêche vba de modifier la ligne concernée et du coup rajoute une ligne au tableau de données, est-ce que j'ai bien compris ?
en tout cas merci pour votre aide, !!!!
 

bugg

XLDnaute Junior
Whouah ! CA MARCHE ! des jours que je tourne en rond, à copier et recopier des lignes et vous avec votre macro, ça fonctionne !
bon, maintenant, je vais tenter de le mettre en application sur le fichier réel, je vous tiens au courant ! et suis curieuse de connaître la réponse aux questions .
en tout cas Merci !
 

bugg

XLDnaute Junior
Suis désespérée !
j'ai tenté de le transposer dans le vrai fichier, mais il ne montre rien sans le rowsource,
j'ai modifié les noms du fichier joint par souci de confidentialité, mais si vous pouviez m'aider (et m'expliquer) de la même façon que la précédente, ce serait tout simplement génial !
merci beaucoup d'avance !
 

Pièces jointes

  • 31_64b__travail_accueil-telephonique_anonyme-v4-test1 (5).xlsm
    268.3 KB · Affichages: 17

Dan

XLDnaute Barbatruc
Bonjour,
questions quand-même, pourquoi faut-il supprimer les noms LDossier et Nom ?
1. Ces deux noms ne servaient à rien dans le fichier car dans le code que je vous ai proposé, on se sert uniquement du nom T_data qui reprend l'ensemble du tableau.

2. Dans votre dernier fichier votre premier problème c'est que la base de données n'est mise en forme en tableaux structurés. Donc ma proposition ne saurait pas fonctionner.
Pour le constater reprenez votre fichier que vous aviez posté en premier :
- allez sur votre feuille Base de données.
- cliquez dans une cellule du tableau
- allez dans formules --> Puis gestionnaire de noms
- là vous verrez un nom nommé T_Data qui correspond à la définition de votre tableau dans cette feuille

j'ai tenté de le transposer dans le vrai fichier, mais il ne montre rien sans le rowsource,
3. Normal, on dirait que votre userform2 est identique à l'userform 3 et c'est dans cette dernière que le rowsource était défini.
NB : Pour voir si vous avez une valeur dans rowsource,
- cliquez sur une combobox
- dans le menu VBA -> Affichage, cliquez sur Fenetre propriété (cela vous affiche la fenetre à gauche si elle n'y est déjà pas par défaut)
- allez dans les propriétés de l'objet
- descendez jusqu'à la valeur Rowsource et voyez si vous avez une donnée mentionnée.

4. Je vais revoir votre fichier pour la partie à problème mais de base vous pouvez déjà faire ceci dans votre feuille base de données
- sélectionnez la plage A1 à AB12
- Allez dans le menu Accueil
- Cliquez sur l'icone "Mettre sous forme de tableau"
- dans la fenêtre qui s'ouvre, cocher la case "mon tableau comporte des entetes (puisque l'on a sélectionné la ligne 1 des titres) puis OK --> cela va créer un nom automatiquement (ici Tableau1) dans le gestionnaire de noms
- Allez dans le gestionnaire de noms et supprimez les valeurs T_data et aussi BDContacts
- cliquez sur le nom Tableau1 et renommez le T_Data. A noter que vous pourriez aussi le nommer BDContacts mais dans ce cas il faudra réadapter le code d'ouverture userform en changeant T_Data par BDContacts
- Allez dans votre userform2 et dans le code Private Sub UserForm2_Initialize(), supprimez le chiffre 2. De manière générale, vous devez toujours avoir Private Sub UserForm_Initialize() et ce, quelle que soit l'userform à ouvrir
- Puisque votre userform contient le code que je vous ai donné, il vous reste à exécuter le code pour ouvrir l'userform2...

Désolé si j'ai été si long....🥴

Regardez si vous y arrivez sinon je vous posterai le fichier.

Si vous devez remettre à jour la feuille base de données et afin de bien repartir, dites moi d'abord si vous avez plus de lignes ou si vous n'en avez que 12 comme je le vois dans le fichier.
 
Dernière édition:

bugg

XLDnaute Junior
Bonjour,

1. Ces deux noms ne servaient à rien dans le fichier car dans le code que je vous ai proposé, on se sert uniquement du nom T_data qui reprend l'ensemble du tableau.

2. Dans votre dernier fichier votre premier problème c'est que la base de données n'est mise en forme en tableaux structurés. Donc ma proposition ne saurait pas fonctionner.
Pour le constater reprenez votre fichier que vous aviez posté en premier :
- allez sur votre feuille Base de données.
- cliquez dans une cellule du tableau
- allez dans formules --> Puis gestionnaire de noms
- là vous verrez un nom nommé T_Data qui correspond à la définition de votre tableau dans cette feuille


3. Normal, on dirait que votre userform2 est identique à l'userform 3 et c'est dans cette dernière que le rowsource était défini.
NB : Pour voir si vous avez une valeur dans rowsource,
- cliquez sur une combobox
- dans le menu VBA -> Affichage, cliquez sur Fenetre propriété (cela vous affiche la fenetre à gauche si elle n'y est déjà pas par défaut)
- allez dans les propriétés de l'objet
- descendez jusqu'à la valeur Rowsource et voyez si vous avez une donnée mentionnée.

4. Je vais revoir votre fichier pour la partie à problème mais de base vous pouvez déjà faire ceci dans votre feuille base de données
- sélectionnez la plage A1 à AB12
- Allez dans le menu Accueil
- Cliquez sur l'icone "Mettre sous forme de tableau"
- dans la fenêtre qui s'ouvre, cocher la case "mon tableau comporte des entetes (puisque l'on a sélectionné la ligne 1 des titres) puis OK --> cela va créer un nom automatiquement (ici Tableau1) dans le gestionnaire de noms
- Allez dans le gestionnaire de noms et supprimez les valeurs T_data et aussi BDContacts
- cliquez sur le nom Tableau1 et renommez le T_Data. A noter que vous pourriez aussi le nommer BDContacts mais dans ce cas il faudra réadapter le code d'ouverture userform en changeant T_Data par BDContacts
- Allez dans votre userform2 et dans le code Private Sub UserForm2_Initialize(), supprimez le chiffre 2. De manière générale, vous devez toujours avoir Private Sub UserForm_Initialize() et ce, quelle que soit l'userform à ouvrir
- Puisque votre userform contient le code que je vous ai donné, il vous reste à exécuter le code pour ouvrir l'userform2...

Désolé si j'ai été si long....🥴

Regardez si vous y arrivez sinon je vous posterai le fichier.

Si vous devez remettre à jour la feuille base de données et afin de bien repartir, dites moi d'abord si vous avez plus de lignes ou si vous n'en avez que 12 comme je le vois dans le fichier.
pour la réponse, oui, j'ai plus que 12 lignes j'en aurai une infinité.
pour les explications, j'admire votre patience et votre gentillesse pour le temps passé !
maintenant je vais tester ! je vous tiens au courant pour savoir si j'ai encore besoin de vous, et éventuellement du fichier, mais je pense que je vais tout de suite dire oui au fichier, comme ça je comparerai votre fichier au mien, et je pourrai alors,, si vous êtes d'accord, vous demander les explications sur les différences...
merci encore !
bon maintenant, faut que je teste ...
encore merci
 

Dan

XLDnaute Barbatruc
Bonjour

pour la réponse, oui, j'ai plus que 12 lignes j'en aurai une infinité.
1. Ok. Lorsque vous allez remettre la base de données à jour avec les bonnes données, vous devez absolument les insérer dans les 12 lignes actuelles.
Une fois terminé, votre tableau nommé T_Data, ne doit pas comporter de lignes vides (important ! et à vérifier).
Avec les tableaux structuré vous ne devez rien mettre en forme au préalable. Donc pas de lignes vides avec mise en forme.
Dans l'attente de votre retour pour les modifications suivantes

2. Une question aussi : pourquoi avez-vous mis votre userform2 en Multipage
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 559
Messages
2 089 641
Membres
104 239
dernier inscrit
STEVEALL