IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

La méthode 'Add' de l'objet 'ListRows' a échoué [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2017
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2017
    Messages : 58
    Points : 24
    Points
    24
    Par défaut La méthode 'Add' de l'objet 'ListRows' a échoué
    Bonjour,

    Lorsque je souhaite Actualiser les données de mon formulaire, ce qui revient pour moi (mais il y a sûrement une façon plus élégante de faire) à Supprimer puis Ajouter je suis surpris d'avoir ce message d'erreur lequel au passage précède l'arrêt d'Excel:

    Nom : Capture 1.PNG
Affichages : 2262
Taille : 127,5 Ko

    car j'utilise la même méthode Add que celle que j'utilise avec Ajouter et qui fonctionne parfaitement. Je joins ci-dessous le code pour Ajouter, Supprimer et Actualiser. Si vous pouviez me dire ce qui cloche dans le code pour Actualiser je vous en suis par avance très reconnaissant.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
     
    Private Sub BtnModifIntervenant_Click()
     
    Dim A As String
    Dim B As String
    Dim C As String
    Dim D As String
    Dim E As String
    Dim F As String
    Dim G As String
     
    If IntervenantsForm.TboNomActualiser.Value <> "" Then
        A = IntervenantsForm.TboNomActualiser
        B = IntervenantsForm.TboPrenomActualiser
        C = IntervenantsForm.TboTxHActualiser
        D = IntervenantsForm.TboTxJActualiser
        E = IntervenantsForm.TboRoleActualiser
        F = IntervenantsForm.TboEmailActualiser
        G = IntervenantsForm.TboTelActualiser
        With Liste_Intervenants
            ThisWorkbook.Worksheets(3).Select
            Application.Goto Reference:="TableauIntervenants"
            Selection.ListObject.ListRows(.ListIndex + 1).Delete
        End With
        ThisWorkbook.Worksheets(3).Select
        Application.Goto Reference:="TableauIntervenants"
        Range("A2:G2").Select
        Selection.ListObject.ListRows.Add (1)
        Range("A2").Select
        ActiveCell.Value = A
        ActiveCell.Offset(0, 1).Value = B
        ActiveCell.Offset(0, 2).Value = C
        ActiveCell.Offset(0, 3).Value = D
        ActiveCell.Offset(0, 4).Value = E
        ActiveCell.Offset(0, 5).Value = F
        ActiveCell.Offset(0, 6).Value = G
        End With
        Unload Me
        IntervenantsForm.Show
    Else
    Unload Me
    IntervenantsForm.Show
    End If
    End Sub
     
    ==========================================
    ==========================================
     
    Private Sub BtnAddIntervenant_Click()
    If IntervenantsForm.TboNom.Value <> "" Then
        ThisWorkbook.Worksheets(3).Select
        Application.Goto Reference:="TableauIntervenants"
        Range("A2:G2").Select
        Selection.ListObject.ListRows.Add (1)
        Range("A2").Select
        ActiveCell.Value = IntervenantsForm.TboNom
        ActiveCell.Offset(0, 1).Value = IntervenantsForm.TboPrenom
        ActiveCell.Offset(0, 2).Value = IntervenantsForm.TboTxH
        ActiveCell.Offset(0, 3).Value = IntervenantsForm.TboTxJ
        ActiveCell.Offset(0, 4).Value = IntervenantsForm.TboRole
        ActiveCell.Offset(0, 5).Value = IntervenantsForm.TboEmail
        ActiveCell.Offset(0, 6).Value = IntervenantsForm.TboTel
        Unload Me
        IntervenantsForm.Show
    Else
    Unload Me
     
    ==========================================
    ==========================================
     
    Private Sub BtnSupprIntervenant_Click()
     With Liste_Intervenants
        Application.Goto Reference:="Plage"
        Selection.ListObject.ListRows(.ListIndex + 1).Delete
        Unload Me
        IntervenantsForm.Show
      End With
    End Sub
    IntervenantsForm.Show
    End If
    End Sub

  2. #2
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour
    Listobject n'est pas défini.
    Doit être un élément de la collection ListObjects.
    Exemple :
    dim toto as listobject
    set toto = listobjects(1) ' ou 1 est l'index de toto dans la collection Listobjects.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2017
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2017
    Messages : 58
    Points : 24
    Points
    24
    Par défaut yes but ?
    Citation Envoyé par unparia Voir le message
    Bonjour
    Listobject n'est pas défini.
    Doit être un élément de la collection ListObjects.
    Exemple :
    dim toto as listobject
    set toto = listobjects(1) ' ou 1 est l'index de toto dans la collection Listobjects.
    Bonjour et merci pour cet éclairage, cependant ici non plus ListOject n'est pas défini :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub BtnSupprIntervenant_Click()
     With Liste_Intervenants
        Application.Goto Reference:="Plage"
        Selection.ListObject.ListRows(.ListIndex + 1).Delete
        Unload Me
        IntervenantsForm.Show
      End With
    End Sub
    IntervenantsForm.Show
    End If
    End Sub
    et ici non plus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Private Sub BtnAddIntervenant_Click()
    If IntervenantsForm.TboNom.Value <> "" Then
        ThisWorkbook.Worksheets(3).Select
        Application.Goto Reference:="TableauIntervenants"
        Range("A2:G2").Select
        Selection.ListObject.ListRows.Add (1)
        Range("A2").Select
        ActiveCell.Value = IntervenantsForm.TboNom
        ActiveCell.Offset(0, 1).Value = IntervenantsForm.TboPrenom
        ActiveCell.Offset(0, 2).Value = IntervenantsForm.TboTxH
        ActiveCell.Offset(0, 3).Value = IntervenantsForm.TboTxJ
        ActiveCell.Offset(0, 4).Value = IntervenantsForm.TboRole
        ActiveCell.Offset(0, 5).Value = IntervenantsForm.TboEmail
        ActiveCell.Offset(0, 6).Value = IntervenantsForm.TboTel
        Unload Me
        IntervenantsForm.Show
    Else
    Unload Me
    et pourtant ça marche...

    Je ne comprends pas.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2017
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2017
    Messages : 58
    Points : 24
    Points
    24
    Par défaut précision sur le 'bug'
    Si j'ajoute n intervenants tout va bien
    Si je supprime n intervenants tout va bien

    Mais:

    Si je supprime 1 ou n intervenants puis que j'en ajoute 1 -> alors je plante Excel

    Mon erreur de code provient donc certainement de la façon dont j'ajoute un intervenant à la plage nommée de mon tableau mais je ne comprends toujours pas où elle se situe.

    Help please

  5. #5
    Membre éprouvé
    Homme Profil pro
    ingénieur d'étude
    Inscrit en
    Juin 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur d'étude
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 563
    Points : 1 141
    Points
    1 141
    Par défaut
    Bonjour à vous,

    Je ne puis que vous conseiller de supprimer toute action de sélection de votre code, qui contient actuellement de nombreuses lignes inutiles.
    Ces lignes compliquent la lecture du code pour ceux qui souhaiteraient vous aider et représentent un risque important d'erreur.

    Cordialement

  6. #6
    Membre à l'essai
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2017
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2017
    Messages : 58
    Points : 24
    Points
    24
    Par défaut
    Citation Envoyé par Ben_L Voir le message
    Bonjour à vous,

    Je ne puis que vous conseiller de supprimer toute action de sélection de votre code, qui contient actuellement de nombreuses lignes inutiles.
    Ces lignes compliquent la lecture du code pour ceux qui souhaiteraient vous aider et représentent un risque important d'erreur.

    Cordialement
    Bonjour et Merci Ben_L
    Vous avez raison, je n'arrivais plus à me relire non plus.

    Voici le code simplifié au maximum et le bug qui persiste...

    1 - je peux ajouter des enregistrements
    2 - je peux supprimer des enregistrements

    3 - supprimer puis ajouter un enregistrement => plante Excel

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    Private Sub AddIntervenantBtn_Click()
        If UserForm1.NomTextBox.Value <> "" Then
            Range("A2").Select
            Selection.ListObject.ListRows.Add (1)
            ActiveCell.Value = UserForm1.NomTextBox
            ActiveCell.Offset(0, 1).Value = UserForm1.PrenomTextBox
            Unload Me
            UserForm1.Show
        Else
            Unload Me
            UserForm1.Show
        End If
    End Sub
     
     
    Private Sub SupprIntervenantBtn_Click()
     With ComboBox1
        li = .ListIndex + 2
        Rows(li & ":" & li).Select
        Selection.Delete Shift:=xlUp
        Unload Me
        UserForm1.Show
      End With
    End Sub
     
     
    Private Sub ComboBox1_Change()
      With ComboBox1
        PrenomLabel.Caption = .Column(1, .ListIndex)
      End With
    End Sub
     
    Private Sub UserForm_Initialize()
      ComboBox1.RowSource = "=Plage"
    End Sub
    Quelques captures écran :
    Nom : Capture.PNG
