XL 2016 Problème aléatoire de range dans un userform

Laurent97310

XLDnaute Nouveau
Bonjour à tous,

J'ai un souci sur un des mes userform qui consiste à ajouter une ligne dans une feuille pour créer un nouvel article. J'ai des userforms similaires avec le quasiment le même code pour créer des interventions, des commandes et aucun souci.
Pour celui nommé "Stock", dès que je tente de créer un article, j'ai les messages suivants:
1619901929360.png
1619901936286.png


Puis Excel se ferme soudainement. Ce qui est bizarre c'est que des fois ça marche et des fois non.

J'ai essayé de supprimer ma feuille et de tout refaire mais je finis par avoir le même problème.

Comme ça a l'air de bugger au niveau du range, j'ai essayé de modifier mon code en utilisant des variantes mais je finis toujours par avoir ce message d'erreur. Je bloque totalement. J'ai essayé de chercher sur les forums mais je n'ai pas trouvé de solution.

Après deux jours à essayer de régler le problème par moi même je m'en remets à vous pour arreter de perdre du temps... Voici dessous le code qui pose problème:
VB:
Private Sub Materiel_Ajouter_Click()

Dim derligne As Integer
derligne = Sheets("Suivi_stock").Cells(Rows.Count, 1).End(xlUp).Row + 1

If M_Des_Art_TextBox <> "" And M_Etat_ComboBox <> "" And M_Qte_TextBox <> "" And M_Qte_TextBox <> "" And M_PMP_TextBox <> "" Then


Cells(derligne, "A") = CDbl(M_TextBox)
Cells(derligne, "B") = M_Des_Art_TextBox
Cells(derligne, "C") = M_Constructeur_TextBox
Cells(derligne, "D") = M_ConstructeurRef_TextBox
Cells(derligne, "E") = M_Famille_ComboBox
Cells(derligne, "F") = M_Magasin_ComboBox
Cells(derligne, "G") = M_Bac_TextBox
Cells(derligne, "L") = CInt(M_Qte_TextBox)
Cells(derligne, "J") = CDbl(M_PMP_TextBox)

If M_QteMini_TextBox = "" Then
Cells(derligne, "I") = ""
Else
Cells(derligne, "L") = CInt(M_QteMini_TextBox)
End If

Unload Me
Else

MsgBox "Merci de renseigner de les champs requis en jaune"
End If


End Sub

Je vous remercie par avance pour votre aide,

Laurent
 

Pièces jointes

  • Projet - Copie.xlsm
    235.1 KB · Affichages: 17

soan

XLDnaute Barbatruc
Inactif
Bonjour Laurent,

ton fichier en retour. :)

pour ta sub Materiel_Ajouter_Click(), un essai :

VB:
Private Sub Materiel_Ajouter_Click()
  If M_Des_Art_TextBox = "" Or M_Etat_ComboBox = "" Or _
     M_Qte_TextBox = "" Or M_Qte_TextBox = "" Or M_PMP_TextBox = "" Then _
       MsgBox "Merci de renseigner les champs requis en jaune": Exit Sub
  Dim derligne As Long
  With Worksheets("Suivi_stock")
    derligne = .Cells(Rows.Count, 1).End(xlUp).Row + 1
    With Cells(derligne, 1)
      .Value = CDbl(M_TextBox)
      .Offset(, 1) = M_Des_Art_TextBox
      .Offset(, 2) = M_Constructeur_TextBox
      .Offset(, 3) = M_ConstructeurRef_TextBox
      .Offset(, 4) = M_Famille_ComboBox
      .Offset(, 5) = M_Magasin_ComboBox
      .Offset(, 6) = M_Bac_TextBox
      .Offset(, 11) = CInt(M_Qte_TextBox)
      .Offset(, 9) = CDbl(M_PMP_TextBox)
      If M_QteMini_TextBox = "" Then
        .Offset(, 8) = ""
      Else
        .Offset(, 11) = CInt(M_QteMini_TextBox)
      End If
    End With
  End With
  Unload Me
End Sub

regarde bien la partie droite du UserForm Stock_Creation ! 😁 quand tu auras fini tous tes essais, regarde la sub Workbook_BeforeSave() ; en particulier la 1ère ligne.​

