XL 2019 probleme Sheets("entreeor").ListObjects(1).ListRows.Add

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

jules56750

XLDnaute Nouveau
fichier marche et tout un coup me renvoi erreur Sheets("entreeor").ListObjects(1).ListRows.Add et m'oblige a relancer excel et apres marche bien pendant un certain temps. code vba 123
je ne comprends plus rien mais debutant en vba
merci pour votre aide
Private Sub CommandButton2_Click() 'Code du bouton enregistrer du userform6
Dim nombre_ligne As Integer
Dim ligne As Integer
Dim DL5 As Integer
Dim MonOR As String
Dim iLigne As Long
Dim DerLigne As Long
Application.ScreenUpdating = False

'On vérifie qu'il y a des choses dans la liste
If Me.ListBox1.ListCount > 0 Then
'demander une confirmation de la commande
If MsgBox("Voulez-vous enregistrer OR ?", vbYesNo) = vbYes Then
'*******************************************************************


If Not Me.cbx_vehicule > "" Then
MsgBox ("Saisir un véhicule")
Exit Sub
End If
'***************************************************************************

'******************************************************************************

Else
GoTo fin
End If
Else
MsgBox " pas de commande disponible"
GoTo fin
End If

'Le numéro d'OR est dans label_info
MonOR = label_info.Value

'Si on a un numéro OR c'est qu'on vient de modifier sinon il faut aller en chercher un nouveau

If MonOR > " " Then
'On supprime toutes les ligne de la feuille entreor avec ce numéro d'OR
Sheets("entreeor").Activate
'Nombre de ligne de la feuille entreeor
DerLigne = Range("C" & Rows.Count).End(xlUp).Row

iLigne = 3
Do
If iLigne > DerLigne Then Exit Do

If Range("C" & iLigne).Value = MonOR Then
Range("C" & iLigne).EntireRow.Delete
DerLigne = DerLigne - 1
Else
iLigne = iLigne + 1
End If
Loop
Else
'on récupère un numéro OR
MonOR = Sheets("Config").Range("E23")
'On ajouote un pour le prochain numéro OR
Sheets("Config").Range("D23") = Sheets("Config").Range("D23") + 1
End If

nombre_ligne = Me.ListBox1.ListCount - 1
For ligne = 0 To nombre_ligne 'On boucle sur chaque ligne de la liste
'on ajoute une ligne dans le tableau
Sheets("entreeor").ListObjects(1).ListRows.Add

'chercher le n° de la prochaine ligne libre dans notre tableau
DL5 = Sheets("entreeor").Range("C" & Rows.Count).End(xlUp).Row

' ajouter nos informations dans notre base de donnée
Sheets("entreeor").Range("C" & DL5) = MonOR
Sheets("entreeor").Range("Q" & DL5) = TextBox23.Value
Sheets("entreeor").Range("D" & DL5) = cbx_vehicule.Value
Sheets("entreeor").Range("E" & DL5) = immatriculation.Value
Sheets("entreeor").Range("F" & DL5) = chassis.Value
Sheets("entreeor").Range("G" & DL5) = Txtkilométrage.Value
Sheets("entreeor").Range("L" & DL5) = Cbxemployés.Value
Sheets("entreeor").Range("M" & DL5) = ComboBox3.Value
Sheets("entreeor").Range("N" & DL5) = travaux.Value
Sheets("entreeor").Range("K" & DL5) = Temps.Value
Sheets("entreeor").Range("I" & DL5) = (Me.ListBox1.List(ligne, 1)) 'désignation' bon
Sheets("entreeor").Range("H" & DL5) = CStr(Me.ListBox1.List(ligne, 0)) 'ref article
Sheets("entreeor").Range("J" & DL5) = (Me.ListBox1.List(ligne, 2)) 'Quantitée
Sheets("entreeor").Range("O" & DL5) = CCur(Me.ListBox1.List(ligne, 3)) 'Prix
Sheets("entreeor").Range("P" & DL5) = (Me.ListBox1.List(ligne, 4)) 'fournisseur
Sheets("entreeor").Range("B" & DL5) = CDate(Now())
Next ligne

'Range("Tabl_OR[N° Ordre]").Select
' ActiveWorkbook.Worksheets("entreeor").ListObjects("Tabl_OR").Sort.SortFields. _
' Clear
' ActiveWorkbook.Worksheets("entreeor").ListObjects("Tabl_OR").Sort.SortFields. _
' Add2 Key:=Range("Tabl_OR[N° Ordre]"), SortOn:=xlSortOnValues, Order:= _
' xlAscending, DataOption:=xlSortNormal
' With ActiveWorkbook.Worksheets("entreeor").ListObjects("Tabl_OR").Sort
' .Header = xlYes
' .MatchCase = False
' .Orientation = xlTopToBottom
' .SortMethod = xlPinYin
' .Apply
' End With