Affichages : 2107
Taille : 27,0 KoNom : Capture2.PNG
Affichages : 2091
Taille : 34,5 KoNom : Capture3.PNG
Affichages : 2129
Taille : 31,4 KoNom : Capture4.PNG
Affichages : 2151
Taille : 22,8 Ko

  7. #7
    Membre à l'essai
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2017
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2017
    Messages : 58
    Points : 24
    Points
    24
    Par défaut je ne reproduis plus le bug mais je ne sais pas pourquoi ?
    A priori avoir ôté tous les select a arrangé les choses.

    Cher Ben_L, que préconisez-vous pour minimiser les " SELECT " dans le code ?

  8. #8
    Membre éprouvé
    Homme Profil pro
    ingénieur d'étude
    Inscrit en
    Juin 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur d'étude
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 563
    Points : 1 141
    Points
    1 141
    Par défaut
    Je viens de faire un test et la gestion que vous faîtes des tableaux nommés est ineffective. C'est celle-ci qui cause votre erreur.
    Pour vous en convaincre, ajoutez la ligne suivante dans votre procédure UserForm_Initialize :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox ActiveSheet.ListObjects("Plage").Range.Address(False, False)
    Vous verrez que celle-ci n'évolue pas comme vous le pensez au fil des ajouts (pour les suppression je n'ai pas testé).

    A mon sens, le plus simple serait de rechercher manuellement l'adresse de la plage à utiliser. Ca n'est pas bien compliqué, et ça vous permettrait de maîtriser réellement ce qui est fait par le code.

    Quant à la suppression des sélections, il est généralement possible de procéder comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Un_Objet_Excel_Quelconque.Select
    Selection.Une_Methode_Quelconque
    est à remplacer par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Un_Objet_Excel_Quelconque.Une_Methode_Quelconque
    Cela est très générique et ne fonctionnera pas dans tous les cas. L'important, c'est de comprendre ce que fait Excel.
    En gros, l'objet Selection est un Variant dans lequel Excel stocke l'objet auquel on applique la méthode Select.
    J'insiste sur le fait que dans certains cas, il est nécessaire de modifier un peu plus le code pour qu'il fonctionne comme souhaité (voir par exemple ce fil, dans lequel on voit que la méthode Group est un peu particulière).

  9. #9
    Membre à l'essai
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2017
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2017
    Messages : 58
    Points : 24
    Points
    24
    Par défaut
    Citation Envoyé par Ben_L Voir le message
    Je viens de faire un test et la gestion que vous faîtes des tableaux nommés est ineffective. C'est celle-ci qui cause votre erreur.
    Pour vous en convaincre, ajoutez la ligne suivante dans votre procédure UserForm_Initialize :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox ActiveSheet.ListObjects("Plage").Range.Address(False, False)
    Vous verrez que celle-ci n'évolue pas comme vous le pensez au fil des ajouts (pour les suppression je n'ai pas testé).

    A mon sens, le plus simple serait de rechercher manuellement l'adresse de la plage à utiliser. Ca n'est pas bien compliqué, et ça vous permettrait de maîtriser réellement ce qui est fait par le code.

    Quant à la suppression des sélections, il est généralement possible de procéder comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Un_Objet_Excel_Quelconque.Select
    Selection.Une_Methode_Quelconque
    est à remplacer par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Un_Objet_Excel_Quelconque.Une_Methode_Quelconque
    Cela est très générique et ne fonctionnera pas dans tous les cas. L'important, c'est de comprendre ce que fait Excel.
    En gros, l'objet Selection est un Variant dans lequel Excel stocke l'objet auquel on applique la méthode Select.
    J'insiste sur le fait que dans certains cas, il est nécessaire de modifier un peu plus le code pour qu'il fonctionne comme souhaité (voir par exemple ce fil, dans lequel on voit que la méthode Group est un peu particulière).
    Merci beaucoup encore une fois

    si je vous comprends bien je devrais remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Rows(li & ":" & li).Select
        Selection.Delete Shift:=xlUp
    par quelque chose comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Rows(li & ":" & li).Delete Shift:=xlUp
    quand c'est possible.

    Ce qui se passe avec ma plage nommée me surprend, c'est d'ailleurs quelqu'un de chevronné ici qui m'a recommandé de prendre de bonnes habitudes dès le départ (je débute comme vous avez compris) en utilisant une plage nommée liée à un tableau pour ensuite profiter des fonctions natives d'Excel sur ces tableaux (tris, filtres, graphiques, etc.) ce qui me parait assez judicieux.

  10. #10
    Membre éprouvé
    Homme Profil pro
    ingénieur d'étude
    Inscrit en
    Juin 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur d'étude
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 563
    Points : 1 141
    Points
    1 141
    Par défaut
    Pour la suppression des sélections, c'est bien cela.
    De plus, j'ai personnellement tendance à éviter les références aux objets ActiveWorkbook, ActiveSheet, ActiveCell, etc.
    Sauf bien sûr quand c'est exactement ce que je veux. Sinon, je nomme clairement l'objet auquel je souhaite faire référence. Sur de gros projet, cela permet parfois d'éviter des erreurs qui peuvent être très longues à identifier et corriger.

    Concernant votre plage nommée, lors de mon essai, celle-ci s'est décalée vers le bas au moment de l'insertion de la nouvelle ligne.
    J'utilise très peu les tableaux/plages nommés et ne serai donc probablement pas de bon conseil pour vous aider à corriger le problème.

    Avis, donc, aux aficionados des tableaux !!! Il y aura bien une bonne âme qui saura vous dépanner

  11. #11
    Membre à l'essai
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2017
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2017
    Messages : 58
    Points : 24
    Points
    24
    Par défaut Plage nommées
    Citation Envoyé par Ben_L Voir le message
    Concernant votre plage nommée, lors de mon essai, celle-ci s'est décalée vers le bas au moment de l'insertion de la nouvelle ligne.
    Bizarre pas sur mon poste... OSX->BootCamp->((Seven/Office 2013) 64 bits)
    Mais j'ai à plusieurs reprises vu Excel patiner pour actualiser l'affichage de nouveaux enregistrements dans le tableau.

    je pense que nous pensons à la même personne pour les tableaux, j'aimerais bien qu'elle se re-manifeste

    Bon week-end Ben_L
    Eric

  12. #12
    Membre extrêmement actif Avatar de mjpmjp
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    1 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2012
    Messages : 1 133
    Points : 1 441
    Points
    1 441
    Par défaut
    bonjour,
    Add et Supr --> ok

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    Dim Tb As ListObject
    Dim TbRows As ListRows
    Dim TbCols As ListColumns
     
    Private Sub UserForm_Initialize()
        Call Initialise
    End Sub
     
    Private Sub ComboBox1_Change()
      With ComboBox1
        Me.PrenomLabel.Caption = .Column(1, .ListIndex)
      End With
    End Sub
     
    Private Sub AddIntervenantBtn_Click()
        If UserForm1.NomTextBox.Value <> "" Then
            'ajouter ligne
            Tb.ListRows.Add
            'derniere ligne
            TbLigne = TbRows.Count
            'ecrire nom
            TbCols("Nom").DataBodyRange(TbLigne).Value = UserForm1.NomTextBox.Value
            'ecrire prenom
            TbCols("Prénom").DataBodyRange(TbLigne).Value = UserForm1.PrénomTextBox.Value
            'initialise ComboBox1
            ComboBox1.RowSource = Range("Intervenants[#data]").Address
        End If
    End Sub
     
    Private Sub SupprIntervenantBtn_Click()
        'ligne à supprimer
        TbLigne = UserForm1.ComboBox1.ListIndex + 1
        'supprime ligne
        Tb.ListRows(TbLigne).Delete
        'initialise ComboBox1
        ComboBox1.RowSource = Range("Intervenants[#data]").Address
    End Sub
     
    Private Sub Initialise()
        Set Tb = ActiveSheet.ListObjects("Intervenants")
        Set TbRows = Tb.ListRows ' contient les lignes
        Set TbCols = Tb.ListColumns ' contient les colonnes
        'ComboBox1.RowSource = Range("Intervenants[[#data],[Nom]]").Address
        ComboBox1.RowSource = Range("Intervenants[#data]").Address
    End Sub

    modif

    TbCols("Prénom").DataBodyRange(TbLigne).Value = UserForm1.NomTextBox.Value

    remplacé par

    TbCols("Prénom").DataBodyRange(TbLigne).Value = UserForm1.PrénomTextBox.Value

    @+JP
    Caractéristiques (WEB) phpMyAdmin 4-74 , PHP 5-631 , Apache 2-427 , MySQL 5-719
    Présentation NAS DS-3615xs + 20Go , DSM 6.1.6-15266 Up1 , 12 * WD 4To WD4000F9YZ (10 raid 6+ )+(2 raid 1+) , LinkSys comutateur-switch lgs528p-eu , Onduleur UPS 720W Power Boxx Lcd (4*UPS + 4*MOD)
    Mes contributions (EXCEL) Form GRAPHIQUE: Gestion des boutons , Liste Onglet dynamique...GESTION de FILM

  13. #13
    Membre à l'essai
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2017
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2017
    Messages : 58
    Points : 24
    Points
    24
    Par défaut Merci JP
    Merci beaucoup

  14. #14
    Membre à l'essai
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2017
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2017
    Messages : 58
    Points : 24
    Points
    24
    Par défaut Bug
    Citation Envoyé par mjpmjp Voir le message
    bonjour,
    Add et Supr --> ok

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    Dim Tb As ListObject
    Dim TbRows As ListRows
    Dim TbCols As ListColumns
     
    Private Sub UserForm_Initialize()
        Call Initialise
    End Sub
     
    Private Sub ComboBox1_Change()
      With ComboBox1
        Me.PrenomLabel.Caption = .Column(1, .ListIndex)
      End With
    End Sub
     
    Private Sub AddIntervenantBtn_Click()
        If UserForm1.NomTextBox.Value <> "" Then
            'ajouter ligne
            Tb.ListRows.Add
            'derniere ligne
            TbLigne = TbRows.Count
            'ecrire nom
            TbCols("Nom").DataBodyRange(TbLigne).Value = UserForm1.NomTextBox.Value
            'ecrire prenom
            TbCols("Prénom").DataBodyRange(TbLigne).Value = UserForm1.PrénomTextBox.Value
            'initialise ComboBox1
            ComboBox1.RowSource = Range("Intervenants[#data]").Address
        End If
    End Sub
     
    Private Sub SupprIntervenantBtn_Click()
        'ligne à supprimer
        TbLigne = UserForm1.ComboBox1.ListIndex + 1
        'supprime ligne
        Tb.ListRows(TbLigne).Delete
        'initialise ComboBox1
        ComboBox1.RowSource = Range("Intervenants[#data]").Address
    End Sub
     
    Private Sub Initialise()
        Set Tb = ActiveSheet.ListObjects("Intervenants")
        Set TbRows = Tb.ListRows ' contient les lignes
        Set TbCols = Tb.ListColumns ' contient les colonnes
        'ComboBox1.RowSource = Range("Intervenants[[#data],[Nom]]").Address
        ComboBox1.RowSource = Range("Intervenants[#data]").Address
    End Sub

    modif

    TbCols("Prénom").DataBodyRange(TbLigne).Value = UserForm1.NomTextBox.Value

    remplacé par

    TbCols("Prénom").DataBodyRange(TbLigne).Value = UserForm1.PrénomTextBox.Value

    @+JP
    Bonjour JP

    Merci pour ton code,

    Cela fonctionne pour supprimer un intervenant ;
    Lorsque je veux ajouter un intervenant Excel plante brutalement et je ne comprends pas bien pourquoi :
    Nom : JP.PNG
