Questionnaire VBA : remplissage tableau automatique

Bonjour à tous,

J'ai créé un questionnaire sur VBA et je souhaite remplir un tableau automatiquement à partir des TextForm / ComboBox et Option Button complété.

J'ai une erreur qui apparait lorsque le questionnaire n'est pas complété en entier (mais qui ne me pose pas de problème lorsque tout est remplit).

Voici la ligne qui se met en surbrillance lorsque je fais débogage.

For Each Ctrl In Frame1.Controls

If TypeOf Ctrl Is MSForms.OptionButton Then

If Ctrl.Value = True Then

Sheets("Données").Range("e" & dlt) = Ctrl.Caption

Exit For

End If

End If

Next Ctrl

Je cherche également un bout de code pour empêcher la fermeture de mon questionnaire si l'un des textbox / combobox / frame n'est pas rempli.

Heeeelp...

Merci d'avance

Bonjour et bienvenue sur le forum

Tu devrais joindre ton fichier complet...

Bye !

Voici mon fichier

Je ne comprend vraiment pas pourquoi ca ne veut pas fonctionner

En remplissant partiellement ton formulaire, j'ai bien obtenu le report des données saisies sur la feuille "Données" :

capture 1 capture 2

Quant au bout de code que tu demandes, le voici :

Private Sub CommandButton1_Click()

    If ComboBox1 = "" Or TextBox1 = "" Or TextBox2 = "" Or TextBox3 = "" Then
        MsgBox ("Remplir la date, le nom du dégustateur, la référence et le n° de Lot")
        Exit Sub
    Else

Bye !

Bonjour,

J'ai optimisé votre code en utilisant les instructions associées à un tableau structuré (ListObject).

Pas de souci pour remplir votre formulaire.

NB: Pour démarrer, votre tableau structuré doit être entièrement vide (toutes les lignes doivent être supprimées). Les formats et formules définis préalablement sont cependant conservés

En remplissant partiellement ton formulaire, j'ai bien obtenu le report des données saisies sur la feuille "Données" :

Pour le remplissage partiel au niveau des combobox effectivement cela fonctionne, mais lorsqu'il s'agit d'un text box qui n'est pas rempli ?

Quant au bout de code que tu demandes, le voici :

Private Sub CommandButton1_Click()

    If ComboBox1 = "" Or TextBox1 = "" Or TextBox2 = "" Or TextBox3 = "" Then
        MsgBox ("Remplir la date, le nom du dégustateur, la référence et le n° de Lot")
        Exit Sub
    Else

Il me semble que l'ouverture du msgbox ne suffit pas à empêcher la fermeture du questionnaire ?

Bye !

Bonjour,

J'ai optimisé votre code en utilisant les instructions associées à un tableau structuré (ListObject).

Pas de souci pour remplir votre formulaire.

NB: Pour démarrer, votre tableau structuré doit être entièrement vide (toutes les lignes doivent être supprimées). Les formats et formules définis préalablement sont cependant conservés

Merci Thev, il ne me reste plus qu'à empecher la fermeture si l'un des ComboBox n'est pas rempli. Mais je pense avoir trouvé la solution : cocher automatiquement l'un des 3 boutons comme cela on est obligé de le changer...

Concernant le tableau structuré, peux-tu m'expliquer comment tout cela fonctionne car je n'y connais rien ^^

Bonsoir,

ci-jointe nouvelle version permettant de contrôler le remplissage d'un cadre d'options

Concernant le tableau structuré, peux-tu m'expliquer comment tout cela fonctionne car je n'y connais rien ^^

Un tableau structuré est en fait comparable à une table de base de données.

1- sa taille est fixée : nombre de lignes et de colonnes définies,

2- il possède une ligne d'entête permettant d'identifier le contenu de chaque colonne,

3- formats et formules sont les mêmes pour chaque ligne, ce qui signifie qu'une fois définis pour la première ligne, ils sont automatiquement recopiés à la création d'une nouvelle ligne,

4- c'est un format obligatoire dès lors que l'on veut utiliser PowerQuery ou PowerPivot,

5- au niveau du code, il appartient à la classe ListObject qui possède un certain nombre de propriétés et méthodes, dont les principales sont :

listrows.add : ajoute une nouvelle ligne à la fin du tableau

listrows.count : nombre de lignes du tableau

listcolumns(index) : identifie la colonne du tableau

databodyrange : plage de données du tableau (sans la ligne d'entête)

headerrowrange : plage de l'entête du tableau

initialisation d'un tableau structuré :

1- menu insertion --> bouton tableau --> création avec minimum 2 lignes : une pour l'entête et une pour la première ligne de données

2- utiliser la première ligne de données pour définir formats et formules

3- supprimer cette ligne de données pour obtenir un tableau vide. Les formats et formules définis à la précédente étape sont cependant conservés.

Bonjour,

Après vérification du fichier, je me suis aperçu que vous aviez un label caché dans Frame1 qui provoquait un plantage.

ci-jointe version modifiée après suppression du label parasite.

Bonjour,

Après vérification du fichier, je me suis aperçu que vous aviez un label caché dans Frame1 qui provoquait un plantage.

ci-jointe version modifiée après suppression du label parasite.

Super !! Merci beaucoup pour votre aide

Rechercher des sujets similaires à "questionnaire vba remplissage tableau automatique"