XL 2021 Erreur d'exécution '-2147417848 (80010108). La méthode '-Default' de l'objet 'Range' a échoué après quelques saisies d'enregistrement

Rv_38

XLDnaute Nouveau
Bonjour à tous,

Nouveau venu sur le forum, je fais appel à vos compétences. J'ai créé une base de gestion stock pour enregistrer au travers de userforms des articles, des achats et des ventes de produits. Mon problème est qu'après une dizaine de saisies, l'erreur d'exécution '-2147417848 (80010108). La méthode '-Default' de l'objet 'Range' a échoué se produit.
La 1° cellule de la nouvelle ligne du tableau structuré reçoit bien la valeur du textbox concerné mais mon code bug et je n'ai pas d'autre choix que de fermer Excel et perdre les données saisies avant mon "plantage". Japprends depuis peu et grace au forum à utiliser VBA. je suis loin d'avoir toutes vos connaissances. J'ai recréée mon fichier pensant qu'il était corrompu mais rien n'y fait
Malgré de nombreuses recherches sur internet, je ne trouve pas de solution pour corriger ce bug.
Je joint mon fichier et le code. Si l'un de vous peut me venir en aide.
Merci par avance et bonne journée
Rv38
 

Pièces jointes

  • V9 Gestion Stock.xlsm
    90.9 KB · Affichages: 13

laurent950

XLDnaute Barbatruc
Bonjour,

Correction de la gestion de l'erreur en Poste #6 Modifier par cette autre variante qui devrait fonctionner cette fois avec les bons résultats.

Code:
Dim I As Long
    Dim DateS As Date
    Dim DataSheet As Worksheet
    Set DataSheet = Worksheets("Donnees_Vente")
 
    If AjoutModification = True Then
        I = Derligne(DataSheet.Name)    'Appelle la fonction public Derligne du ModulePrincipal
    Else
        I = LigneAmodifier
    End If
 
    DateS = Me.TxDate.Value
    On Error GoTo ErrorHandler
        DataSheet.Cells(I, 1) = Me.TxCodeArticle.Value
        DataSheet.Cells(I, 2) = Me.TxLibelleArticle.Value
        DataSheet.Cells(I, 3) = CDbl(Me.TxPrix.Value)
        DataSheet.Cells(I, 4) = CDbl(Me.TxQuantite.Value)
        DataSheet.Cells(I, 5) = CDbl(Me.TxMontant.Value)
        DataSheet.Cells(I, 6) = DateS
        DataSheet.Cells(I, 7) = Me.TxCodeFamille.Value
        DataSheet.Cells(I, 8) = Me.TxLibelleFamille
        DataSheet.Cells(I, 9) = Me.TxUniteVente
    Unload Me
    End If
    Exit Sub
 
ErrorHandler:
    'MsgBox "Erreur: " & Err.Number & vbCrLf & Err.Description
    'Reprend l'exécution au niveau de la ligne à l'origine de l'erreur.
    Resume

End Sub
 
Dernière édition:

Oneida

XLDnaute Impliqué
Bonjour,