Affichages : 2074
Taille : 102,2 Ko

  15. #15
    Membre extrêmement actif Avatar de mjpmjp
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    1 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2012
    Messages : 1 133
    Points : 1 441
    Points
    1 441
    Caractéristiques (WEB) phpMyAdmin 4-74 , PHP 5-631 , Apache 2-427 , MySQL 5-719
    Présentation NAS DS-3615xs + 20Go , DSM 6.1.6-15266 Up1 , 12 * WD 4To WD4000F9YZ (10 raid 6+ )+(2 raid 1+) , LinkSys comutateur-switch lgs528p-eu , Onduleur UPS 720W Power Boxx Lcd (4*UPS + 4*MOD)
    Mes contributions (EXCEL) Form GRAPHIQUE: Gestion des boutons , Liste Onglet dynamique...GESTION de FILM

  16. #16
    Membre à l'essai
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2017
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2017
    Messages : 58
    Points : 24
    Points
    24
    Par défaut ...
    Bonjour JP

    Ton fichier fonctionne parfaitement bien... je ne sais pas quoi dire à part Merci
    et surtout je ne comprends pas pourquoi ça buggait sur mon fichier que je vais repasser au peigne fin...

    Bonne journée
    Eric

  17. #17
    Membre extrêmement actif Avatar de mjpmjp
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    1 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2012
    Messages : 1 133
    Points : 1 441
    Points
    1 441
    Par défaut
    bonjour,

    Nom : Animation.gif
