Problèmes avec un programme

JULIEN40350 Messages postés 5 Date d'inscription jeudi 18 mai 2006 Statut Membre Dernière intervention 25 mai 2006 - 21 mai 2006 à 17:20
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 - 21 mai 2006 à 22:55
Bonjour à tous,
Je suis totalement débutant en VBA et j'essaye de concevoir un petit programme effectuant de la base de donnée.
Le prinicipe est le suivant:
En remplissant les textbox d'un userform, je souhaiterai que les informations que je rempli dans les textbox apparaissent dans une feuille excel.
Après des heures et des heures de recherche, je suis arrivé au code suivant:
Private Sub CmdEnregistrer_Click()
Dim TxtNOM
Dim txtDate
Dim MaDate
Dim TxtPrénom
Dim TxtAdresse1
Dim TxtAdresse2
Dim TxtCode_Postal
Dim TxtVille
Dim TxtFixe
Dim TxtPortable
Dim TxtEmail
Dim TxtNiveau_scolaire1
Dim TxtNiveau_scolaire2
Dim TxtRenseignements_complémentaires
Dim TxtNSécu
Dim Txt
Dim TxtN_AFPS
Dim TxtN_CFAPSE
Dim TxtN_CFAPSR
Dim TxtCOD
Dim TxtFDF
Dim TxtRCH
Dim TxtRAD
Dim TxtSAV
Dim TxtSAL
Dim TxtIMP
Dim TxtISS
Dim TxtEPS
Dim TxtPRV
Dim TxtPRS
Dim TxtFOR
Dim TxtCAN
Dim TxtCYN
Dim TxtSDE
Dim TxtSMO
Dim TxtTRS
Dim TxtN_Permis_PL

'**************************** VALIDATION DES DONNEES SAISIES **************************************
'on vérifie que les champs texte sont remplis (sauf pour les commentaires qui ne sont pas obligatoires)
If TxtNOM.Value = "" Then
MsgBox ("Indiquer le NOM !")
Exit Sub 'interrompt la macro de validation, le userform reste affiché en l'état pour correction

End If

If txtDate.Value = "" Then
MsgBox ("Il faut indiquer la date !")
Exit Sub
Else
MaDate = CDate(txtDate.Value)
End If

If TxtPrénom.Value = "" Then
MsgBox ("Indiquer le prénom ?")
Exit Sub

End If

If TxtAdresse1.Value = "" Then
MsgBox ("Indiquer l'adresse")
Exit Sub
End If

If TxtCode_Postal.Value = "" Then
MsgBox ("Indiquer le code postal")
Exit Sub
End If

If TxtVille.Value = "" Then
MsbBox ("Indiquer la Ville")
Exit Sub
End If

Dim num
'inscription des données récupérées du formulaire validé dans la feuille excel
'sélection de la ligne sur laquelle écrire (la première vide)
num = Sheets("FeuilPersonnel").Range("A65536").End(xlUp).Row + 1 'on part du bas de la colonne, on cherche
'la première cellule non vide avec end(xlup), on renvoie son N° avec row et on ajoute 1 pour avoir le numéro de la
'ligne d'en dessous

Sheets("FeuilPersonnel").Activate
'Range("A" & num).Value = CDate(txtDate.Value) 'le cdate sert à convertir une date au format des paramètres régionaux du pc
Range("B" & num).Value = TxtNOM.Value
Range("C" & num).Value = TxtPrénom.Value
Range("D" & num).Value = TxtAdresse1.Value
Range("E" & num).Value = TxtAdresse2.Value
Range("F" & num).Value = TxtCode_Postal.Value
Range("G" & num).Value = TxtVille.Value
Range("H" & num).Value = TxtFixe.Value
Range("I" & num).Value = TxtPortable.Value
Range("J" & num).Value = TxtEmail.Value
Range("K" & num).Value = TxtNiveau_scolaire1.Value
Range("L" & num).Value = TxtNiveau_scolaire2.Value
Range("M" & num).Value = TxtNSécu.Value
Range("N" & num).Value = ComboBoxGS.Value
Range("O" & num).Value = TxtRenseignements_complémentaires.Value
Range("P" & num).Value = ComboBoxGrade.Value
Range("Q" & num).Value = Txt.Value
Range("R" & num).Value = Txt.Value
Range("S" & num).Value = Txt.Value
Range("T" & num).Value = TxtN_AFPS.Value
Range("U" & num).Value = Txt.Value
Range("V" & num).Value = TxtN_CFAPSE.Value
Range("W" & num).Value = Txt.Value
Range("X" & num).Value = TxtN_CFAPSR.Value
Range("Y" & num).Value = Txt.Value
Range("Z" & num).Value = TxtCOD.Value
Range("AA" & num).Value = TxtFDF.Value
Range("AB" & num).Value = TxtRCH.Value
Range("AC" & num).Value = TxtRAD.Value
Range("AD" & num).Value = TxtSAV.Value
Range("AE" & num).Value = TxtSAL.Value
Range("AF" & num).Value = TxtIMP.Value
Range("AG" & num).Value = TxtISS.Value
Range("AH" & num).Value = TxtEPS.Value
Range("AI" & num).Value = TxtPRV.Value
Range("AJ" & num).Value = TxtPRS.Value
Range("AK" & num).Value = TxtFOR.Value
Range("AL" & num).Value = TxtCAN.Value
Range("AM" & num).Value = TxtCYN.Value
Range("AN" & num).Value = TxtSDE.Value
Range("AO" & num).Value = TxtSMO.Value
Range("AP" & num).Value = TxtTRS.Value
Range("AQ" & num).Value = TxtN_Permis_PL.Value
Range("AR" & num).Value = Txt.Value
Range("AS" & num).Value = Txt.Value
Range("AT" & num).Value = Txt.Value

