XL 2010 alimenter Bdd avec userform

celine123

XLDnaute Junior
Bonjour,
J'ai un classeur avec un userform pour alimenter une BDD.
La macro a été faite par Roro69 (que je remercie mille fois au passage).
J'aimerai juste une petite modification, est-ce possible lorsqu'on saisit une réponse dans les combobox de l'ajouter dans la feuille paramètre dans la colonne correspondante si elle n'existe pas ?
 

Pièces jointes

  • FORMULAIRE.xlsm
    51 KB · Affichages: 65

roro69

XLDnaute Impliqué
Bonsoir ; difficile à comprendre mais bon un première essai de réponse:
On récupère l'index du combo "N°X" et
donc pour editer dans la feuille voici :
VB:
With NomDeFeuille
     .Range("N°X" & Me.Combo"N°X".ListIndex + 2) = Combo"N°X"     ' On écrit dans la colonne la valeur du combo
End With
 

celine123

XLDnaute Junior
en gros la feuille paramétre alimente les combobox mais si je saisie un nouveau terme dans la combobox qui n'existe pas dans la colonne qui l'alimente j'aimerai pouvoir le rajouter dans cette colonne parallèlement de l'ajout dans la feuille BDD
 

Paf

XLDnaute Barbatruc
bonjour celine123, roro69,

un bout de code à insérer dans Private Sub CmdAjout_Click() de la Userform, juste avant la ligne
VB:
Ini 'On lance la réinitialisation du UserForm (Macro en haut du Module)

VB:
Dim Ctr As Control, col As Integer, lig As Long
With Worksheets("PARAMETRE")
For Each Ctr In Me.Controls
    If TypeName(Ctr) = "ComboBox" Then
        If Ctr.ListIndex = -1 And Ctr.Value <> "" Then
            col = Right(Ctr.Name, Len(Ctr.Name) - 8)
            lig = .Cells(Cells.Rows.Count, col).End(xlUp).Row + 1
            .Cells(lig, col) = Ctr
        End If
    End If
Next
End With

Quand on valide la saisie, on balaye l'ensemble des combobox. S'il y a un élément nouveau saisie dans une combo, on le rajoute dans la liste de la feuille parametre.

A terme, les colonnes de la feuille paramètre n'auront plus le même nombre d'item.
Il faut donc changer le système d'initialisation des combobox, puisqu'il détermine le nombre d'item sur la colonne A et pour chaque combo charge ce même nombre d'item (qu'il y en ait réellement plus ou moins)

remplacer la sub Ini() par celle ci:
VB:
Private Sub Ini()
Dim CTRL As Control 'Variable pour la collection des controls
Dim L As Long    'Variable pour connaitre le numéro de derniere ligne
Dim i, y As Integer    'Variable pour connaitre incrémenter les Data
'On Vide tous les Controls Combobox
For Each CTRL In Me.Controls
    If TypeOf CTRL Is MSForms.ComboBox Then CTRL.Clear
Next CTRL
Set WS = ThisWorkbook.Worksheets("PARAMETRE") 'On identifie l'objet pour la feuille de travail
'Pour éviter les fash d'écran pour le select ci dessous
Application.ScreenUpdating = False
    'WS.Select 'On sélectionne la feuille sinon bug si elle ne l'est pas

For y = 1 To 54
    Select Case y
    Case 1 To 10, 12 To 15, 20 To 31, 34 To 37, 39 To 52, 54
        L = WS.Cells(Cells.Rows.Count, y).End(xlUp).Row
        For i = 2 To L             'Boucle sur lignes  de la feuille :2 jusqu'à dernière
            With Me.Controls("ComboBox" & y)
            .AddItem WS.Cells(i, y)  'On ajoute dans les ComboBox toutes les valeurs, cellules après cellules
            End With
        Next
    End Select
Next y
Application.ScreenUpdating = True
End Sub

A+
 

celine123

XLDnaute Junior
bonjour paf
j'aurais un autre classeur dans le même esprit dans lequel j'ai tenté d'adapter ta macro en vain
j'ai un petite particularité c'est de pouvoir alimenter en deux fois mon formulaire
en gros j'aimerai pouvoir après avoir fait une première saisie (la partie hors frame) de pouvoir par rapport a la date et heure saisie en première partie pouvoir compléter pour la ligne correspondante la suite (frame) tout en pouvant ajouter un nouveau terme dans la colonne correspondante (si il n'existe pas) par la saisie dans les combobox
petit point particulié si j'ai oui dans la combobox 25 la combobox 26 et visible sinon pas visible
 

Pièces jointes

  • formulaire 2.xlsm
    20.3 KB · Affichages: 45

Paf

XLDnaute Barbatruc
Bonjour,

Pas trop saisi le(s) souci(s) ni de quelle macro il s'agissait, d'autant qu'il n'y a aucun code dans l'USF .

en gros j'aimerai pouvoir après avoir fait une première saisie (la partie hors frame) de pouvoir par rapport a la date et heure saisie en première partie pouvoir compléter pour la ligne correspondante la suite (frame) tout en pouvant ajouter un nouveau terme dans la colonne correspondante (si il n'existe pas) par la saisie dans les combobox

rien n'empêche de 'charger' les combobobox du Frame à l'initialisation de l'USF, puis effectuer les saisies hors Frame , puis sélectionner ou saisir un nouvel item dans les combobox du Frame?
Pour mettre à jour les items éventuellement saisis, le code proposé au post 5 devrait fonctionner (?)

petit point particulié si j'ai oui dans la combobox 25 la combobox 26 et visible sinon pas visible

Dans Private Sub UserForm_Initialize(), ajouter:
Code:
ComboBox26.Visible = False

et dans Private Sub ComboBox25_Change()
Code:
If UCase(ComboBox25) = "OUI" Then ComboBox26.Visible = True

A+
 

Paf

XLDnaute Barbatruc
re,

oui, mais faut voir ...
peut-on avoir plusieurs dates identiques ?
pour une date peut-on avoir plusieurs heures saisies ?
le groupe date heure est-il unique .... ou pas ...?
en fonction des données le traitement ne sera forcément le même, et comme il n'y a pas de données ni de légendes de colonnes dans le classeur ...

A+
 

Paf

XLDnaute Barbatruc
re,

je ne pense pas que l'on ait besoin de lister les dates et heures dans la feuille paramètres !

Par contre il serait intéressant d'avoir des données dans la feuille BDD, histoire de faire quelques tests avant d'émettre une éventuelle proposition

A+
 

Discussions similaires

  • Question
Microsoft 365 webbrowser
Réponses
20
Affichages
926

Statistiques des forums

Discussions
312 329
Messages
2 087 330
Membres
103 519
dernier inscrit
Thomas_grc11