Affichages : 3063
Taille : 618,8 Ko

    code final (dans UserForm1) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    Private Sub UserForm_Initialize()
        Call Initialise
    End Sub
     
    Private Sub ComboBox1_Change()
      With ComboBox1
        Me.PrenomLabel.Caption = .Column(1, .ListIndex)
      End With
    End Sub
     
    Private Sub AddIntervenantBtn_Click()
        If UserForm1.NomTextBox.Value <> "" Then
            'ajouter ligne
            Tb.ListRows.Add
            'derniere ligne
            TbLigne = TbRows.Count
            'ecrire nom
            TbCols("Nom").DataBodyRange(TbLigne).Value = UserForm1.NomTextBox.Value
            'ecrire prenom
            TbCols("Prénom").DataBodyRange(TbLigne).Value = UserForm1.PrenomTextBox.Value
            'initialise ComboBox1
            ComboBox1.RowSource = Range("Intervenants[#data]").Address
        End If
    End Sub
     
    Private Sub SupprIntervenantBtn_Click()
        'ligne à supprimer
        TbLigne = UserForm1.ComboBox1.ListIndex + 1
        'supprime ligne
        Tb.ListRows(TbLigne).Delete
        'initialise ComboBox1
        ComboBox1.RowSource = Range("Intervenants[#data]").Address
    End Sub
     
    Private Sub Initialise()
        Set Tb = ActiveSheet.ListObjects("Intervenants")
        Set TbRows = Tb.ListRows ' contient les lignes
        Set TbCols = Tb.ListColumns ' contient les colonnes
        'ComboBox1.RowSource = Range("Intervenants[[#data],[Nom]]").Address
        ComboBox1.RowSource = Range("Intervenants[#data]").Address
    End Sub
    @+JP
    Caractéristiques (WEB) phpMyAdmin 4-74 , PHP 5-631 , Apache 2-427 , MySQL 5-719
    Présentation NAS DS-3615xs + 20Go , DSM 6.1.6-15266 Up1 , 12 * WD 4To WD4000F9YZ (10 raid 6+ )+(2 raid 1+) , LinkSys comutateur-switch lgs528p-eu , Onduleur UPS 720W Power Boxx Lcd (4*UPS + 4*MOD)
    Mes contributions (EXCEL) Form GRAPHIQUE: Gestion des boutons , Liste Onglet dynamique...GESTION de FILM

  18. #18
    Membre à l'essai
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2017
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2017
    Messages : 58
    Points : 24
    Points
    24
    Par défaut
    Citation Envoyé par mjpmjp Voir le message
    bonjour,

    Nom : Animation.gif