soan
 

Pièces jointes

  • Projet.xlsm
    154.7 KB · Affichages: 6
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour @Laurent97310,

1) la feuille "Suivi_stock" n'est pas dans le fichier que vous avez joint
2) Pour info, quand on recherche une dernière ligne sur une plage, il faut que la plage de recherche ne soit pas filtrée sinon on retournera n'importe quoi de manière aléatoire. Dans le code qui suit, peu importe si le tableau est filtré ou pas car on n'utilise pas la méthode End(xlup).
On utilise les méthodes propres aux tableaux structurés. Donc même si vous déplacez sur la feuille le tableau structuré dans sa globalité (de ligne et/ ou de colonne), le code continuera à fonctionner correctement.

Essayez ce code :
VB:
Private Sub Materiel_Ajouter_Click()
   If M_Des_Art_TextBox <> "" And M_Etat_ComboBox <> "" And M_Qte_TextBox <> "" And _
            M_Qte_TextBox <> "" And M_PMP_TextBox <> "" Then
      With Sheets("stock").ListObjects(1).ListRows.Add.Range
         .Cells(1, 1) = CDbl(M_TextBox)
         .Cells(1, 2) = M_Des_Art_TextBox
         .Cells(1, 3) = M_Constructeur_TextBox
         .Cells(1, 4) = M_ConstructeurRef_TextBox
         .Cells(1, 5) = M_Famille_ComboBox
         .Cells(1, 6) = M_Magasin_ComboBox
         .Cells(1, 7) = M_Bac_TextBox
         .Cells(1, 8) = CInt(M_Qte_TextBox)
         .Cells(1, 9) = CDbl(M_PMP_TextBox)
         If M_QteMini_TextBox = "" Then .Cells(1, 10) = "" Else .Cells(1, 12) = CInt(M_QteMini_TextBox)
      End With
      Unload Me
   Else
      MsgBox "Merci de renseigner les champs requis en jaune"
   End If
End Sub

De même, dans la procédure Initialize du Userform, utiliser plutôt :
VB:
lastnumber = WorksheetFunction.Max(Sheets("Stock").ListObjects(1).ListColumns(1).Range)

Si vous tenez à employer la méthode End(xlup), assurez-vous que la feuille affiche toutes ses lignes et ce qu'un filtre soit présent ou pas ou bien qu'un filtre présent soit actif ou pas. Utilisez l'instruction suivante pour la feuille concernée avant la ligne où vous utilisez le End(xlup) (c'est l'équivalent de "Afficher tout" pour le filtre - si pas de filtre, alors l'instruction ne fait rien et passe à la suivante) :
VB:
If Sheets("Stock").FilterMode Then Sheets("Stock").ShowAllData
' puis
derligne = Sheets("stock").Cells(Rows.Count, 1).End(xlUp).Row + 1
 

Pièces jointes

  • Laurent97310- ajouter ligne tableau structuré- v1.xlsm
    142.5 KB · Affichages: 8
Dernière édition:

Laurent97310

XLDnaute Nouveau
Bonjour à vous deux,

Merci beaucoup pour vos réponses. Je suis encore resté jusqu'à deux heures du matin sur le problème tellement ça m'énervait, je n'ai pas vu vos messages.

J'ai pu résoudre l'erreur avant d'aller dormir. L'erreur venait finalement du fait que dans d'autres formulaires, le tableau Stock en question était appelé dans le RowSource d'une combobox. Ca m'a permis de remarquer d'ailleurs que dès que j'appelle un tableau dans une Combobox, il m'est impossible de rajouter la moindre ligne à ce tableau par la suite. Excel se ferme directement sans message d'erreur. Vous sauriez pourquoi?

En tout cas, vos réponses vont m'être d'une grande aide pour revoir entièrement mon code un peu "sauvage". Je vais prendre en considération la réponse de mapomme pour refaire toutes mes sub concernant des tableaux nommés et celui de Soan pour ceux où il n'y en aurait pas.

Je vous remercie énormement pour le temps que vous avez passés sur ce problème.
 

Discussions similaires