XL 2010 Travail base de données et UserForm

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Twing83

XLDnaute Junior
Bonjour,

Je suis à la recherche d'un peu d'aide pour un petit projet que j'ai en cours.

A partir d'un fichier contenant mes 2 BdD (S et M), je souhaite pouvoir les consulter mais également les modifier à partir de UserForm.

J'arrive à afficher les 2 BdD dans mes 2 UserForm, mais je ne sais pas trop comment aborder l'ajout, la suppression et la modification dans S et M.

Mon point de départ est le UserForm S et je souhaite initialiser le UserForm M avec ma sélection dans S (CommandButton M).

J'aurai également besoin pour M de pouvoir défiler avec un SpinButton uniquement dans un item sélectionné (exemple NOM_54 de S a 68 items dans M).

En PJ le fichier d'exemple, j'ai pris soin de mettre des N° dans des labels sur les UserForm qui correspondent aux N° de colonnes correspondantes dans les tables.

Merci d'avance pour votre aide qui m'a à maintes reprises permis d'avancer dans différents projets.

Au plaisir de vous lire...
 

Pièces jointes

Solution
autre chose
ecrire 3 fois le meme code pour charger le userform dans 3 boutons différents... quel intérêt?? à part s'obliger à modifier 3 fois la meme chose si besoin ...?

à reproduire pour le SaveUSF_ToSheet
oui.. et non.. en fait, j'ai remplacé la varialbe Rng par "Trouve" je trouve justement, que c'est plus parlant..

du coup, nouvelle version avec option explicit et toutes les déclarations

et j'en ai profité pour corrigé l'histoire du ID qu'il ne faut incrémenter QUE s'il s'agit d'une nouvelle entrée
 

Pièces jointes

oui.. et non.. en fait, j'ai remplacé la varialbe Rng par "Trouve" je trouve justement, que c'est plus parlant..

du coup, nouvelle version avec option explicit et toutes les déclarations

et j'en ai profité pour corrigé l'histoire du ID qu'il ne faut incrémenter QUE s'il s'agit d'une nouvelle entrée
J'ai modifier ce bout de code pour initialiser la requête de M
VB:
Private Sub CommandButtonAfficherM_Click()
    UserFormM.ComboBox_S_COL_3.Value = Me.ComboBox_S_COL_3.Value
    UserFormM.Show
End Sub
 
J'ai modifier ce bout de code pour initialiser la requête de M
VB:
Private Sub CommandButtonAfficherM_Click()
    UserFormM.ComboBox_S_COL_3.Value = Me.ComboBox_S_COL_3.Value
    UserFormM.Show
End Sub
Et pour le moment, depuis la touche M, comme on veut rester sur le même ID (ou le nom) :
VB:
Private Sub UserForm_Initialize()
    Set Ws_S = Worksheets("S")
    Set Ws_M = Worksheets("M")
    Set TS_S = Ws_S.ListObjects("t_BDD_S")
    Set TS_M = Ws_M.ListObjects("t_BDD_M")
    
    'With TS_S
        'Me.ComboBox_S_COL_3.List = .ListColumns(3).DataBodyRange.Value
    'End With
End Sub
 
J'ai complété le code pour n'avoir que l'élément voulu en cliquant sur "M".

Ça commence à prendre forme 😀
Tu as encore du pain sur la planche. Lire les commentaires dans ce code
VB:
Private Sub CommandButtonRechercher_Click()
Dim ligne As Long
Dim ID As Long  ''ne sert à rien,
''elle fait planter le code si on tape quelque chose dans la combo qui n'existe pas

    If Me.ComboBox_S_COL_3 = "" Then
        MsgBox "Opération impossible, sélectionner un élément pour continuer !"
        Exit Sub
    End If

    ligne = Me.ComboBox_S_COL_3.ListIndex + 1
    With TS_S
        Me.TextBox_S_COL_4.Value = .DataBodyRange(ligne, 4)
        Me.TextBox_S_COL_9.Value = Format(.DataBodyRange(ligne, 9), "00000")
        Me.ComboBox_S_COL_7.Value = .DataBodyRange(ligne, 7)
        Me.ComboBox_S_COL_5.Value = .DataBodyRange(ligne, 5)
        ID = .DataBodyRange(ligne, 2) ' quelle est son utilité, vu que ce n'est pas une variable globale
    
        'UserFormM.ComboBox_S_COL_3.Value = Me.ComboBox_S_COL_3.Value
        'UserFormM.TextBox_S_COL_2.Value = .DataBodyRange(ligne, 2)
    End With
    
End Sub
 