Affichages : 3063
Taille : 618,8 Ko

    code final (dans UserForm1) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    Private Sub UserForm_Initialize()
        Call Initialise
    End Sub
     
    Private Sub ComboBox1_Change()
      With ComboBox1
        Me.PrenomLabel.Caption = .Column(1, .ListIndex)
      End With
    End Sub
     
    Private Sub AddIntervenantBtn_Click()
        If UserForm1.NomTextBox.Value <> "" Then
            'ajouter ligne
            Tb.ListRows.Add
            'derniere ligne
            TbLigne = TbRows.Count
            'ecrire nom
            TbCols("Nom").DataBodyRange(TbLigne).Value = UserForm1.NomTextBox.Value
            'ecrire prenom
            TbCols("Prénom").DataBodyRange(TbLigne).Value = UserForm1.PrenomTextBox.Value
            'initialise ComboBox1
            ComboBox1.RowSource = Range("Intervenants[#data]").Address
        End If
    End Sub
     
    Private Sub SupprIntervenantBtn_Click()
        'ligne à supprimer
        TbLigne = UserForm1.ComboBox1.ListIndex + 1
        'supprime ligne
        Tb.ListRows(TbLigne).Delete
        'initialise ComboBox1
        ComboBox1.RowSource = Range("Intervenants[#data]").Address
    End Sub
     
    Private Sub Initialise()
        Set Tb = ActiveSheet.ListObjects("Intervenants")
        Set TbRows = Tb.ListRows ' contient les lignes
        Set TbCols = Tb.ListColumns ' contient les colonnes
        'ComboBox1.RowSource = Range("Intervenants[[#data],[Nom]]").Address
        ComboBox1.RowSource = Range("Intervenants[#data]").Address
    End Sub
    @+JP
    Merci pour la vidéo JP

    Comme je ne sais pas faire de video je t'envoie juste une capture d'écran :



    Nom : JP2.PNG