fin:
Unload Me
Application.ScreenUpdating = True
ThisWorkbook.Save

UserForm1.Show
'Sheets("entreeor").Activate
End Sub
 
BONJOUR Jules56750

1) Dans la vie, lorsque vous arrivez dans un endroit on commence par dire BONJOUR
c'est la même chose sur les forums 🙄

2) Afin d'améliorer la lisibilité du fil, merci d'éditer votre 1er post et mettre votre code entre balises
1673341907560.png


Merci de faire le nécessaire SVP
 
Bonjour Jules,
Dans l'ordre :
1- Lorsqu’on rentre sur un fil, comme dans la vie de tous les jours, on est poli en disant « Bonjour ». LIEN
2- Utilisez les balises </> pour le code c'est plus lisible ( à droite de l'icone GIF )
3- Joignez un petit fichier test représentatif, car dans l'état c'est difficile de comprendre et d'analyser.
4- Essayez d'expliquer où est vraiment le problème, car "code vba 123" n'éclaire pas beaucoup.
 
Bonjour,

VB:
Private Sub CommandButton2_Click()
' Code du bouton "Enregistrer" du UserForm6
'
Dim nombre_ligne As Integer
Dim ligne As Integer
Dim DL5 As Integer
Dim MonOR As String
Dim iLigne As Long
Dim DerLigne As Long

    Application.ScreenUpdating = False

    ' On vérifie qu'il y a des choses dans la liste
    If Me.ListBox1.ListCount > 0 Then
        ' demander une confirmation de la commande
        If MsgBox("Voulez-vous enregistrer OR ?", vbYesNo) = vbYes Then
            If Not Me.cbx_vehicule > "" Then
                MsgBox ("Saisir un véhicule")
                Exit Sub
            End If
        Else
            GoTo fin
        End If
    Else
        MsgBox " pas de commande disponible"
        GoTo fin
    End If

    ' Le numéro d'OR est dans label_info
    MonOR = label_info.Value

    ' Si on a un numéro OR c'est qu'on vient de modifier sinon il faut aller en chercher un nouveau
    If MonOR > " " Then

        ' On supprime toutes les ligne de la feuille entreor avec ce numéro d'OR
        Sheets("entreeor").Activate
        ' Nombre de ligne de la feuille entreeor
        DerLigne = Range("C" & Rows.Count).End(xlUp).Row

        iLigne = 3
        Do
            If iLigne > DerLigne Then Exit Do
            If Range("C" & iLigne).Value = MonOR Then
                Range("C" & iLigne).EntireRow.Delete
                DerLigne = DerLigne - 1
            Else
                iLigne = iLigne + 1
            End If
        Loop

    Else

        ' on récupère un numéro OR
        MonOR = Sheets("Config").Range("E23")
        ' On ajouote un pour le prochain numéro OR
        Sheets("Config").Range("D23") = Sheets("Config").Range("D23") + 1

    End If

    nombre_ligne = Me.ListBox1.ListCount - 1
    For ligne = 0 To nombre_ligne ' On boucle sur chaque ligne de la liste
        ' on ajoute une ligne dans le tableau
        Sheets("entreeor").ListObjects(1).ListRows.Add

        ' chercher le n° de la prochaine ligne libre dans notre tableau
        DL5 = Sheets("entreeor").Range("C" & Rows.Count).End(xlUp).Row

        ' ajouter nos informations dans notre base de donnée
        Sheets("entreeor").Range("C" & DL5) = MonOR
        Sheets("entreeor").Range("Q" & DL5) = TextBox23.Value
        Sheets("entreeor").Range("D" & DL5) = cbx_vehicule.Value
        Sheets("entreeor").Range("E" & DL5) = immatriculation.Value
        Sheets("entreeor").Range("F" & DL5) = chassis.Value
        Sheets("entreeor").Range("G" & DL5) = Txtkilométrage.Value
        Sheets("entreeor").Range("L" & DL5) = Cbxemployés.Value
        Sheets("entreeor").Range("M" & DL5) = ComboBox3.Value
        Sheets("entreeor").Range("N" & DL5) = travaux.Value
        Sheets("entreeor").Range("K" & DL5) = Temps.Value
        Sheets("entreeor").Range("I" & DL5) = (Me.ListBox1.List(ligne, 1)) 'désignation' bon
        Sheets("entreeor").Range("H" & DL5) = CStr(Me.ListBox1.List(ligne, 0)) 'ref article
        Sheets("entreeor").Range("J" & DL5) = (Me.ListBox1.List(ligne, 2)) 'Quantitée
        Sheets("entreeor").Range("O" & DL5) = CCur(Me.ListBox1.List(ligne, 3)) 'Prix
        Sheets("entreeor").Range("P" & DL5) = (Me.ListBox1.List(ligne, 4)) 'fournisseur
        Sheets("entreeor").Range("B" & DL5) = CDate(Now())
    Next ligne

