Se positionner sur la dernière ligne vide pour nouvelle saisie

- - Dernière réponse :  Devis2019 - 15 juil. 2019 à 11:07
Bonsoir ;
je suis débutant dans VBA, je réalise de petits formulaires pour m'aider dans mes travaux de saisie multiple.
le code ci-dessous enregistre dans chaque tableau de la feuille les données que j'entre en fonction du choix de la feuille spécifiée.
le problème c'est que :
1- Pour le premier enregistrement j'arrive pas à me positionner sur la dernière ligne, celle juste après les en-têtes.
le message renvoyé est celui-ci : "ERREUR D'EXECUTION '438' : PROPRIETE OU METHODE NON GEREE PAR CET OBJET" ou encore le ERREUR D'EXECUTION '9'.
Tout s'arrête par la suite
2- Je souhaite forcer la majuscule dans les champs "texte1, texte2, texte3"
3- Enfin je désire interdire tout enregistrement tant que tous les champs ne sont pas renseignés.
Merci de m'aider.

code vba

'Procédure permettant de fermer le formulaire

Private Sub btnfermer_Click()
Unload Me
End Sub

'Procédure permettant l'initialisation du formulaire

Private Sub UserForm_Initialize()
Dim Feuille As Worksheet

'Nous parcourons toutes feuilles du classeur
For Each Feuille In Worksheets
Select Case Feuille.CodeName 'CodeName est le nom de code de la feuille
'On retire de la combobox les feuilles à ne pas afficher
Case "Feuil2", "Feuil3"
'Et on prend le reste des feuilles
Case Else
'On charge les noms dans la liste déroulante
Me.cboChoixClasse.AddItem Feuille.Name
End Select
Next Feuille
End Sub

'Procédure permettant de réinitialiser le formulaire

Private Sub btnEffacer_Click()

cboChoixClasse = ""
texte1 = ""
texte2 = ""
texte3 = ""
texte4 = ""
texte5 = ""
texte6 = ""
End Sub

'Procédure permettant d'ajouter un nouvel enregistrement
'à la fin du tableau

Private Sub btnAjout_Click()
Dim nbControle As Integer
Dim Nouvelleligne As Range
Dim MaFeuille As String

'Procédure permettant d'obliger le remplissage de tous les champs
'On teste la saisie de tous les champs dans le formulaire

If Len(texte1) = 0 Then
lblMessage = "Veuillez saisir le Nom de l'élève"
Me.texte1.SetFocus
ElseIf Len(texte2) = 0 Then
lblMessage = "Veuillez saisir le Prénom de l'élève"
Me.texte2.SetFocus
ElseIf Len(texte3) = 0 Then
lblMessage = "Veuillez saisir la Date de Naissance de l'élève"
Me.texte3.SetFocus
ElseIf Len(texte4) = 0 Then
lblMessage = "Veuillez saisir le Lieu de Naissance de l'élève"
Me.texte4.SetFocus
ElseIf Len(texte5) = 0 Then
lblMessage = "Veuillez saisir le Matricule de l'élève"
Me.texte5.SetFocus
ElseIf Len(texte6) = 0 Then
lblMessage = "Veuillez Selectionner le Sexe de l'élève"
Me.texte6.SetFocus
ElseIf Len(cboChoixClasse) = 0 Then
lblMessage = "Veuillez Selectionner le Niveau d'étude de l'élève"
Me.cboChoixClasse.SetFocus
Else
End If

'On recupère le nom de la feuille de la liste déroulante
MaFeuille = cboChoixClasse.Value

'On teste qu'il y'a bien le nom d'une feuille de selectionnée
If Me.cboChoixClasse.Value = "" Then

MsgBox "Veillez selectionner la classe dans laquelle sera enregistré(e) l'élève" & " ", vbOKOnly + vbInformation, "VALIDATION"
Exit Sub
End If

'On recupère le nombre de contrôle dans le userform
nbControle = 6

'On se positionne sur la dernière ligne vide de la table de données
Set Nouvelleligne = Sheets(MaFeuille).Cells(Rows.Cont, 1).End(xlUp).Offset(1, 0)
For X = 1 To nbControle
Nouvelleligne = Me.Controls("texte" & X).Value
Set Nouvelleligne = Nouvelleligne.Offset(0, 1)
Next X

'On réinitialise les champs du formulaire à vide
For X = 1 To nbControle
Me.Controls("texte" & X).Value = ""
Next X

cboChoixClasse.Value = ""

'On affiche un message confirmant la nouvelle saisie dans la table
MsgBox "Le (la) nouvel(le) élève a bien été ajouté sur la feuille :" & MaFeuille, vbOKOnly + vbInformation, "VALIDATION"
End Sub
Afficher la suite 

1 réponse

Meilleure réponse
Messages postés
14787
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
14 octobre 2019
1176
4
Merci
Bonjour,
'premiere cellule vide colonne A
With Sheets(MaFeuille)
        Nouvelleligne = .Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
        If Nouvelleligne = 1 Then
            Nouvelleligne = Nouvelleligne + 1
        End If
        'écriture sur ligne
        For X = 1 To 6
            .Cells(Nouvelleligne, X) = Me.Controls("texte" & X).Value
            Me.Controls("texte" & X).Value = ""
        Next X
End With

Dire « Merci » 4

Heureux de vous avoir aidé ! Vous nous appréciez ? Donnez votre avis sur nous ! Evaluez CommentCaMarche

CCM 62632 internautes nous ont dit merci ce mois-ci

Re

Bonjour,
Combobox se remplissent, ok, et apres!!!

Après Il y a lieu d'exporter le contenu de ces combobox vers les cellules correspondantes dans l'emploi du temps concerné ; D'autant Plus que chaque combobox correspond à une période de cours, période qui correspond à une cellule de l'emploi du temps.

Donc, à chaque fois qu'on cliquera sur le bouton "valider" le code devrait sélectionner la feuille correspondante et y appliquer les informations se trouvant dans les combobox.
f894009
Messages postés
14787
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
14 octobre 2019
1176 -
Re,

Après Il y a lieu d'exporter le contenu de ces combobox
Ben, facile, a vous de jouer
Re,

Ben, facile, a vous de jouer

Je vais essayer et vous faire part.

Mais déjà, la seule option que je vois est de relier "systématiquement" chaque combobox à sa cellule de correspondance.
Y a-t-il une option permettant une boucle ?
f894009
Messages postés
14787
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
14 octobre 2019
1176 -
Re,

relier "systématiquement" chaque combobox à sa cellule
N'existe pas, faut du code

Y a-t-il une option permettant une boucle ?
Boucle pour remplir les cellules de la feuille, oui, a vous de trouver car c'est vraiment facile
Re,
Bonjour

Voici joint le nouveau fichier avec ce que j'ai pu jusqu'ici.

https://mon-partage.fr/f/q2yXTaTX/

Avec ce fichier, j'arrive pas à vider toutes les combobox avec le bouton "effacer", y a toujours un message d'erreur qui s'affiche.

Merci pour d'éventuelles propositions.
Commenter la réponse de f894009