[Résolu] Alimenter une feuille excel par un UserForm de saisie

geraldine69

XLDnaute Nouveau
Bonsoir

Je voudrais remplir une feuille Excel à l'aide d'un formulaire de saisie.
Je suis en pleine galère pour gérer mes différents TextBox.

Je vais essayer de vous expliquer au mieux ce que je veux faire.

1 - Une feuille Excel contenant 5 colonnes alimentées par mon formulaire

2 - Un formulaire contenant 5 lignes de 3 TextBox dans Frame 1
.......................contenant 5 lignes de 2 TextBox dans Frame 2

3 - Un bouton pour enregistrer les saisie de mon formulaire

4 - Un bouton pour quitter le formulaire

Les TextBox contenus dans le Frame1 , N°, Date et Heure doivent se remplir
automatiquement si et seulement si une saisie à été effectuée sur le TextBox se trouvant en Frame2. Frame1 n'est pas accessible par l'utilisateur.
La colonne N° correspond au n° d'enregistrement et il doit s'incrémenter.

Pour cette partie j'ai un souci avec l'incrémentation et je ne sais pas passer mes enregistrements à la ligne suivante de ma feuille si j'effectue une saisie dans les autres lignes de mon formulaire.

Le TextBox de la colonne CODE doit avoir une saisie obligatoire de 8 caractères
Le TextBox de la colonne CLIENT est obligatoire et doit avoir 6 caractères.

Le bouton ENREGISTRER valide les données sur la feuille ( pour le moment ça ne fonctionne que pour une ligne de saisie.
Et ça initialise mes TextBox à vide ( pour cette partie la ça fonctionne déjà )

Merci si vous pouviez m'aider à avancer et mettre des commentaires pour que j'essaie de comprendre le code.

Géraldine

PS : j'essaie de vous mettre mon fichier en pièce jointe
 

Pièces jointes

  • Formulaire saisie.xls
    50.5 KB · Affichages: 242
  • Formulaire saisie.xls
    50.5 KB · Affichages: 270
  • Formulaire saisie.xls
    50.5 KB · Affichages: 268
Dernière édition:

jp14

XLDnaute Barbatruc
Re : Alimenter une feuille excel par un UserForm de saisie

Bonsoir

Ci joint un fichier avec une ébauche de solution (cf Userform1).

Le code joue sur le numéro des textbox.
Le numéro correspond à la position de la ligne et de la colonne
TextBox11 première ligne première colonne dans l'USF.
Cette technique simplifie le code, car on utilise des boucles pour gérer les textbox.

J'ai rajouté un contrôle du contenu ( à compléter en fonction de l'application), à chaque erreur le message affiché se trouve dans la propriété Tag du TextBox. Si l'ensemble de la ligne est vide il n'y a pas de contrôle.

A tester et à compléter.


JP
 

Pièces jointes

  • Formulaire saisie.zip
    24.2 KB · Affichages: 334
  • Formulaire saisie.zip
    24.2 KB · Affichages: 334
  • Formulaire saisie.zip
    24.2 KB · Affichages: 350
Dernière édition:

geraldine69

XLDnaute Nouveau
Re : Alimenter une feuille excel par un UserForm de saisie

Merci JP14
Pour la saisie ça fonctionne très bien.

Les TextBox colonne N°, DATE et HEURE ne doivent pas être accessibles
mais être renseignés automatiquement lorsque le TEXTBOX correspondant de la colonne CODE est renseigné
C'est ce que j'avais fait en mettant TextBox2.Value = Date et TextBox3.Value = Time. Mon problème c'est qu'il s'affiche même si
aucun TeXtbox n'est renseigné.

lLe TextBox N° doit s'incrémenter au fur et a mesure du remplissage de la feuille Excel.

Pour le Textbox CODE et CLIENT j'ai mis ce code mais ça ne fonctionne pas

Private Sub TextBox5_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If Len(TextBox5.Text) = 8 Then

Else
erreur3.Caption = "Saisie invalide !! Vous devez saisir un code à 8 caractères " _
& Len(TextBox5.Text) & "caractère(s)"
End If
End Sub
 

jp14

XLDnaute Barbatruc
Re : Alimenter une feuille excel par un UserForm de saisie