'    Range("Tabl_OR[N° Ordre]").Select
    With ActiveWorkbook.Worksheets("entreeor").ListObjects("Tabl_OR").Sort
        .SortFields.Clear
        .SortFields.Add2 Key:=Range("Tabl_OR[N° Ordre]"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

fin:
    Unload Me
    Application.ScreenUpdating = True
    ThisWorkbook.Save

    UserForm1.Show
'    Sheets("entreeor").Activate

End Sub

Visiblement tu utilises un tableau structuré nommé Tabl_OR, mais tu sembles :
- supprimer des lignes de la feuille au lieu de supprimer des lignes dudit tableau,
- remplir des lignes de la feuille au lieu de remplir des lignes dudit tableau.

Peut-être devrais-tu gérer la suppression de lignes et l'ajout de données avec une méthode spécifique aux tableaux structurés ?


Et sinon, quelle est la valeur de Ligne quand ça plante ?
 
ca plante sur
Sheets("entreeor").ListObjects(1).ListRows.Add
Oui, j'avais bien compris. Mais sais-tu quelle est la valeur de la variable Ligne à ce moment-là ?


quel est la méthode pour les tableaux structurés
C'est quelque chose que je ne maîtrise pas du tout... 🙁 mais qui pourrait être un axe de réflexion.


As-tu réussi à diminuer la taille de ton fichier ?
Sans fichier, on ne peut pas faire grand chose. 🙁
 
Dernière édition:
merci de votre réponse
quel est la méthode pour les tableaux structurés
ca plante sur
Sheets("entreeor").ListObjects(1).ListRows.Add
Set c = Rng.Find(Me.ComboBox2.Value, LookIn:=xlValues)
bonjour jules56750,salut l'ami TooFatBoy, le fil
@jules56750, il existe plein de tutos sur les tableaux structurés, comme par exemple celui d'excel_pratique.
Personnellement, je préfère, pour un tableau nommé Tabl_Or, utiliser l'expression
VB:
Sheets("entreeor").ListObjects("Tabl_Or").ListRows.Add
plutôt que
Code:
Sheets("entreeor").ListObjects(1).ListRows.Add
ça limite les risques d'erreur.
cordialement,
 
merci de votre réponse
quel est la méthode pour les tableaux structurés
ca plante sur
Sheets("entreeor").ListObjects(1).ListRows.Add
Set c = Rng.Find(Me.ComboBox2.Value, LookIn:=xlValues)
Bonsoir,
Allez un petit coup de main sur les tableaux structurés :
Un tableau structuré peut s'envisager en 5 parties :
  • le .Range : c'est le tableau complet. Si l'on fait .Range.Address, on obtiendra l'adresse absolue du tableau dans la feuille, par exemple $D$4:$H$11
  • le .HeaderRowRange : c'est l'entête du tableau, qui contient le titre des colonnes. Si l'on fait .HeaderRowRange.Address de l'exemple précédent, on obtiendra $D$4:$H$4
  • le .DataBodyRange : c'est le corps du tableau, celui qui contient les données. Si l'on fait .DataBodyRange.Address dans l'exemple précédent, on obtiendra $D$5:$H11 si le tableau n'affiche pas de ligne Total, sinon ce sera $D5:$H$10.
  • le .TotalsRowRange : c'est la ligne Total du point précédent. Notez que vous pouvez choisir d'afficher ou non le HeaderRowRange (ligne d'entête) et/ou le TotalsRowRange (ligne Total), parmi d'autres options, dans le menu 'Création de tableau' d'Excel ou par code VBA.
  • les lignes .ListRows et les colonnes .ListColumns
Dans l'exemple ci-dessus, la deuxième ligne du .DataBodyRange (.DataBodyRange.Row(2)) est la ligne 6 de la feuille.
Pour finir, dans votre cas, la dernière ligne de données de votre tableau structuré s'obtient par :
VB:
DerLigne = ThisWorkbook.Worksheets(("entreeor").ListObjects("Tabl_Or").DataBodyRange.Rows.Count
Cordialement
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
332
Réponses
3
Affichages
569
Réponses
4
Affichages
439
Retour