XL 2016 Problème VBA pour débutant

spv414052

XLDnaute Nouveau
Bonjour,
Pour un suivi au plus proche de notre consommation de matériel de premiers secours, j'essaie de développer par le biais de différents tutoriel un outils simple d'utilisation et pas compliquer à développer en VBA (je débute).

J'ai créé le masque de saisie dans lequel, nous pourrons ajouter, quitter sans sauvegarder la saisie en cours et modifier. Pour les deux premiers item cela fonctionne mais pour modifier une intervention déjà saisie j'ai une erreur que je n'arrive pas à résoudre.
Est-ce que quelqu'un pourrait m'aiguiller?

D'avance je vous remercie et bonne soirée.

Spv414052
 

Pièces jointes

  • VBA_Debut_Suivi_Phamarcie_xx.xlsm
    27.2 KB · Affichages: 24

_Thierry

XLDnaute Barbatruc
Repose en paix
Ah oui Patrick celà fonctionne mieux ;)

On peut ajouter des items maintenant, mais par contre si le gars click à répétition sur Ajouter, il va ajouter autant de fois l'item toujours avec le même numéro de référence ''unique'', dans ma version j'ai tenté de palier à cet inconvénient.

La version de @JM27 est pas mal non plus mais nécessite un numéro séquentiel défini (à voir si celà convient à @spv414052) , mais donc une solution à l'opposé de notre approche avec Patrick pour n'utiliser le même user en cohabitation.

En tout cas spv4 a le choix maintenant ;)


Bien @ vous
@+Thierry
 

patricktoulon

XLDnaute Barbatruc
re
le code de mon userform entièrement contrôlé + le clearAll
VB:
Option Explicit
Private Sub Ajouter_Click()
    Dim Z, cc&, ligne&
    Z = Split("A.B.C.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.U.V.w", ".")
    ligne = Feuil2.Cells(Rows.Count, "A").End(xlUp).Row + 1
    If control_And_Message Then
        For cc = 0 To UBound(Z)
            Select Case True
            Case IsDate(Me.Controls(Z(cc)).Value): Feuil2.Range(Z(cc) & ligne) = CDate(Me.Controls(Z(cc)).Value)
            Case IsNumeric(Me.Controls(Z(cc)).Value): Feuil2.Range(Z(cc) & ligne) = Val(Me.Controls(Z(cc)).Value)
            Case Else: Feuil2.Range(Z(cc) & ligne) = Me.Controls(Z(cc)).Text
            End Select
        Next
        clearAll
    End If
End Sub
Private Sub modifier_Click()    'bouton Modifier
    Dim ligne&, x, cc&
    ligne = B.ListIndex + 2
    If MsgBox("Confirmez-vous la modification de cette Intervention ?", vbYesNo, "Demande de confirmation de modification") = vbYes Then
        If control_And_Message Then
            x = Split("A.B.C.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.U.V.w", ".")
            For cc = 0 To UBound(x)
                Select Case True
                Case IsDate(Me.Controls(x(cc)).Value): Feuil2.Range(x(cc) & ligne) = CDate(Me.Controls(x(cc)).Value)
                Case IsNumeric(Me.Controls(x(cc)).Value): Feuil2.Range(x(cc) & ligne) = Val(Me.Controls(x(cc)).Value)
                Case Else: Feuil2.Range(x(cc) & ligne) = Me.Controls(x(cc)).Text
                End Select
            Next
        End If
        clearAll
    End If
End Sub
Private Function control_And_Message()    'controle si c'est dument rempli (les 10 d'un coup)
    Dim x, T$, cc
    x = Split("C.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.U.V", ".")
    For cc = 0 To UBound(x) - 1 Step 2
        If Me.Controls(x(cc + 1)) = "" And Me.Controls(x(cc)) <> "" Then T = T & "la quantité  pour " & Me.Controls(x(cc)).Tag & " n'est pas renseignée" & vbCrLf
    Next
    If T <> "" Then MsgBox T
    control_And_Message = T = ""
End Function

Private Sub B_Change()
    Dim Ctrl As Object
    With B
        For Each Ctrl In Me.Controls
            If .ListIndex > -1 Then
                modifier.Enabled = True
                If Ctrl.Tag <> "" And Ctrl.Name <> "B" Then Ctrl.Value = Feuil2.Range(Ctrl.Name & .ListIndex + 2)
            Else: If Ctrl.Tag <> "" Then If Ctrl.Name <> "B" Then Ctrl.Value = ""
            End If
        Next
        modifier.Enabled = .ListIndex > -1
        Ajouter.Enabled = .ListIndex = -1 And .Value <> ""

    End With
    If A = "" Then A = Date
End Sub
Private Sub clearAll()
    Dim x, cc&
    B.Value = ""
    x = Split("C.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.U.V", ".")
    For cc = 0 To UBound(x): Me.Controls(x(cc)).Value = "": Next
    modifier.Enabled = B.ListIndex > -1
    Ajouter.Enabled = B.ListIndex = -1 And B.Value <> ""
End Sub

Private Sub UserForm_Initialize()
    Me.A.Value = Date
    Me.B.List = Feuil2.Range("B2", Cells(Rows.Count, "B").End(xlUp)).Value
End Sub


Private Sub CommandButton3_Click(): Unload Me: End Sub
 

Statistiques des forums

Discussions
312 538
Messages
2 089 396
Membres
104 158
dernier inscrit
obad