Formulaire VBA Excel

Bonsoir, j'espère que vous allez bien en ces temps difficiles…

Je demande votre intention sur un sujet de formulaire qui pourrait intéresser des débutants dans le domaine comme moi.

Je dois réaliser un formulaire qui va proposer des réponses à des clients, sous la forme de optionbouton et textbox. Les réponses du formulaire doivent être placées clients par clients sur chaque ligne du tableau vierge à cet effet. Le problème est que la macro de base, présenté ci-joint après ma proposition de résolution du problème, donne les réponses de la première restitution sur tout le tableau et reproduit la deuxième de la même façon.

Pour répondre à mon problème j'ai essayer la solution allant vers:

dim derligne as integer

'If MsgBox("etes vous sures de votre saisie?", vbYesNo, "Confirmation") = vbYes Then

derligne= sheets("feuil1").range("A455441").end(xlup).row+1

cells(derligne,2)= SFINANCIERE.Value

cells(derligne,3)=Cout_total.Value

cells(derligne,4)= RENDUdate.Value

If OptionButton4.Value = True Then 'Si coché
Cells(i, 1) = "industrie"
End If
If OptionButton5.Value = True Then 'Si coché
Cells(i, 1) = "service"
End If
If OptionButton6.Value = True Then 'Si coché
Cells(i, 1) = "administration"
End If
Saisie_de_formation.Hide
Unload Me
End Sub

MACRO DE BASE

Private Sub CommandButton1_Click()

For i = 2 To 20
For ni = 1 To 4

'If MsgBox("etes vous sures de votre saisie?", vbYesNo, "Confirmation") = vbYes Then
Cells(i, 2) = SFINANCIERE.Value
Cells(i, 3) = Cout_total.Value
Cells(i, 4) = RENDUdate.Value

end if

If OptionButton4.Value = True Then 'Si coché
Cells(i, 1) = "industrie"
End If
If OptionButton5.Value = True Then 'Si coché
Cells(i, 1) = "service"
End If
If OptionButton6.Value = True Then 'Si coché
Cells(i, 1) = "administration"
End If

Next
Next
Saisie_de_formation.Hide
Unload Me
End Sub

attention , dans le sens, d'un avis. Merci à vous

Bonjour

Avec données anonymisées

Cordialement

Bonjour, oui voici ci-joint un fichier adapté pour répondre à mon pb, de remplissage des informations, ligne par ligne dans mon tableau.

Merci à vous.

Re

Ok je regarde votre fichier.

On peut travailler en tableaux structurés. Je peux modifier votre fichier ?

oui pas de soucis .

Le document proposé est une réadaptation de mon travail pro, pour répondre à mon problème, sans divulgation d'informations de mon entreprise.

Concernant la formation, je prévois le choix dans une liste.

cordialement,

Ok.

Pourquoi avez-vous créé une macro Création tableau, on peut utiliser la macro Nettoyage qui va effacer le tableau et remettre le tableau à 0 pour une nouvelle saisie

oui, vous avez raison. J'ai un niveau de base en vba. Je reste alors sur les éléments que je connais.

Concernant la boucle for et les conditions dans le useform (bouton ok) .Je pense que la façon de faire est la bonne, mais je ne sais pas ce qu'il peut manquer pour que la boucle s'arrête ligne par ligne, pour inscrire les informations.

Votre fichier en retour pour test

- Le bouton création tableau ne sert plus
- le bouton nettoyage supprime les données du tableau
- Dans l'userform, j'ai supprimé deux boutons d'option qui étaient cachés en dessous des autres
- J'ai redimensionné l'userform

Dans l'attente de votre retour

super ça marche, je vous remercie. Par contre, à quoi correspond concrètement data body et list rows?

Re

D'abord j'ai remplacé le fichier dans mon post précédent. Reprenez celui là.
Il vide l'userform après avoir cliqué sur OK et j'ai corrigé une petite erreur

Par contre, à quoi correspond concrètement data body et list rows?

- Databodyrange correspond à vos données dans le tableau. Donc cela prend en compte le tableau depuis la ligne 2 et suivantes que vous avez ajoutées. L'actualisation est automatique d'où l'intérêt des tableaux structurés

- Listrows correspond aux lignes dans la plage databodyrange. Exemple : listrows.count permet de compter le nombre de lignes. Listrows reste à 0 si la première ligne (donc ligne 2) ne contient aucune donnée. D'où l'intérêt de faire un nettoyage via le code. Sinon sélectionner la ligne 2 et suivantes complètes pour faire une suppression complète et repartir à 0.

Attention que pour repartir à 0 (listrows.count =0) le fait d'effacer des données ne remet par le tableau à 0. Il faut impérativement supprimer les lignes.

d'accord merci je comprend mieux , et dans l'optique d'ajouter à ceci un msgbox de confirmation par vbyesno. Est ce qu'on mettrait potentiellement le même principe que celui du msgbox "marquage demandé de toute les données "?

dans l'optique d'ajouter à ceci un msgbox de confirmation par vbyesno. Est ce qu'on mettrait potentiellement le même principe que celui du msgbox "marquage demandé de toute les données "?

Je n'ai pas compris, je n'ai pas de msgbox dans votre fichier. Que voulez vous faire exactement

Je me demandais juste comment on procéderais dans l'optique d'ajout, d'un message de confirmation avec vbyesno, des informations inscrite dans le formulaire.

Re

Vous pouvez éventuellement remplacer ce code dans l'userform

Private Sub CommandButton1_Click()
Dim lig As Integer

If Stage_date = "" Or Cout_total = "" Or Typeclient = "" Then MsgBox "veuillez completer toutes les rubriques": Exit Sub
If MsgBox("Voulez-vous ajouter les données ?", vbYesNo + vbDefaultButton2, "Confirmer Ajout") = vbYes Then
    With Worksheets("Feuil1").ListObjects("Tableau1")
        If .ListRows.Count = 0 Then
            .ListRows.Add: lig = 1
        Else: .ListRows.Add: lig = .ListRows.Count
        End If

        .DataBodyRange.Item(lig, 1) = Typeclient
        .DataBodyRange.Item(lig, 2) = dodo
        .DataBodyRange.Item(lig, 3) = Cout_total
        .DataBodyRange.Item(lig, 4) = Stage_date
    End With
End If
Call Vider_Usf
End Sub

Cordialement

Rechercher des sujets similaires à "formulaire vba"