Affichages : 2081
Taille : 71,4 Ko

    J'ai juste:
    Fait une copie de ton fichier
    Supprimé le ClicButton sur la Feuil1
    Rajouté le code dans l'ojet classeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Workbook_Open()
    UserForm1.Show
    End Sub
    C'est sûrement ça qui fait planter mon code jusqu'ici, mais pourquoi ?

  19. #19
    Membre extrêmement actif Avatar de mjpmjp
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    1 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2012
    Messages : 1 133
    Points : 1 441
    Points
    1 441
    Par défaut
    re,

    pour la vidéo (libre) : Capture_ScreenToGif.2.7.1

    Private Sub Workbook_Open()
    UserForm1.Show
    End Sub
    quand une erreur se produit dans le UserForm1 , çà revient ici !!!

    pour trouver l'erreur , met un point d’arrêt dans : Private Sub AddIntervenantBtn_Click()
    Nom : Capture1.PNG
Affichages : 2923
Taille : 19,8 Ko

    quand tu va ajouter une ligne , le code s’arrête (en jaune)
    Nom : Capture2.PNG
Affichages : 2964
Taille : 20,3 Ko

    utilise F8 pour faire avancer le code

    quand l'erreur survient c'est la ligne j'aune (avant F8) qui est en cause
    Nom : Capture3.PNG
