Microsoft 365 erreur d'éxecution -2147417848 (80010108)

eric72

XLDnaute Accro
Bonsoir,

J'utilise un userform pour entrer des données dans un tableau et, bizzarement à intervalle irrégulier (1 fois sur 3 ou 4 entrées) j'ai ce bug qui apparait
et du coup ca ne prend pas en compte mon ajout de données, a ce moment il note juste ma date-entree et il plante sur cette ligne.
Quelqu'un a t il déjà rencontré ce problème ?
Merci beaucoup pour votre aide
Eric

Private Sub CommandButton1_Click()
Dim date_entree As Date
If Me.TextBox1.Value <> "" Then
date_entree = Format(Me.TextBox1.Value, "dd/mm/yyyy")
End If
Dim date_sortie As Date
If Me.TextBox6.Value <> "" Then
date_sortie = Format(Me.TextBox6.Value, "dd/mm/yyyy")
End If
Dim derligne As Integer
'Ne pas voir la macro s'exécuter
Application.ScreenUpdating = False
Call ToutDeproteger
'Ajouter un nouvel article
Sheets("Saisie").Select
If MsgBox("Confirmer la saisie", vbYesNo, "confirmation") = vbYes Then

derligne = Sheets("saisie").Range("f1048576").End(xlUp).Row + 1

Cells(derligne, 4) = date_entree 'VOILA LA CAUSE DU BUG
Cells(derligne, 5) = date_sortie
Cells(derligne, 6) = ComboBox1.Value
Cells(derligne, 7) = ComboBox2.Value
Cells(derligne, 8) = ComboBox3.Value
Cells(derligne, 9) = TextBox2.Value
Cells(derligne, 10) = TextBox3.Value
Cells(derligne, 11) = TextBox4.Value
Cells(derligne, 12) = TextBox5.Value
Cells(derligne, 16) = TextBox7.Value
End If
On Error GoTo Defaut

Photo = ComboBox4.Value
Image1.Picture = LoadPicture("C:\JCR\Photos Bijoux\" & Photo & ".Jpg")
Exit Sub
Defaut:
'Image1.Picture = LoadPicture("C:\JCR\Photos Bijoux\Defaut.Jpg")
'Rafraichir le tableau croisé dynamique
Columns("D:D").Select

Selection.NumberFormat = "m/d/yyyy"
Sheets("Stock Par Produit").Select
ActiveWorkbook.RefreshAll
Sheets("SAISIE").Select

Call ToutProteger
Unload FormulaireSaisie
'FormulaireSaisie.Show
ActiveWorkbook.Save
Application.ScreenUpdating = True
End Sub
 

Dudu2

XLDnaute Barbatruc
Bonsoir,
En effet, je ne comprends pas pourquoi tu mets du texte dans une variable Date:
date_entree = Format(Me.TextBox1.Value, "dd/mm/yyyy")
Même si VBA fera sans doute une conversion implicite. C'est peut-être ça qui finit par exploser plus loin !

Il faudrait faire:
If IsDate(Me.TextBox1.Value) Then date_entree = CDate(Me.TextBox1.Value) Else date_entree = 0
 

Dudu2

XLDnaute Barbatruc
Ok, je suppose que tu veux dire qu'il faut que ce soit des dates (car il est impossible d'avoir la certitude que l'utilisateur entrera une date valide, une erreur de frappe étant toujours possible).
J'ai pas trop compris ta séquence d'erreur, mais il y a des actions qu'il faut faire qu'on soit passer dans la séquence d'erreur ou pas.
Donc le code ci-dessous à adapter si besoin.
VB:
Private Sub CommandButton1_Click()
    Dim Date_entree As Date
    Dim Date_sortie As Date
    Dim Derligne As Long
   
    'Contrôle date d'entrée
    If Me.TextBox1.Value <> "" Then
        If Not IsDate(Me.TextBox1.Value) Then
            MsgBox "La date d'entrée saisie n'est pas un date valide !"
            Me.TextBox1.SetFocus
            Exit Sub
        Else
            Date_entree = CDate(Me.TextBox1.Value)
        End If
    End If

    'Contrôle date de sortie
    If Me.TextBox6.Value <> "" Then
        If Not IsDate(Me.TextBox6.Value) Then
            MsgBox "La date de sortie saisie n'est pas un date valide !"
            Me.TextBox6.SetFocus
            Exit Sub
        Else
            Date_sortie = CDate(Me.TextBox6.Value)
        End If
    End If
   
    'Inhibe l'affichage
    Application.ScreenUpdating = False
   
    'Déprotection
    Call ToutDeproteger
   
    'Ajouter un nouvel article
    If MsgBox("Confirmer la saisie", vbYesNo, "confirmation") = vbYes Then
        With ThisWorkbook.Sheets("Saisie")
            .Select
            Derligne = .Range("F" & Rows.Count).End(xlUp).Row + 1
           
            .Cells(Derligne, 4) = IIf(Date_entree = 0, "", Format(Date_entree, "dd/mm/yyyy"))
            .Cells(Derligne, 5) = IIf(Date_sortie = 0, "", Format(Date_sortie, "dd/mm/yyyy"))
            .Cells(Derligne, 6) = ComboBox1.Value
            .Cells(Derligne, 7) = ComboBox2.Value
            .Cells(Derligne, 8) = ComboBox3.Value
            .Cells(Derligne, 9) = TextBox2.Value
            .Cells(Derligne, 10) = TextBox3.Value
            .Cells(Derligne, 11) = TextBox4.Value
            .Cells(Derligne, 12) = TextBox5.Value
            .Cells(Derligne, 16) = TextBox7.Value
        End With
    End If
   
    'Error handling
    On Error GoTo Defaut
   
    Photo = ComboBox4.Value
    Image1.Picture = LoadPicture("C:\JCR\Photos Bijoux\" & Photo & ".Jpg")
    GoTo FinSub

Defaut:
    'Image1.Picture = LoadPicture("C:\JCR\Photos Bijoux\Defaut.Jpg")
    'Rafraichir le tableau croisé dynamique
    Columns("D:D").NumberFormat = "m/d/yyyy"
   
    Sheets("Stock Par Produit").Select
    ActiveWorkbook.RefreshAll
    Sheets("SAISIE").Select
   
    Unload FormulaireSaisie
   
    'FormulaireSaisie.Show
    ActiveWorkbook.Save

FinSub:
    'Error handling
    On Error GoTo 0
   
    'Protection
    Call ToutProteger
   
    'Désinhibe l'affichage
    Application.ScreenUpdating = True
End Sub
 

Dudu2

XLDnaute Barbatruc
Au temps pour moi ! :eek:
Si les cellules destinataires sont en format date, il ne faut évidemment pas envoyer le texte issu de Format() mais directement la variable date.
VB:
.Cells(Derligne, 4) = IIf(Date_entree = 0, "", Date_entree)
.Cells(Derligne, 5) = IIf(Date_sortie = 0, "", Date_sortie)

Sinon, tu as toujours le problème de plantage ?