Tu as encore du pain sur la planche. Lire les commentaires dans ce code
VB:
Private Sub CommandButtonRechercher_Click()
Dim ligne As Long
Dim ID As Long  ''ne sert à rien,
''elle fait planter le code si on tape quelque chose dans la combo qui n'existe pas

    If Me.ComboBox_S_COL_3 = "" Then
        MsgBox "Opération impossible, sélectionner un élément pour continuer !"
        Exit Sub
    End If

    ligne = Me.ComboBox_S_COL_3.ListIndex + 1
    With TS_S
        Me.TextBox_S_COL_4.Value = .DataBodyRange(ligne, 4)
        Me.TextBox_S_COL_9.Value = Format(.DataBodyRange(ligne, 9), "00000")
        Me.ComboBox_S_COL_7.Value = .DataBodyRange(ligne, 7)
        Me.ComboBox_S_COL_5.Value = .DataBodyRange(ligne, 5)
        ID = .DataBodyRange(ligne, 2) ' quelle est son utilité, vu que ce n'est pas une variable globale
   
        'UserFormM.ComboBox_S_COL_3.Value = Me.ComboBox_S_COL_3.Value
        'UserFormM.TextBox_S_COL_2.Value = .DataBodyRange(ligne, 2)
    End With
   
End Sub
Je confirme que j'ai encore de quoi m'occuper 🙂

En phase avec tes commentaires, l'ID ici ne sert strictement à rien.
Je cherchais à initialiser le UserFormM qui a besoin de l'ID directement depuis la recherche mais c'était une fausse bonne idée.
J'ai opté pour une nouvelle recherche au clic sur "M", c'est pas super beau mais ça fait le job 🙂

Je cherche maintenant à délimiter la plage de navigation pour un ID donné (ex ID = 54 de la ligne 54 à la ligne 134)
 

Pièces jointes

Je confirme que j'ai encore de quoi m'occuper 🙂

En phase avec tes commentaires, l'ID ici ne sert strictement à rien.
Je cherchais à initialiser le UserFormM qui a besoin de l'ID directement depuis la recherche mais c'était une fausse bonne idée.
J'ai opté pour une nouvelle recherche au clic sur "M", c'est pas super beau mais ça fait le job 🙂

Je cherche maintenant à délimiter la plage de navigation pour un ID donné (ex ID = 54 de la ligne 54 à la ligne 134)
Tu aurais dû mettre l'ID dans une textbox ou un label.
Je cherche maintenant à délimiter la plage de navigation pour un ID donné (ex ID = 54 de la ligne 54 à la ligne 134)
je t'avoue que si on ne comprend pas ta demande, il sera difficile de t'aider.
Ensuite, si tu n'expliques pas exactement les tenants et aboutissants de ton problème.
Tu ne recevras que des réponses approximatives.
En te limitant à ce que tu penses être la solution de ton problème.
Tu réduis tes chances de solutionner ton problème assez rapidement.
Du moins avoir un code qui tienne la route.

Alors pourquoi, veux-tu limiter la plage de navigation? Que veux-tu dire par "navigation"?
 
Tu aurais dû mettre l'ID dans une textbox ou un label.

je t'avoue que si on ne comprend pas ta demande, il sera difficile de t'aider.
Ensuite, si tu n'expliques pas exactement les tenants et aboutissants de ton problème.
Tu ne recevras que des réponses approximatives.
En te limitant à ce que tu penses être la solution de ton problème.
Tu réduis tes chances de solutionner ton problème assez rapidement.
Du moins avoir un code qui tienne la route.

Alors pourquoi, veux-tu limiter la plage de navigation? Que veux-tu dire par "navigation"?
Merci cathodique pour ton retour, effectivement je ne suis pas très explicite sur mon besoin...

Lorsque je clique sur "M" depuis le UserFormS, je veux pouvoir utiliser le SpinButton (Up/Down) pour "naviguer" dans l'élément rechercher dans t_BDD_M, mais pas visualiser toutes les autres items (ID différents).

Comme je l'ai plus ou moins dit plus haut, j'ai une BDD volumineuse (t_BDD_M et t_BDD_S) et j'ai souvent des modifications à réaliser sur des items dans t_BDD_M, d'où ma volonté de vouloir y naviguer assez facilement (éditer serait plus correcte).

Bien évidemment je veux également pouvoir y ajouter des items et en supprimer.

Ceci m'amène à dire que je n'ai pas précisé qu'une suppression dans t_BDD_S implique une suppression des items correspondant dans t_BDD_M.

Cordialement,
 
Merci cathodique pour ton retour, effectivement je ne suis pas très explicite sur mon besoin...

Lorsque je clique sur "M" depuis le UserFormS, je veux pouvoir utiliser le SpinButton (Up/Down) pour "naviguer" dans l'élément rechercher dans t_BDD_M, mais pas visualiser toutes les autres items (ID différents).