Affichages : 2976
Taille : 77,7 Ko

    si après F8 tu as une erreur , l'erreur est dans cette ligne
    ComboBox1.RowSource = Range("Intervenants[#data]").Address

    @+JP
    Caractéristiques (WEB) phpMyAdmin 4-74 , PHP 5-631 , Apache 2-427 , MySQL 5-719
    Présentation NAS DS-3615xs + 20Go , DSM 6.1.6-15266 Up1 , 12 * WD 4To WD4000F9YZ (10 raid 6+ )+(2 raid 1+) , LinkSys comutateur-switch lgs528p-eu , Onduleur UPS 720W Power Boxx Lcd (4*UPS + 4*MOD)
    Mes contributions (EXCEL) Form GRAPHIQUE: Gestion des boutons , Liste Onglet dynamique...GESTION de FILM

  20. #20
    Membre à l'essai
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2017
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2017
    Messages : 58
    Points : 24
    Points
    24
    Par défaut
    Citation Envoyé par mjpmjp Voir le message
    re,

    pour la vidéo (libre) : Capture_ScreenToGif.2.7.1



    quand une erreur se produit dans le UserForm1 , çà revient ici !!!

    pour trouver l'erreur , met un point d’arrêt dans : Private Sub AddIntervenantBtn_Click()
    Nom : Capture1.PNG
