XL 2016 [Résolu] Modifier BDD avec formulaire

Mulder

XLDnaute Junior
Bonjour à tous.
Je chercher à modifier une base de données, via un USF, dans un tableau mis en forme (pas un tableau basique mais un tableau paramétré via Création>Tableau ; je précise parce que ça a peut être une incidence sur ce qui ne fonctionne pas, quoique je ne vois pas pourquoi ça serait le cas).

Ci-joint mon fichier. Cas classique à mon sens : j'ai une base de données existante, un bouton "Modifier" (les autres ne fonctionnent pas) m'ouvre un USF.
Je choisis ce que je veux modifier dans un Combobox, je fais les modifications souhaitées, je valide, ça devrait modifier.
Or, ça ne prends en compte que les modifications du Textbox1...
J'ai beau tourner dans tous les sens, je ne comprends pas...

Je vous remercie par avance !!!
 

Pièces jointes

  • Modifier BDD.xlsm
    32.8 KB · Affichages: 18

Mulder

XLDnaute Junior
Bonjour Boisgontier et JM27 et merci pour votre retour,
@BOISGONTIER : j'ai essayé de me calquer sur de l'existant/proposé sur le forum sans succès. Je jette u oeil au programme générique une fois que le mien est terminé.
@JM27 : Impeccable, ça fonctionne, merci !!
Juste pour ma culture : quel était le problème ? J'ai vu que tu avais ajouté la commande flag, qu'est ce que ça change ?
 

JM27

XLDnaute Barbatruc
Bonjour
le fait d'écrire le textbox nom en colonne B , modifie ton tableau et par ce fait relance indirectement la combo Nom change. ( et qui réinitialyse les texbox associées , c'est pour cela que tu retrouves les anciennes valeurs)
en mettant un flag a true ( variable booléenne) au début de macro modifier et qu'elle soit testée au début de l'évenement comboBox1 .change permet de sortir sans réinitialiser les textbox.
l'événement .
Déroules tes macros en pas à pas et tu comprendras vite
 
Dernière édition:

Mulder

XLDnaute Junior
Okay.
Si je comprends bien, si je renomme tous les champs de la base de données, mais en mettant la mise à jour du nom en dernier, ça fonctionnerait tout autant puisqu'en changeant le nom en fin de macro, je change la combobox1 mais vu qu'il n'y a plus d'instructions ensuite, ça passe. J'ai vrai (même si bancal par rapport à ta proposition) ?
 

fanch55

XLDnaute Barbatruc
Salut à tous,
Je trouve dommage de créer des tableaux structurés et de ne pas en employer les avantages.
Le code du userform produit par JM27 fonctionne parfaitement bien mais rend le tableau un peu statique.
Ci-dessous le code modifié pour un tableau structuré :
VB:
Private Sub ComboBox1_Change()
Dim DL As Integer
If Me.ComboBox1.Enabled Then
    DL = ComboBox1.ListIndex + 1
    TextBox1 = [Tableau5[Nom]].Rows(DL)
    TextBox2 = [Tableau5[Adresse]].Rows(DL)
    TextBox3 = [Tableau5[Code Postal]].Rows(DL)
    TextBox4 = [Tableau5[Ville]].Rows(DL)
    TextBox5 = [Tableau5[Pays]].Rows(DL)
    TextBox6 = [Tableau5[Téléphone]].Rows(DL)
    TextBox7 = [Tableau5[Mail]].Rows(DL)
End If

End Sub

Private Sub CommandButton1_Click()
    Dim DL As Integer
    Select Case True
        Case Me.TextBox1 = vbNullString:
        Case Me.TextBox2 = vbNullString:
        Case Me.TextBox3 = vbNullString:
        Case Me.TextBox4 = vbNullString:
        Case Me.TextBox5 = vbNullString:
        Case Me.TextBox6 = vbNullString:
        Case Me.TextBox7 = vbNullString:
        Case Else
            DL = Me.ComboBox1.ListIndex + 1
            [Tableau5].Parent.Unprotect
            Me.ComboBox1.Enabled = False
            'Ajouter dans la base de données
            [Tableau5[Nom]].Rows(DL) = Me.TextBox1 'Nom  
            [Tableau5[Adresse]].Rows(DL) = Me.TextBox2 'Adresse
            [Tableau5[Code Postal]].Rows(DL) = Me.TextBox3 'Code postal
            [Tableau5[Ville]].Rows(DL) = Me.TextBox4 'Ville
            [Tableau5[Pays]].Rows(DL) = Me.TextBox5 'Pays
            [Tableau5[Téléphone]].Rows(DL) = Me.TextBox6 'Téléphone
            [Tableau5[Mail]].Rows(DL) = Me.TextBox7 'Mail
            Me.ComboBox1.Enabled = True ' pas vraiment nécessaire dans ce cas
            [Tableau5].Parent.Protect
            Unload Me
    End Select
    
End Sub

Private Sub UserForm_Initialize()
    Me.ComboBox1.Enabled = True
End Sub

Celui-ci permet le placement du tableau n'importe où sur une feuille et/ou de changer l'ordre des colonnes sans avoir à retoucher le code.
L'inconvénient c'est qu'il est lié au nom des colonnes mais c'est plus simple pour faire des "remplacer".
:cool:
 

Discussions similaires

Réponses
12
Affichages
233
Réponses
6
Affichages
582

Statistiques des forums

Discussions
314 499
Messages
2 110 247
Membres
110 711
dernier inscrit
chmessi