Bonjour
Quelques données non confidentielles faciliterait la compréhension de l'application.
Puisque le code est le point d'entrée, un combobox permettrait de le saisir soit par un choix dans une liste soit par une nouvelle création.

Bon week end
 

geraldine69

XLDnaute Nouveau
Re : Alimenter une feuille excel par un UserForm de saisie

Bonjour Jp,

Merci de t’intéresser à mon problème.
Pour répondre à tes interrogations il n'est pas possible de travailler
sur la base d'une liste. La saisie ne peut fonctionner que par TextBox.
Je remet mon fichier rempli avec les commentaires nécessaires.
N'hésite pas à me demander si tu as besoin d'autres précisions

Un grand merci pour ton aide


Géraldine
 

Pièces jointes

  • Formulaire saisie2.zip
    22 KB · Affichages: 180
Dernière édition:

jp14

XLDnaute Barbatruc
Re : Alimenter une feuille excel par un UserForm de saisie

Bonjour

Ci joint le fichier qui sauf erreur devrait répondre à ta demande.

Un module de classe permet de gérer les caractères en vérifiant le code ascii et la longueur du texte.
Pour gérer les numéros d'ordre, les textbox apparaissent dans un ordre déterminés.
La personne qui saisit doit écrire la première ligne si elle est conforme elle peut passer à la suivante, les données entrées sont "Locked". en cas d'erreur il faut annuler la saisie.

A tester et à modifier.

JP
 

Pièces jointes

  • Formulaire saisie3.zip
    32.8 KB · Affichages: 411
Dernière édition:

geraldine69

XLDnaute Nouveau
Re : Alimenter une feuille excel par un UserForm de saisie

Merci beaucoup JP, c'est exactement ce qu'il me faut pour la saisie.
Je ne connais pas du tout le fonctionnement des modules de classe, il va falloir
que je bosse un peu de ce coté là.

Juste une petite chose, je voudrais laisser tous les TextBox apparent en permanence.
Le contenu de gauche ' N°, Date et Heure ) n'apparaissant que si la partie de droite est remplie ( Code et Client )

Merci pour ton travail c'est super.

Géraldine
 

jp14

XLDnaute Barbatruc
Re : Alimenter une feuille excel par un UserForm de saisie

Bonsoir

Ci dessous le code à modifier, après avoir mis true pour la propriété visible des textbox
Code:
Private Sub CommandButton1_Click()
Dim Trouve(1 To 5) As Boolean ' a modifier en fonction du nombre de ligne
Dim Dl1 As Long ' dernière ligne
Dim Nomfeuille1 As String
Dim i As Byte
For i = 1 To NBlig ' controle des zone
    If Controls("Textbox" & i & 1).Value = "" Then Trouve(i) = True
Next i
' enregistrement
With Sheets("Feuil1")
For i = 1 To NBlig
    If Trouve(i) = False Then ' pas de controle si la ligne est vide
        
            Dl1 = .Range("A" & .Rows.Count).End(xlUp).Row + 1 ' dernière ligne
            .Range("A" & Dl1) = CInt(Controls("Textbox" & i & 1))
            .Range("B" & Dl1) = Controls("Textbox" & i & 2)
            .Range("c" & Dl1) = Controls("Textbox" & i & 3)
            .Range("d" & Dl1) = Controls("Textbox" & i & 4)
            .Range("e" & Dl1) = Controls("Textbox" & i & 5)
    End If
Next i
End With
Flag = True
For i = 1 To NBlig

            Controls("Textbox" & i & 4).Visible = False
            Controls("Textbox" & i & 5).Visible = False
            Controls("Textbox" & i & 1).Value = ""
            Controls("Textbox" & i & 2).Value = ""
            Controls("Textbox" & i & 3).Value = ""
            Controls("Textbox" & i & 4).Value = ""
            Controls("Textbox" & i & 5).Value = ""
            Controls("Textbox" & i & 4).Locked = False
            Controls("Textbox" & i & 5).Locked = False
    
Next i
            Controls("Textbox" & 14).Visible = True
            Controls("Textbox" & 15).Visible = True
Flag = False
End Sub

JP
 

Discussions similaires

Réponses
17
Affichages
656
Réponses
11
Affichages
189

Statistiques des forums

Discussions
312 231
Messages
2 086 457
Membres
103 217
dernier inscrit
LoshR7