Affichages : 2923
Taille : 19,8 Ko

    quand tu va ajouter une ligne , le code s’arrête (en jaune)
    Nom : Capture2.PNG
Affichages : 2964
Taille : 20,3 Ko

    utilise F8 pour faire avancer le code

    quand l'erreur survient c'est la ligne j'aune (avant F8) qui est en cause
    Nom : Capture3.PNG
Affichages : 2976
Taille : 77,7 Ko

    si après F8 tu as une erreur , l'erreur est dans cette ligne
    ComboBox1.RowSource = Range("Intervenants[#data]").Address

    @+JP
    voici l'erreur, mais je suis incapable de la corriger

    Nom : JP.PNG
Affichages : 2117
Taille : 60,1 KoNom : JP2.PNG
Affichages : 2072
Taille : 29,0 Ko

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 4 1234 DernièreDernière

Discussions similaires

  1. Méthode add() de l'objet select
    Par webrider dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 30/01/2008, 14h01
  2. Méthode add de l'objet AllowEditRange fonctionne... maintenant
    Par ouskel'n'or dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 26/09/2007, 12h58
  3. erreur La méthode 'Range' de l'objet '_Global' a échoué
    Par mahboub dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 17/11/2006, 20h46
  4. la méthode 'connection' de l'objet '_currentProject' a échoué
    Par floysand dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 28/09/2006, 12h14
  5. [VBA-E]La méthode 'Range' de l'objet '_Global' a échoué
    Par repié dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 22/02/2006, 16h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo