Erreur 103 et 400 sur deux boutons différents

Bonjour à toutes et à tous,

Ça fait 2 jours que je bug sur un problème. J'ai beau passer en revue toutes les lignes de mon code mais je ne trouve pas et je pense que d'être focalisé dessus n'aide pas non plus.

Je vous expose mon problème : J'ai différentes feuilles avec des boutons faisant apparaître des userform. Sur une des feuilles 2 boutons ne fonctionnent pas. Je vous joins le code de la feuille et celui de l'userforme si vous pouvez me dire d'où viens le le problème.

Merci beaucoup d'avance

VBA feuille :

Sub Afficher_Form_Ajout_Salarie()
With UF_Salaries

.TB_Paie.Text = ""
.TB_Nom.Text = ""
.TB_Prénom.Text = ""
.TB_Observations.Text = ""

.TB_Paie.SelStart = 0
.TB_Nom.SelStart = 0
.TB_Prénom.SelStart = 0
.TB_Observations.SelStart = 0

.TB_Paie.SelLength = Len(.TB_Paie.Value)
.TB_Nom.SelLength = Len(.TB_Nom.Value)
.TB_Prénom.SelLength = Len(.TB_Prénom.Value)
.TB_Observations.SelLength = Len(.TB_Nom.Value)

.CB_Service.RowSource = "Liste_Services"
.CB_Service.ListIndex = Evaluate("=MATCH(VD_Service,Liste_Services)-1")
.CB_Territoire.RowSource = "Liste_Territoires"
.CB_Territoire.ListIndex = Evaluate("=MATCH(VD_Territoire,Liste_Territoires)-1")

.Titre.Caption = "Ajouter un Salarié"
End With
UF_Salaries.Show
End Sub

Sub Afficher_Form_Modif_Salarie()
Dim Réponse, MaLigneSalarie As Integer
Dim MonNumPaie, MonNom, MonPrénom, MonService, MonTerritoire, MesObservations As String

MaLigneSalarie = ActiveCell.Row

'Vérifier qu'on est dans la plage des Salariés
If MaLigneSalarie < Range("Salarié").Row + 1 Or MaLigneSalarie > Range("Salarié").End(xlDown).Row Then
Réponse = MsgBox("Sélection incorrecte", vbOKOnly, "Modification de ligne")
If Réponse Then Exit Sub
End If

With Worksheets("Salariés")
MonNumPaie = .Range("B" & MaLigneSalarie).Value
MonNom = .Range("C" & MaLigneSalarie).Value
MonPrénom = .Range("D" & MaLigneSalarie).Value
MonService = .Range("E" & MaLigneSalarie).Value
MonTerritoire = .Range("F" & MaLigneSalarie).Value
MesObservations = .Range("G" & MaLigneSalarie).Value
MonAncienSalarie = .Range("C" & MaLigneSalarie).Value & " " & .Range("D" & MaLigneSalarie).Value
End With

With UF_Salaries
.TB_Paie = MonNumPaie
.TB_Nom.Text = MonNom
.TB_Prénom.Text = MonPrénom
.TB_Observations.Text = MesObservations

.TB_Paie.SelStart = 0
.TB_Nom.SelStart = 0
.TB_Prénom.SelStart = 0
.TB_Observations.SelStart = 0

.TB_Paie.SelLength = Len(.TB_Paie.Value)
.TB_Nom.SelLength = Len(.TB_Nom.Value)
.TB_Prénom.SelLength = Len(.TB_Prénom.Value)
.TB_Observations.SelLength = Len(.TB_Nom.Value)

.CB_Service.Text = MonService
.CB_Service.RowSource = "Liste_Services"

.CB_Territoire.Text = MonTerritoire
.CB_Territoire.RowSource = "Liste_Territoires"

.TB_Nom.SetFocus
.Titre.Caption = "Modifier un Salarié"

End With
UF_Salaries.Show
End Sub

Sub Trier_Salarie()
Sheets("Salariés").Activate
Call Déprotéger
With Sheets("Salariés").Range("Salarié")
.Sort Key1:=ActiveCell, Order1:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortTextAsNumbers
End With
Call Protéger
End Sub
Sub Supprimer_Salarie()
Dim MesLignesSalarie, MaLigneSalarie, Réponse As Integer
Dim Message, MaCellule, Formule As String

On Error GoTo Supprimer_Erreur

Worksheets("Salariés").Activate
'Contrôler si sélection multiple

If Selection.Cells.Count > 1 Then
Réponse = MsgBox("Sélectionnez une seule cellule !", vbOKOnly, "Contrôle de suppression")
Exit Sub
End If
MaCellule = "G" & ActiveCell.Row

'Interdire la suppression de la dernière ligne :
MaLigneSalarie = Range("Salarié").Row + 1 ' Worksheets("Paramètres").Range("Première_Ligne_Salarie").Value
Formule = "=CountA(Salariés!A:A)-CountA(Salariés!$A$1:$A$" & MaLigneSalarie - 1 & ")"
MesLignesSalarie = Evaluate(Formule)