Unload UsfBoite_Renseignements 'on décharge le formulaire. Du coup au prochain affichage, les contrôles seront remis dans
'leur état initial. Si l'on voulait conserver certaines des données entrées, on pourrait simplement cacher
'le formulaire (hide UsfNew, sans point entre les deux) et dans le userform_initialize vider les
'contrôles de son choix.
UsfBoite_Renseignements.Show 'on réaffiche le userform donnant le choix de l'acion à l'utilisateur.
End Sub

Private Sub CommandBoutonAnnuler_Click()
Unload UsfBoite_Renseignements 'décharge le formulaire. Au prochain lancement la procédure userform_initialize sera effecuée
'UsfNew.Hide cache le formulaire sans le décharger.
'Au prochain lancement, le userform_initialize n'est pas effectué
End Sub

Private Sub UserForm_Initialize()
   
UsfMenu_Personnel.Hide
Workbooks("Projet_logiciel_pompier.xls").Activate 'pour le cas ou plusieurs classeurs sont ouverts
'TxtDate.Value = Format(Now(), "dd/mmm/yyyy") 'met sous format français la date du jour dans le textbox date.
ComboBoxGS.RowSource = ("FeuilParamètre!G1:G8")
ComboBoxGrade.RowSource = ("FeuilParamètre!I1:I14")
ComboBox3.RowSource = ("FeuilParamètre!A1:A31")
ComboBox6.RowSource = ("FeuilParamètre!A1:A31")
ComboBox9.RowSource = ("FeuilParamètre!A1:A31")
ComboBox12.RowSource = ("FeuilParamètre!A1:A31")
ComboBox15.RowSource = ("FeuilParamètre!A1:A31")
ComboBox18.RowSource = ("FeuilParamètre!A1:A31")
ComboBox21.RowSource = ("FeuilParamètre!A1:A31")
ComboBox4.RowSource = ("FeuilParamètre!C1:C12")
ComboBox7.RowSource = ("FeuilParamètre!C1:C12")
ComboBox10.RowSource = ("FeuilParamètre!C1:C12")
ComboBox13.RowSource = ("FeuilParamètre!C1:C12")
ComboBox16.RowSource = ("FeuilParamètre!C1:C12")
ComboBox19.RowSource = ("FeuilParamètre!C1:C12")
ComboBox22.RowSource = ("FeuilParamètre!C1:C12")
ComboBox5.RowSource = ("FeuilParamètre!E1:E151")
ComboBox8.RowSource = ("FeuilParamètre!E1:E151")
ComboBox11.RowSource = ("FeuilParamètre!E1:E151")
ComboBox14.RowSource = ("FeuilParamètre!E1:E151")
ComboBox17.RowSource = ("FeuilParamètre!E1:E151")
ComboBox20.RowSource = ("FeuilParamètre!E1:E151")
ComboBox23.RowSource = ("FeuilParamètre!E1:E151")

End Sub

Private Sub MultiPage1_Initialize()

End Sub

Je vois suis entièrement reconnaisant de l'aide que vous pourrez m'apporter.
Si vous le souhaiter, je peux vous envoyer mon fichier par mail.
Merci

3 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
21 mai 2006 à 18:02
Salut
Je connais pas vraiment VBA, mais une chose me saute aux yeux :
Si tu dimensionnes tes variables (genre TxtNom), il s'agit d'une variable et pas d'une zone de texte.
Je crois que tu confonds le nom des variables avec les noms des zones de saisie.
(si ces variables sont vraiment utiles, un dimensionnement de variable doit (pour être complet et ne pas engendrer d'erreur plus tard) indiquer le type de variable dont il s'agit. Exemple : Dim TxtNom As String)

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accro
0
JULIEN40350 Messages postés 5 Date d'inscription jeudi 18 mai 2006 Statut Membre Dernière intervention 25 mai 2006
21 mai 2006 à 18:30
Je suis d'accord avec toi, mais si je ne met pas ça, cela me met un message d'erreur qui me demande de déclarer les variables.
Mais il est vrai que mes notions en visual basic sont très limitées et donc je confond effectivement beaucoup de chose.
La seule chose qui est sur est que je ne demande qu'a apprendre!
Merci pour vos réponses
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
21 mai 2006 à 22:55
Salut,

je confirme en tout point ce que t'as dit Jack.
Tu as donc déclaré 2 variables :
Dim num & Dim MaDate, puis tu as déclaré en variables tes TextBox, chose qu'il ne faut pas faire : si TxtNOM, txtDate, txtPrénom etc... sont les noms de TextBox, tu ne doit pas les déclarer.

Dim num As Long, MaDate As Date
cette phrase suffit, le reste est inutile.

Par contre, tes TextBox ont des noms que tu lui as donnée, mais pas les ComboBox, pourquoi ?

Dernière chose : En faisant une boucle sur tes objets, tu pourrais remplir tes infos dans la feuille avec 6 lignes (au lieu de 46).

Mortalino
0
Rejoignez-nous