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 :

Argument invalide sur ListIndex [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2018
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2018
    Messages : 19
    Par défaut Argument invalide sur ListIndex
    Bonjour,
    Je viens demander votre aide pour un soucis de suppression de données dans des tableaux.
    Je vous explique mon problème :
    Dans un calendrier, par clic sur une date, je peux soit ajouter une tache, ayant eu lieu ce jour ou qui aura lieu ce jour, ou aller voir dans une ListBox l'ensemble des taches que nous avons écrites avant :
    Nom : Calendar.PNG
Affichages : 180
Taille : 4,4 Ko

    Une fois que les données sont inscrites dans une textBox, un tableau, sur une autre feuille, est rempli avec la date et la tache.

    Nom : tab.PNG
Affichages : 178
Taille : 6,3 Ko

    Donc en suivant ce raisonnement, en cliquant de nouveau sur la date souhaitée (dans cet exemple le 15 Novembre) puis sur le bouton de résumé des taches, je vois apparaitre les taches correspondant à cette tache dans le tableau.

    Nom : Resumo.PNG
Affichages : 211
Taille : 3,5 Ko

    Mon bouton supprimir, par fonction, doit supprimer la tache sélectionnée dans la ListBox, et aussi retirer la tache correspondante dans le tableau pour eviter qu'elle ne reaparaisse à l'ouverture suivante.

    Mon soucis est que cette opération fonctionne à chaque fois, mais j'obtiens un message d'argument invalide. Les données sont bien supprimées mais cette erreur est présente à chaque fois.

    Je vous explique en commentaire mon code ci-dessous.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Private Sub CommandButton_Supprimir_Click() 'Cette opération a lieu sur click sur le bouton supprimer
     
    Data 'Il s'agit de la fonction definissant Dates comme un Worksheet (Entre autres)
     
     
    For i = 1 To Dates.ListObjects("Dates").ListRows.Count ' Dates est le worksheet où est présent le tableau contenant l'ensemble des dates, et "Dates" est le tableau en question
        If Dates.ListObjects("Dates").Range(i, 4).Text = Resumo.ListBox_Resumo.Text Then 'La colonne 4 est celle contenant la tache qui est également dans la ListBox, Resumo est le userform, où la ListBox contenant la tache est présente
            Dates.ListObjects("Dates").ListRows.Item(i - 1).Delete 'Je supprime la ligne entière du tableau Dates correspondant à la tache sélectionnée dans la ListBox
            Resumo.ListBox_Resumo.RemoveItem (Resumo.ListBox_Resumo.ListIndex) ' Je retire la tache sélectionnée dans la ListBox
     
        End If
    Next i
    Pour information la valeur de ListIndex au moment de l'erreur est -1.
    J'ai la conviction que mon erreur est évidente et facile à corriger mais je ne réussis pas malgré mes modifications à la trouver.
    Si l'un de vous peut m'aiguiller ou m'expliquer mon erreur, je suis preneur

    Je m'excuse d'avance en cas d'incompréhension et je suis prêt à reexpliquer toute imprécision !
    Merci

  2. #2
    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
    Par défaut
    bonjour,
    le problème est au niveau du code que tu nous montre pas --> comment est alimentée ta listbox ?

    par exemple si ta listbox est reliée directement à ton tableau sur la feuille ,
    quand tu supprimes une ligne elle n'est donc plus dans la listbox...
    Resumo.ListBox_Resumo.RemoveItem (Resumo.ListBox_Resumo.ListIndex)
    est peut être en trop....

    @+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

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2018
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2018
    Messages : 19
    Par défaut
    Bonjour, merci de ta réponse et désolé du temps d'attente je n'avais pas accès à mes codes ce week end.
    Pour résumer les opérations dans l'ordre :
    -Je remplis le tableau situé sur une autre feuille en remplissant une textbox puis en cliquant sur valider. Le code est le suivant :
    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
    Private Sub CommandButton_Validar_Click()
     
    Data
     
    Dim ultimaLinha As Integer
     
    ultimaLinha = Dates.ListObjects("Dates").ListRows.Count
     
    If ultimaLinha = 0 Then
        Dates.ListObjects("Dates").ListRows.Add
        ultimaLinha = Dates.ListObjects("Dates").ListRows.Count
    End If
    If ultimaLinha = 1 Then
     
        Dates.ListObjects("Dates").ListRows.Add
        ultimaLinha = Dates.ListObjects("Dates").ListRows.Count
    End If
     
    If ultimaLinha > 1 Then
        Dates.ListObjects("Dates").ListRows.Add
    End If
     
            Dates.ListObjects("Dates").Range(ultimaLinha, 1) = ActiveCell.Value
            Dates.ListObjects("Dates").Range(ultimaLinha, 2) = Nom
            Dates.ListObjects("Dates").Range(ultimaLinha, 3) = "2018"
            Dates.ListObjects("Dates").Range(ultimaLinha, 4) = TextBox_Tarefa
     
    TextBox_Tarefa.Value = ""
     
    End Sub
    Comme précedement, l'appel de la fonction Data permet la définition de Dates comme d'un Worksheet.

    - Une fois le tableau rempli, à l'ouverture de la ListBox résumé, elle se remplit avec les valeurs correspondantes présentes dans le tableau.
    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 CommandButton_Resumo_Click()
     
    Data
     
    Set date1 = Dates.ListObjects("Dates")
     
    For i = 1 To date1.ListRows.Count
            If (date1.Range(i, 1) = ActiveCell.Value) Then
            If (date1.Range(i, 2) = ActiveCell.ListObject.Name) Then
                Resumo.ListBox_Resumo.AddItem date1.Range(i, 4)
                End If
            End If
    Next i
     
    EDT.Hide
    Resumo.Show
     
    End Sub
    Dans ce code je compare les valeurs de la première colonne du tableau (Jour) avec celle de la cellule active, donc celle sur laquelle j'ai cliqué. Ensuite je compare le mois présent dans la colonne 2 du tableau avec le nom du tableau correspondant à la cellule active. Cette démarche me permet de placer les taches du tableau dans le jour adéquat.

    -La dernière étape est la suppression si besoin, déjà explicitée dans le premier message

    Effectivement je comprends ce que tu dis, toute cette opération n'est pas nécessaire vu que ma listBox est reliée à mon tableau. La ligne que tu me montre peut donc être supprimée. Cependant petite question, lorsque je clique sur supprimer, la ligne de la ListBox ne l'est pas, et il faut que je ferme le userform et que je le relance, puis clique sur résumé pour que cette ligne disparaisse, ce qui est logique vu que l'opération de lien entre le tableau est la listbox se fait sur ce click. J'aimerais cependant que lorsque je clique sur supprimer, la ligne en question disparaisse immédiatement. Suffit-il de copier le code faisant le lien et de le coller sur un click "Supprimer" ?
    Merci beaucoup de ton aide

  4. #4
    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
    Par défaut
    bonjour,
    tu fais une mini sub qui remplie la liste uniquement
    cette sub tu l’appelles dans le code du bouton resume et aussi dans le code du bouton supprime...

    après avoir supprimé la ligne du tableau , tu appelle ta mini sub pour réinitialiser ta liste ... et c'est tout

    @+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

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2018
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2018
    Messages : 19
    Par défaut
    Super, j'ai crée le module suivant :
    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
    Sub LstBx()
     
    Data
     
    Set date1 = Dates.ListObjects("Dates")
     
    For i = 1 To date1.ListRows.Count
            If (date1.Range(i, 1) = ActiveCell.Value) Then
            If (date1.Range(i, 2) = ActiveCell.ListObject.Name) Then
                Resumo.ListBox_Resumo.AddItem date1.Range(i, 4)
                End If
            End If
    Next i
     
    End Sub
    Je l'appelle lorsque je clique sur résumé, mais aussi à la fin de ma procédure de suppression de données. Je mets au préalable un .Clear puis j'appelle cette procédure, ça marche parfaitement.
    La réponse etait une évidence, je te remercie donc de ta patience et de ton aide pour un sujet aussi simple !
    Bien cordialement

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [A-03] Opération invalide sur création de table
    Par ted the Ors dans le forum VBA Access
    Réponses: 6
    Dernier message: 10/02/2009, 16h10
  2. Réponses: 3
    Dernier message: 06/05/2008, 20h43
  3. Erreur "ARGUMENT INVALIDE"
    Par Duddy dans le forum Requêtes et SQL.
    Réponses: 14
    Dernier message: 19/01/2008, 11h32
  4. Mot passe invalide sur ouverture de form
    Par rickickou dans le forum Sécurité
    Réponses: 1
    Dernier message: 01/10/2007, 11h41
  5. Réponses: 4
    Dernier message: 28/07/2006, 12h06

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