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

Fermé
Devis2019 - 14 juin 2019 à 21:03
 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
A voir également:

1 réponse

f894009 Messages postés 17205 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 19 octobre 2024 1 709
Modifié le 15 juin 2019 à 06:47
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
5
f894009 Messages postés 17205 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 19 octobre 2024 1 709
Modifié le 15 juin 2019 à 06:46
Re,

Mis RAZ Textbox dans la meme boucle
0
Merci déjà pour la contribution, toutefois, l'exécution du code renvoi un message d'erreur ainsi affiché :
Erreur d'exécution '91': variable objet ou variable de bloc with non définie.
0