If MesLignesSalarie = 1 Then
Réponse = MsgBox("Cette ligne sert de modèle : modifiez plutôt ses valeurs !", vbOKOnly, "Contrôle de suppression")
Exit Sub
End If

'Interdire la suppression d'une cellule verrouillée :
If Worksheets("Salariés").Range(MaCellule).Locked = True Then
Réponse = MsgBox("Suppression de cette ligne non autorisée !", vbOKOnly, "Contrôle de suppression")
Exit Sub
End If

'Interdire la suppression d'un salarié utilisée dans les Attributions (colonne F : Nombre d'attributions actives)
With Worksheets("Salariés")
On Error Resume Next
MesLignesSalarie = .Range("F" & ActiveCell.Row).Value
On Error GoTo Supprimer_Erreur
If MesLignesSalarie <> 0 Then
Réponse = MsgBox("Suppression impossible : ce salarié est utilisé dans les attributions !", vbOKOnly, "Contrôle avant suppression")
If Réponse = vbOK Then Exit Sub
End If
End With

'Interdire la suppression d'une valeur par défaut:
'If Worksheets("Salariés").Range("A" & ActiveCell.Row).Value = Worksheets("Paramètres").Range("VD_Salarié").Value Then
' Réponse = MsgBox("Suppression de cette ligne non autorisée (valeur par défaut)!", vbOKOnly, "Contrôle de suppression")
' Exit Sub
'End If

'Suppression effective
Réponse = MsgBox("Voulez-vous réellement supprimer cette ligne ?", vbYesNo, "Suppression définitive d'une ligne")
Select Case Réponse
Case vbYes
Déprotéger
Application.ScreenUpdating = False
Selection.EntireRow.Delete
Protéger
End Select

Supprimer_Exit:
Exit Sub
Supprimer_Erreur:
Message = MsgBox(Error$)
Resume Supprimer_Exit
End Sub

VBA Userform : UF_Salaries

Option Explicit

Private Sub Bouton_Annuler_Click()
Call Protéger
UF_Salaries.Hide
End Sub

Private Sub Bouton_Valider_Click()
Dim MaLigneSalarie, MaLigneAttribution, Réponse As Integer
Dim MonNumPaie, MonNom, MonPrénom, MonService, MonTerritoire, MesObservations, MonSalarie, ModeLigne, Message As String
Dim Formule As String

If Me.Titre.Caption = "Ajouter un Salarié" Then
    ' AJOUT *******************************************************
    ModeLigne = "Ajout"
    MaLigneSalarie = Range("Salarié").Row + 1
Else
    'MODIF *******************************************************
    ModeLigne = "Modif"
    MaLigneSalarie = ActiveCell.Row
End If

'Contrôles
If Not Len(Me.TB_Paie.Value) > 0 Then
    Message = "Veuillez entrer un nom valide !"
    Réponse = MsgBox(Message, vbOKOnly, "Controle de saisie")
    Me.TB_Paie.SetFocus
    Exit Sub
End If

If Not Len(Me.TB_Nom.Value) > 0 Then
    Message = "Veuillez entrer un nom valide !"
    Réponse = MsgBox(Message, vbOKOnly, "Controle de saisie")
    Me.TB_Nom.SetFocus
    Exit Sub
End If

If Not Len(Me.CB_Service.Value) > 0 Then
    Message = "Veuillez entrer un service valide !"
    Réponse = MsgBox(Message, vbOKOnly, "Controle de saisie")
    Me.CB_Service.SetFocus
    Exit Sub
End If

If Not Len(Me.CB_Territoire.Value) > 0 Then
    Message = "Veuillez entrer un service valide !"
    Réponse = MsgBox(Message, vbOKOnly, "Controle de saisie")
    Me.CB_Territoire.SetFocus
    Exit Sub
End If

MonNumPaie = Me.TB_Paie.Value
MonNom = Me.TB_Nom.Value
MonPrénom = Me.TB_Prénom.Value
MonService = Me.CB_Service.Value
MonTerritoire = Me.CB_Territoire.Value
MesObservations = Me.TB_Observations.Value

UF_Salaries.Hide

Sheets("Salariés").Activate
Call Déprotéger
'Si on est en mode Ajout, on insère une ligne
If ModeLigne = "Ajout" Then
    Application.ScreenUpdating = False
    With Sheets("Salariés")
        .Rows(MaLigneSalarie).Select
        Selection.Copy
        Selection.Insert Shift:=xlDown
        Selection.ClearContents
        Application.CutCopyMode = False
    End With
End If

With Sheets("Salariés")
    'Numéro de Paie (colonne B)
    .Range("B" & MaLigneSalarie).Value = MonNumPaie
    'Nom (colonne C)
    .Range("C" & MaLigneSalarie).Value = MonNom
    'Prénom (colonne D)
    .Range("D" & MaLigneSalarie).Value = MonPrénom
     'Service (colonne E)
    .Range("E" & MaLigneSalarie).Value = MonService
    'Territoire (colonne F)
    .Range("F" & MaLigneSalarie).Value = MonTerritoire
     'Observations (colonne G)
    .Range("G" & MaLigneSalarie).Value = MesObservations

    'Identité (colonne A) : =C6&" "&D6
    Formule = "=C" & MaLigneSalarie & "&" & Chr(34) & " " & Chr(34) & "&" & "D" & MaLigneSalarie
    .Range("A" & MaLigneSalarie).Formula = Formule

    'Nombre d'attributions actives (colonne H)
    '=SOMME.SI.ENS(Attributions!C:C;Attributions!A:A;A:A;Attributions!E:E;"oui")
    Formule = "=SumifS(Attributions!C:C,Attributions!A:A,A:A,Attributions!E:E," & Chr(34) & "oui" & Chr(34) & ")"
    .Range("F" & MaLigneSalarie).Formula = Formule

    'Nombre d'attributions inactives (colonne I)
    '=SOMME.SI.ENS(Attributions!C:C;Attributions!A:A;A:A;Attributions!E:E;"non")
    Formule = "=SumifS(Attributions!C:C,Attributions!A:A,A:A,Attributions!E:E," & Chr(34) & "non" & Chr(34) & ")"
    .Range("G" & MaLigneSalarie).Formula = Formule

    MonSalarie = .Range("A" & MaLigneSalarie).Value
    .Range("A" & MaLigneSalarie).Select

End With
Call Protéger

'Exit Sub

'Test de changement d'un libellé du Salarié impliquant une mise à jour des Attributions
If ModeLigne = "Modif" Then
    If MonSalarie <> MonAncienSalarie Then
    MaLigneAttribution = Range("Attributions").Row + 1
        Application.ScreenUpdating = False
        With Sheets("Attributions")
            Worksheets("Attributions").Unprotect
Boucle_MAJ:
            If Len(.Range("A" & MaLigneAttribution).Value) = 0 Then GoTo Fin_Boucle_MAJ
            If .Range("A" & MaLigneAttribution).Value = MonAncienSalarie Then .Range("A" & MaLigneAttribution).Value = MonSalarie
            MaLigneAttribution = MaLigneAttribution + 1
            GoTo Boucle_MAJ

Fin_Boucle_MAJ:
            Worksheets("Attributions").Protect DrawingObjects:=True, Contents:=True, Scenarios:= _
                False, AllowSorting:=True, AllowFiltering:=True, AllowUsingPivotTables:= _
                True
        End With
    End If
    Sheets("Salariés").Activate
End If

End Sub

Private Sub CB_Service_Change()
Dim Message As String
Dim Réponse As Integer

If Me.CB_Service.ListIndex = 0 Then
    Message = "Veuillez entrer un Service valide !"
    Réponse = MsgBox(Message, vbOKOnly, "Controle de saisie")
    Me.CB_Service.SetFocus
    Exit Sub
End If

End Sub
Private Sub CB_Territoire_Change()
Dim Message As String
Dim Réponse As Integer

If Me.CB_Territoire.ListIndex = 0 Then
    Message = "Veuillez entrer un Service valide !"
    Réponse = MsgBox(Message, vbOKOnly, "Controle de saisie")
    Me.CB_Service.SetFocus
    Exit Sub
End If

End Sub

Private Sub TB_Nom_AfterUpdate()
Dim Message As String
Dim Réponse As Integer

If Len(Me.TB_Nom.Value) = 0 Then
    Message = "Veuillez entrer un nom valide !"
    Réponse = MsgBox(Message, vbOKOnly, "Controle de saisie")
    Me.TB_Nom.SetFocus
    Exit Sub
End If
End Sub

Private Sub UserForm_Click()

End Sub

Bonjour XXX et

Une petite présentation ICI serait la bienvenue

Si vous ne l'avez pas encore fait, je vous invite à lire :
- La charte du forum et notamment

  • Joignez (si possible) un fichier pour augmenter vos chances d'obtenir de l'aide en cliquant sur le bouton Fichier de l'éditeur. Si votre fichier est trop lourd ou contient des données personnelles, créez une version allégée de votre fichier avec juste assez d'informations pour permettre de comprendre votre problème. Dans tous les cas, ne postez JAMAIS de fichiers avec des informations personnelles ou confidentielles (cet utilitaire peut vous aider à les retirer).

- Quelques fonctionnalites du forum à connaître

Regardez aussi les petites icônes mises à votre disposition dans la barre de menu qui :
- vous permettent de poster un code (</>)
- ou de clôturer un fil lorsque vous avez terminé (V)

Merci pour votre participation

Cordialement

Rechercher des sujets similaires à "erreur 103 400 deux boutons differents"