Autres USERFORM Masque de saisie

domeli

XLDnaute Junior
Bonjour à tous.

J'ai besoin de faire un masque de saisie pour le CSE. J'ai fait une bonne partie du boulot mais il y a des choses que je ne sais pas faire.
Il y a des champs que je ne peux pas remplir tout de suite et ça me laisse des trous dans la ligne du dessus.
J'ai donc 2 problèmes à résoudre.

1- Quand je remplis une ligne avec la saisie, ça remonte sur les trous au dessus et je voudrais que ça reste sur la même ligne. Je sais que ça se passe au niveau "Range("H65536").End(xlUp).Offset(1, 0)" mais je n'arrive pas à comprendre le truc.
2- Comment revenir sur la saisie d'une ligne en particulier pour y ajouter de nouvelles informations ?

Mon fichier d'origine fait plus de 900 lignes avec beaucoup plus de colonne, mais j'ai simplifier au maximum pour aller à l'essentiel.
Un petit coup de main ne serait pas de refus.
 

Pièces jointes

  • Masque saisie.xls
    70 KB · Affichages: 62

patricktoulon

XLDnaute Barbatruc
re
VB:
Private Sub CmdSaisieUserValider_Click()
    If Me.TxtNUser.Text = "" Then MsgBox "Vous devez entrer le nom de l'utilisateur.": Me.TxtNUser.SetFocus: Exit Sub
    If Me.TxtPUser.Text = "" Then MsgBox "Vous devez entrer le prénom de l'utilisateur.": Me.TxtPUser.SetFocus: Exit Sub
    Userconverti = UCase(Me.TxtNUser.Text) & " " & UCase(Me.TxtPUser.Text)

    Set c = Feuil2.Range("A:J").Find("*", , , , xlByRows, xlPrevious)
    If Not c Is Nothing Then
        ligne = c.Row + 1
        Range("A" & ligne).End(xlUp).Offset(1, 0).Value = Userconverti
        '    Range("H" & ligne) = UCase(Me.TxtNUser.Text)
        For Each ctrl In Me.Controls
            If ctrl.Tag <> "" Then
                With Feuil2.Range(ctrl.Tag & ligne)
                    Select Case ctrl.Tag
                    Case "H", "I", "O", "R", "U", "X", "AA", "AD": .Value = CDate(ctrl.Value)
                    Case "B", "C": .Value = Val(ctrl.Value)
                    Case Else: .Value = ctrl.Value
                    End Select
                End With
            End If
        Next
        Unload Me
    End If
End Sub
 

domeli

XLDnaute Junior
:)
Tout fonctionne. Tout va dans les bonnes colonnes comme je te l'ai dit plus tôt. Le souci a été réglé dès que j'ai mis les bons Tag dans les combo. Il ne reste plus que de petits détails.
Les dates
Le nom en M à mettre en majuscule
Et les prénoms des enfants en Application.Proper

Les dates c'est le plus important car sinon mes fonctions ne marchent pas et derrière ça me remplit les tableaux de synthèses dans d'autres onglets pour les commandes de chéquiers.
 

domeli

XLDnaute Junior
Alors je viens de tester.
Matricule passe en standard (doit rester en texte à cause des zéro)
Fonction et Statut sont restés vides ???o_O
Les dates se sont bien insérées en format date mais la macro plante à ce niveau
1586638247502.png

J'ai entré 2 enfants et je pense qu'il détecte les vides.
Un truc bizarre. Si je mets date entrée Et date sortie j'ai le statut
Si je ne mets aue la date d'entrée je n'ai pas le statut
 

domeli

XLDnaute Junior
Je colle ça à la place de Case "B", "C":....

VB:
  Case "M": .Value = UCase(ctrl.Value)
  Case "N", "Q", "T", "W", "Z", "AC": .Value = Application.Proper(ctrl.Value)

Mais il faut d'abord trouver pourquoi ça plante sinon ça va faire pareil non ?
 

domeli

XLDnaute Junior
ouf ! J'ai enfin réussi à trouver à force de tester des trucs :)
Voici le code :
VB:
Private Sub CmdSaisieUserValider_Click()
    If Me.TxtNUser.Text = "" Then MsgBox "Vous devez entrer le nom de l'utilisateur.": Me.TxtNUser.SetFocus: Exit Sub
    If Me.TxtPUser.Text = "" Then MsgBox "Vous devez entrer le prénom de l'utilisateur.": Me.TxtPUser.SetFocus: Exit Sub
    Userconverti = UCase(Me.TxtNUser.Text) & " " & UCase(Me.TxtPUser.Text)

    Set c = Feuil2.Range("A:J").Find("*", , , , xlByRows, xlPrevious)
    If Not c Is Nothing Then
        ligne = c.Row + 1
        Range("A" & ligne).End(xlUp).Offset(1, 0).Value = Userconverti
        
        For Each ctrl In Me.Controls
            If ctrl.Tag <> "" Then
                With Feuil2.Range(ctrl.Tag & ligne)
                    Select Case ctrl.Tag
                    Case "J", "M": .Value = UCase(ctrl.Value)
                    Case "N", "Q", "T", "W", "Z", "AC": .Value = Application.Proper(ctrl.Value)
                    Case "H", "I", "O", "R", "U", "X", "AA", "AD": .Value = Format(ctrl.Value, "dd/mm/yyyy")
                    Case Else: .Value = ctrl.Value
                    End Select
                End With
            End If
        Next
        Unload Me
    End If
End Sub

En fait le CDate oblige à combler les vides alors que le format non. Enfin un truc comme ça.
Les Tag et les Case m'on beaucoup aidés alors merci.
Il me reste un petit souci c'est dans le deuxième code du UserForm et les boutons Valider et Annuler qui se mettent en bas au déclenchement.
J'ai essayer de mettre dans toutes les lignes du code mais rien à faire. Ou il disparaissent, ou ils restent en bas. Ce qui oblige à ouvrir la partie enfant et la refermer pour qu'ils remontent.
Bon c'est pas bien grave mais du coup ça sert à rien d'avoir 2 parties.
A moins de faire 2 boutons de chaque...Pas terrible.
Bref merci pour tout car sans ton aide j'y serai sans doute pas arrivé.
Joyeuses Pâques
 

patricktoulon

XLDnaute Barbatruc
re
tiens voila
VB:
Private Sub CmdSaisieUserValider_Click()
    If Me.TxtNUser.Text = "" Then MsgBox "Vous devez entrer le nom de l'utilisateur.": Me.TxtNUser.SetFocus: Exit Sub
    If Me.TxtPUser.Text = "" Then MsgBox "Vous devez entrer le prénom de l'utilisateur.": Me.TxtPUser.SetFocus: Exit Sub
    Userconverti = UCase(Me.TxtNUser.Text) & " " & UCase(Me.TxtPUser.Text)

    Set c = Feuil2.Range("A:J").Find("*", , , , xlByRows, xlPrevious)
    If Not c Is Nothing Then
        ligne = c.Row + 1
        Range("A" & ligne).End(xlUp).Offset(1, 0).Value = Userconverti
        '    Range("H" & ligne) = UCase(Me.TxtNUser.Text)
        For Each ctrl In Me.Controls
            If ctrl.Tag <> "" Then
                With Feuil2.Range(ctrl.Tag & ligne)
                    Select Case ctrl.Tag
                    Case "H", "I", "O", "R", "U", "X", "AA", "AD":
                    .Value = IIf(ctrl.Value <> "" And IsDate(ctrl.Value), CDate(ctrl.Value), "")
                    Case "B", "C": .Value = ctrl.Text
                    Case "N", "Q", "T", "W", "Z", "AC": .Value = StrConv(ctrl.Value, vbProperCase)
                    Case Else: .Value = ctrl.Value
                    End Select
                End With
            End If
        Next
        Unload Me
    End If
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 228
Messages
2 086 421
Membres
103 206
dernier inscrit
diambote