Comme je l'ai plus ou moins dit plus haut, j'ai une BDD volumineuse (t_BDD_M et t_BDD_S) et j'ai souvent des modifications à réaliser sur des items dans t_BDD_M, d'où ma volonté de vouloir y naviguer assez facilement (éditer serait plus correcte).

Bien évidemment je veux également pouvoir y ajouter des items et en supprimer.

Ceci m'amène à dire que je n'ai pas précisé qu'une suppression dans t_BDD_S implique une suppression des items correspondant dans t_BDD_M.

Cordialement,
Hello

je ne comprend pas ce que tu veux faire avec le spin bouton... tu veux parcourir la BDD en changeant de ligne??
 
Bonjour,

Personnellement, je n'ai pas utilisé le 1er formulaire.

En espérant avoir compris ta demande. Je n'ai pas traité les différents boutons.
J'ai ajouté au formulaire une listbox non visible à l'utilisateur.
Au besoin, on reste à l'écoute.
Twing.gif

Nb: dans le fichier, j'ai ajouté un contribution de @patricktoulon (que je salue😉)
 

Pièces jointes

Dernière édition:
Bonjour,

Personnellement, je n'ai pas utilisé le 1er formulaire.

En espérant avoir compris ta demande. Je n'ai pas traité les différents boutons.
J'ai ajouté au formulaire une listbox non visible à l'utilisateur.
Au besoin, on reste à l'écoute.
Regarde la pièce jointe 1216461
Nb: dans le fichier, j'ai ajouté un contribution de @patricktoulon (que je salue😉)
Bonjour,

Merci pour l'investissement, c'est génial d'être aussi soutenu 😀

Le 1er formulaire m'est indispensable, il est d'ailleurs lui-même indirectement lié à une troisième BdD et me permet de faire la liaison entre différentes bases...

Je n'ai pas encore regardé dans le détail ton travail (mais je vais sans tarder...), j'ai moi-même un peu avancé le projet aujourd'hui :
  • amélioration de la fonction MODIFIER/AJOUTER dans le 1er formulaire
  • codage de la fonction MODIFIER/AJOUTER dans le 2nd formulaire
  • codage du bouton SpinUpDown dans le 2nd formulaire
  • codage d'une réindexation de la table M sur la fonction QUITTER
Certainement moyen d'optimiser tout ça !!!

Je galère néanmoins sur la fonction SUPPRIMER du 1er formulaire (table S) qui doit aller vérifier s'il existe des données référencées dans la table M et les supprimer si besoin.
Il reste aussi la fonction SUPPRIMER du 2nd formulaire à codé entièrement.

Voilà ou j'en suis grâce à vous tous, d'ores et déjà un très grand merci 😄😄😄

Amicalement,
 

Pièces jointes

Bonjour,

Merci pour l'investissement, c'est génial d'être aussi soutenu 😀

Le 1er formulaire m'est indispensable, il est d'ailleurs lui-même indirectement lié à une troisième BdD et me permet de faire la liaison entre différentes bases...

Je n'ai pas encore regardé dans le détail ton travail (mais je vais sans tarder...), j'ai moi-même un peu avancé le projet aujourd'hui :
  • amélioration de la fonction MODIFIER/AJOUTER dans le 1er formulaire
  • codage de la fonction MODIFIER/AJOUTER dans le 2nd formulaire
  • codage du bouton SpinUpDown dans le 2nd formulaire
  • codage d'une réindexation de la table M sur la fonction QUITTER
Certainement moyen d'optimiser tout ça !!!

Je galère néanmoins sur la fonction SUPPRIMER du 1er formulaire (table S) qui doit aller vérifier s'il existe des données référencées dans la table M et les supprimer si besoin.
Il reste aussi la fonction SUPPRIMER du 2nd formulaire à codé entièrement.

Voilà ou j'en suis grâce à vous tous, d'ores et déjà un très grand merci 😄😄😄

Amicalement,
Bonsoir,

@Twing83 : lorsqu'on s’arcboute sur son idée, on risque de déchanter avec le temps. Et, on remet en cause son projet. Au final, on fait du sur-place.
Pour supprimer, surtout pour plusieurs lignes, il faut faire une boucle inverse en utilisant Step -1.

Je n'ai pas tout compris comme notre ami @vgendron . Donc, je ne peux pas aller plus loin.

Bonne soirée.
 
Le 1er formulaire m'est indispensable, il est d'ailleurs lui-même indirectement lié à une troisième BdD et me permet de faire la liaison entre différentes bases...
pas si sûr. la liaison se fait juste avec un numéro (identifiant). Donc utiliser un formulaire juste pour récupérer l'identifiant, je trouve cette approche inutile.

Ce n'est que mon avis. Fais à ta guise, comme tu le sens.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
15
Affichages
2 K
Retour