J'ai peut-etre une solution qui pour le moment marche.
J'ai change le code de remplissage des tableaux ventes et achat
Je suis sur la partie article ou il y a le meme souci et une erreur execution 9 sur la partie tri (resolue au trois endroits dans le code de l'UF)

Je continue

Suite:
Fichier a tester, chez moi ca tourne. Plus de reouverture d'excel, plus de plantage sur moulte tests
Par contre, pas mal de modif a la suite de la facon de gerer les tableaux.
J'ai ajoute un calendrier (Calendar V4.2.2 de patricktoulon sur ExcelDownloads) pour les dates, click sur la textbox date et le calendrier apparait a vous de choisir annee, mois, jour suivant.
Par defaut c'est la date du jour
 

Pièces jointes

  • V9 Gestion Stock_Test_4.xlsm
    143.9 KB · Affichages: 5
Dernière édition:

Rv_38

XLDnaute Nouveau
Bonjour,

J'ai peut-etre une solution qui pour le moment marche.
J'ai change le code de remplissage des tableaux ventes et achat
Je suis sur la partie article ou il y a le meme souci et une erreur execution 9 sur la partie tri (resolue au trois endroits dans le code de l'UF)

Je continue

Suite:
Fichier a tester, chez moi ca tourne. Plus de reouverture d'excel, plus de plantage sur moulte tests
Par contre, pas mal de modif a la suite de la facon de gerer les tableaux.
J'ai ajoute un calendrier (Calendar V4.2.2 de patricktoulon sur ExcelDownloads) pour les dates, click sur la textbox date et le calendrier apparait a vous de choisir annee, mois, jour suivant.
Par defaut c'est la date du jour
Bonjour Oneida, Laurent950,

Merci pour votre aide. Internet toujours hs. j'ai peur que mon fichier soit à nouveau corrompu, alors je le reconstruit et teste au fur et à mesure avancement. Je téléchargerai ton fichier et te tiens au courant bonne journée
 

Rv_38

XLDnaute Nouveau
Bonjour,

Correction de la gestion de l'erreur en Poste #6 Modifier par cette autre variante qui devrait fonctionner cette fois avec les bons résultats.

Code:
Dim I As Long
    Dim DateS As Date
    Dim DataSheet As Worksheet
    Set DataSheet = Worksheets("Donnees_Vente")
 
    If AjoutModification = True Then
        I = Derligne(DataSheet.Name)    'Appelle la fonction public Derligne du ModulePrincipal
    Else
        I = LigneAmodifier
    End If
 
    DateS = Me.TxDate.Value
    On Error GoTo ErrorHandler
        DataSheet.Cells(I, 1) = Me.TxCodeArticle.Value
        DataSheet.Cells(I, 2) = Me.TxLibelleArticle.Value
        DataSheet.Cells(I, 3) = CDbl(Me.TxPrix.Value)
        DataSheet.Cells(I, 4) = CDbl(Me.TxQuantite.Value)
        DataSheet.Cells(I, 5) = CDbl(Me.TxMontant.Value)
        DataSheet.Cells(I, 6) = DateS
        DataSheet.Cells(I, 7) = Me.TxCodeFamille.Value
        DataSheet.Cells(I, 8) = Me.TxLibelleFamille
        DataSheet.Cells(I, 9) = Me.TxUniteVente
    Unload Me
    End If
    Exit Sub
 
ErrorHandler:
    'MsgBox "Erreur: " & Err.Number & vbCrLf & Err.Description
    'Reprend l'exécution au niveau de la ligne à l'origine de l'erreur.
    Resume

End Sub
Bonjour,Laurent950

Merci pour ta piste, mais je ne peux pas ignorer les erreurs, les données n'ont pas les bonnes valeurs et ne sont pas prises en compte dans la feuille donnees_article. Je refais entierement mon fichier et reviens vers toi
bonne journée
 

Rv_38

XLDnaute Nouveau
Bonjour Oneida, Laurent950,

Merci pour votre aide. Internet toujours hs. j'ai peur que mon fichier soit à nouveau corrompu, alors je le reconstruit et teste au fur et à mesure avancement. Je téléchargerai ton fichier et te tiens au courant bonne journée
Oneida,

Internet Ok. Je viens de récupérer ton fichier. Je te joins celui que je reconstruit. je n'en suis qu'au début et il bug déjà. J'ai mis un commentaire dans FmSaisieArticles au niveau du blocage.
Je n'ai pas beaucoup de dispo ces 2 jours donc je m'excuse par avance si je ne répond pas de suite.
Merci par avance
 

Pièces jointes

  • V2 BUG Gestion Stock.xlsm
    66.3 KB · Affichages: 3

laurent950

XLDnaute Barbatruc
Bonsoir,

Je ne suis pas sûr mais j'ai l'impression que ce sont les tableaux structurés de votre fichier Excel qui pose ce problème d'erreur d'exécution de l'objet Range :
.
Vous utilisez des tableaux structuré.
Modification du code pour tableau structuré, suite au Poste #1
Mais il y a toujours l'erreur

VB:
Private Sub CmdValider_Click()
    Application.CutCopyMode = False
    If Me.TxCodeFamille.Value = "" Then
        MsgBox "Veuillez sélectionner un article avant de continuer !", vbCritical, "STOCK"
        Me.CmdChoixArticle.SetFocus
    ElseIf Me.TxQuantite.Value = "" Then
        MsgBox "Veuillez saisir la quantité à vendre de l'article concerné avant de continuer !", vbCritical, "STOCK"
        Me.TxQuantite.SetFocus
    ElseIf Not Len(Me.TxDate.Value) = 10 Then
        MsgBox "Le format de la date n'est pas correct, veuillez saisir (JJ/MM/AAAA) !", vbCritical, "STOCK"
        Me.TxDate.SetFocus
    Else
 
    If MsgBox("Souhaitez-vous valider ces informations ?", vbQuestion + vbYesNo, "STOCK") = vbNo Then Exit Sub

    'Mettre à ce niveau les contrôles de saisies qu'il faut
    'Ce code permet d'ajouter ou de modifier une information qui aura été selectionnée
    'dans la liste des données stockées grace au bouton modifier
 
    'Dim I As Long
    'Dim DateS As Date
    'Dim DataSheet As Worksheet
   
    ' Cette Fonction n'est plus utile car I sera toujours égale à 1
    ' Puisque l'on ajoute une ligne = Set row = TblVente.ListRows.Add()
    ' la ligne ajouté row(1) sera la dernière ligne du tableau structuré
    '
    'If AjoutModification = True Then
        'I = Derligne(FeuilDonneesVente.Name)    'Appelle la fonction public Derligne du ModulePrincipal
    'Else
        'I = LigneAmodifier
    'End If
 
    'DateS = Me.TxDate.Value
    'Set DataSheet = FeuilDonneesVente
 
    Dim TblVente As ListObject
    Set TblVente = Worksheets("Donnees_Vente").ListObjects("TblVente")
    Dim row As ListRow
    Set row = TblVente.ListRows.Add()
        row.Range.Cells(1, 1).Value = Me.TxCodeArticle.Value 'DataSheet.Cells(I, 1).Value = Me.TxCodeArticle.Value
        row.Range.Cells(1, 2).Value = Me.TxLibelleArticle.Value 'DataSheet.Cells(I, 2).Value = Me.TxLibelleArticle.Value
        row.Range.Cells(1, 3).Value = CDbl(Me.TxPrix.Value) 'DataSheet.Cells(I, 3).Value = CDbl(Me.TxPrix.Value)
        row.Range.Cells(1, 4).Value = CDbl(Me.TxQuantite.Value) 'DataSheet.Cells(I, 4).Value = CDbl(Me.TxQuantite.Value)
        row.Range.Cells(1, 5).Value = CDbl(Me.TxMontant.Value) 'DataSheet.Cells(I, 5).Value = CDbl(Me.TxMontant.Value)
        row.Range.Cells(1, 6).Value = Me.TxDate.Value 'DataSheet.Cells(I, 6).Value = DateS
        row.Range.Cells(1, 7).Value = Me.TxCodeFamille.Value  'DataSheet.Cells(I, 7).Value = Me.TxCodeFamille.Value
        row.Range.Cells(1, 8).Value = Me.TxLibelleFamille 'DataSheet.Cells(I, 8).Value = Me.TxLibelleFamille
        row.Range.Cells(1, 9).Value = Me.TxUniteVente 'DataSheet.Cells(I, 9).Value = Me.TxUniteVente
    Unload Me
    End If
    Application.CutCopyMode = True
End Sub

Quelques explication :

Donc :
Ou réécrire le code avec VBA pour tableaux structuré en rapport avec le modèle Objet
Ou Réécrire le code en se passant des Tableaux Structurés, Plage Nommée, ect.
 
Dernière édition:

Rv_38

XLDnaute Nouveau
Oneida,

Internet Ok. Je viens de récupérer ton fichier. Je te joins celui que je reconstruit. je n'en suis qu'au début et il bug déjà. J'ai mis un commentaire dans FmSaisieArticles au niveau du blocage.
Je n'ai pas beaucoup de dispo ces 2 jours donc je m'excuse par avance si je ne répond pas de suite.
Merci par avance
Bonjour Oneida,
Bonsoir,

Je ne suis pas sûr mais j'ai l'impression que ce sont les tableaux structurés de votre fichier Excel qui pose ce problème d'erreur d'exécution de l'objet Range :
.
Vous utilisez des tableaux structuré.
Modification du code pour tableau structuré, suite au Poste #1
Mais il y a toujours l'erreur

VB:
Private Sub CmdValider_Click()
    Application.CutCopyMode = False
    If Me.TxCodeFamille.Value = "" Then
        MsgBox "Veuillez sélectionner un article avant de continuer !", vbCritical, "STOCK"
        Me.CmdChoixArticle.SetFocus
    ElseIf Me.TxQuantite.Value = "" Then
        MsgBox "Veuillez saisir la quantité à vendre de l'article concerné avant de continuer !", vbCritical, "STOCK"
        Me.TxQuantite.SetFocus
    ElseIf Not Len(Me.TxDate.Value) = 10 Then
        MsgBox "Le format de la date n'est pas correct, veuillez saisir (JJ/MM/AAAA) !", vbCritical, "STOCK"
        Me.TxDate.SetFocus
    Else
 
    If MsgBox("Souhaitez-vous valider ces informations ?", vbQuestion + vbYesNo, "STOCK") = vbNo Then Exit Sub

    'Mettre à ce niveau les contrôles de saisies qu'il faut
    'Ce code permet d'ajouter ou de modifier une information qui aura été selectionnée
    'dans la liste des données stockées grace au bouton modifier
 
    'Dim I As Long
    'Dim DateS As Date
    'Dim DataSheet As Worksheet
 
    ' Cette Fonction n'est plus utile car I sera toujours égale à 1
    ' Puisque l'on ajoute une ligne = Set row = TblVente.ListRows.Add()
    ' la ligne ajouté row(1) sera la dernière ligne du tableau structuré
    '
    'If AjoutModification = True Then
        'I = Derligne(FeuilDonneesVente.Name)    'Appelle la fonction public Derligne du ModulePrincipal
    'Else
        'I = LigneAmodifier
    'End If
 
    'DateS = Me.TxDate.Value
    'Set DataSheet = FeuilDonneesVente
 
    Dim TblVente As ListObject
    Set TblVente = Worksheets("Donnees_Vente").ListObjects("TblVente")
    Dim row As ListRow
    Set row = TblVente.ListRows.Add()
        row.Range.Cells(1, 1).Value = Me.TxCodeArticle.Value 'DataSheet.Cells(I, 1).Value = Me.TxCodeArticle.Value
        row.Range.Cells(1, 2).Value = Me.TxLibelleArticle.Value 'DataSheet.Cells(I, 2).Value = Me.TxLibelleArticle.Value
        row.Range.Cells(1, 3).Value = CDbl(Me.TxPrix.Value) 'DataSheet.Cells(I, 3).Value = CDbl(Me.TxPrix.Value)
        row.Range.Cells(1, 4).Value = CDbl(Me.TxQuantite.Value) 'DataSheet.Cells(I, 4).Value = CDbl(Me.TxQuantite.Value)
        row.Range.Cells(1, 5).Value = CDbl(Me.TxMontant.Value) 'DataSheet.Cells(I, 5).Value = CDbl(Me.TxMontant.Value)
        row.Range.Cells(1, 6).Value = Me.TxDate.Value 'DataSheet.Cells(I, 6).Value = DateS
        row.Range.Cells(1, 7).Value = Me.TxCodeFamille.Value  'DataSheet.Cells(I, 7).Value = Me.TxCodeFamille.Value
        row.Range.Cells(1, 8).Value = Me.TxLibelleFamille 'DataSheet.Cells(I, 8).Value = Me.TxLibelleFamille
        row.Range.Cells(1, 9).Value = Me.TxUniteVente 'DataSheet.Cells(I, 9).Value = Me.TxUniteVente
    Unload Me
    End If
    Application.CutCopyMode = True
End Sub

Quelques explication :

Donc :
Ou réécrire le code avec VBA pour tableaux structuré en rapport avec le modèle Objet
Ou Réécrire le code en se passant des Tableaux Structurés, Plage Nommée, ect.


J'ai
Bonsoir,

Je ne suis pas sûr mais j'ai l'impression que ce sont les tableaux structurés de votre fichier Excel qui pose ce problème d'erreur d'exécution de l'objet Range :
.
Vous utilisez des tableaux structuré.
Modification du code pour tableau structuré, suite au Poste #1
Mais il y a toujours l'erreur

VB:
Private Sub CmdValider_Click()
    Application.CutCopyMode = False
    If Me.TxCodeFamille.Value = "" Then
        MsgBox "Veuillez sélectionner un article avant de continuer !", vbCritical, "STOCK"
        Me.CmdChoixArticle.SetFocus
    ElseIf Me.TxQuantite.Value = "" Then
        MsgBox "Veuillez saisir la quantité à vendre de l'article concerné avant de continuer !", vbCritical, "STOCK"
        Me.TxQuantite.SetFocus
    ElseIf Not Len(Me.TxDate.Value) = 10 Then
        MsgBox "Le format de la date n'est pas correct, veuillez saisir (JJ/MM/AAAA) !", vbCritical, "STOCK"
        Me.TxDate.SetFocus
    Else
 
    If MsgBox("Souhaitez-vous valider ces informations ?", vbQuestion + vbYesNo, "STOCK") = vbNo Then Exit Sub

    'Mettre à ce niveau les contrôles de saisies qu'il faut
    'Ce code permet d'ajouter ou de modifier une information qui aura été selectionnée
    'dans la liste des données stockées grace au bouton modifier
 
    'Dim I As Long
    'Dim DateS As Date
    'Dim DataSheet As Worksheet
  
    ' Cette Fonction n'est plus utile car I sera toujours égale à 1
    ' Puisque l'on ajoute une ligne = Set row = TblVente.ListRows.Add()
    ' la ligne ajouté row(1) sera la dernière ligne du tableau structuré
    '
    'If AjoutModification = True Then
        'I = Derligne(FeuilDonneesVente.Name)    'Appelle la fonction public Derligne du ModulePrincipal
    'Else
        'I = LigneAmodifier
    'End If
 
    'DateS = Me.TxDate.Value
    'Set DataSheet = FeuilDonneesVente
 
    Dim TblVente As ListObject
    Set TblVente = Worksheets("Donnees_Vente").ListObjects("TblVente")
    Dim row As ListRow
    Set row = TblVente.ListRows.Add()
        row.Range.Cells(1, 1).Value = Me.TxCodeArticle.Value 'DataSheet.Cells(I, 1).Value = Me.TxCodeArticle.Value
        row.Range.Cells(1, 2).Value = Me.TxLibelleArticle.Value 'DataSheet.Cells(I, 2).Value = Me.TxLibelleArticle.Value
        row.Range.Cells(1, 3).Value = CDbl(Me.TxPrix.Value) 'DataSheet.Cells(I, 3).Value = CDbl(Me.TxPrix.Value)
        row.Range.Cells(1, 4).Value = CDbl(Me.TxQuantite.Value) 'DataSheet.Cells(I, 4).Value = CDbl(Me.TxQuantite.Value)
        row.Range.Cells(1, 5).Value = CDbl(Me.TxMontant.Value) 'DataSheet.Cells(I, 5).Value = CDbl(Me.TxMontant.Value)
        row.Range.Cells(1, 6).Value = Me.TxDate.Value 'DataSheet.Cells(I, 6).Value = DateS
        row.Range.Cells(1, 7).Value = Me.TxCodeFamille.Value  'DataSheet.Cells(I, 7).Value = Me.TxCodeFamille.Value
        row.Range.Cells(1, 8).Value = Me.TxLibelleFamille 'DataSheet.Cells(I, 8).Value = Me.TxLibelleFamille
        row.Range.Cells(1, 9).Value = Me.TxUniteVente 'DataSheet.Cells(I, 9).Value = Me.TxUniteVente
    Unload Me
    End If
    Application.CutCopyMode = True
End Sub

Quelques explication :

Donc :
Ou réécrire le code avec VBA pour tableaux structuré en rapport avec le modèle Objet
Ou Réécrire le code en se passant des Tableaux Structurés, Plage Nommée, ect.
Bonjour Laurent950,

Merci pour les liens, effectivement je vais revoir tout mon code.
Encore merci pour ton aide
Bonne journée
 

Rv_38

XLDnaute Nouveau
Oneida,

Internet Ok. Je viens de récupérer ton fichier. Je te joins celui que je reconstruit. je n'en suis qu'au début et il bug déjà. J'ai mis un commentaire dans FmSaisieArticles au niveau du blocage.
Je n'ai pas beaucoup de dispo ces 2 jours donc je m'excuse par avance si je ne répond pas de suite.
Merci par avance
Bonjour Oneida,

J'ai testé ton code mais si je veux modifier une saisie existante exemple un libelle famille, j'ai une nouvelle ligne qui se crée. Je revois tout mon code et te remercie encore pour ton aide et du temps passé.
Bonne journée
 

Discussions similaires

Statistiques des forums

Discussions
315 094
Messages
2 116 155
Membres
112 671
dernier inscrit
Sylvain14