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 :

Erreur sur récupération de ligne excel en vba


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Gestionnaire de production
    Inscrit en
    Mars 2023
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Canada

    Informations professionnelles :
    Activité : Gestionnaire de production
    Secteur : Alimentation

    Informations forums :
    Inscription : Mars 2023
    Messages : 6
    Par défaut Erreur sur récupération de ligne excel en vba
    Bien le bonjour a tous,
    Finalement, mon silence n'auras pas duré longtemps, j'ai essayé de me sortir de pas mal de situation jusque la, mais je bloque sévère sur quelque chose de mystérieux.

    Pour l'histoire, je suis en train de me coder une gestion de stock qui est pas mal abouti maintenant, (cela va peut être en intéresser ici éventuellement, je vais essayer de répondre a vos questions si jamais), et ces derniers soirs je codais deux macros :
    • Une qui filtre des 'purchase order' suivant leur numéros.
    • Et une deuxième qui me permet d'effacer des lignes d'articles.



    La première fonctionne a merveille, tout est beau, aucune erreur.
    Je code la deuxieme, tout fonctionne a merveille, aucune erreur.

    Je re essaye la premiere dans la foulée, et bam, poteau télégraphique en pleine face mes amis. Un beau message d'erreur apparait.

    Je vous fais des captures d'écrans pour que vous vous fassiez une idée de mon bousin, suivi du message d'erreur.

    Je sélectionne A23034 dans ma combobox pour filtrer le contenu de ma listview, ca fonctionne. Youpi.
    Nom : Capture d’écran 2023-04-12 212554.jpg
Affichages : 180
Taille : 31,1 Ko

    Je sélectionne ma ligne que je veux effacer, je presse frénétiquement le bouton effacer, ca fonctionne. La ligne est effectivement effacée dans mon tableau...
    Nom : Capture d’écran 2023-04-12 212758.jpg
Affichages : 177
Taille : 82,6 Ko

    Puis vlan ! Un message d'erreur sauvage apparait.
    Nom : Capture d’écran 2023-04-12 213053.jpg
Affichages : 176
Taille : 13,1 Ko

    J'ai essayé de tourner le problème dans tout les sens pour savoir pourquoi cette erreur maintenant, j'ai rien trouvé jusque là.
    Ensuite, j'ai réécris la ligne manuellement dans mon tableau, histoire de voir si l'erreur persiste.
    Et bah non, l'erreur disparait ! Ca filtre de nouveau correctement.
    Je suis un vicieux, je re execute ma macro pour effacer la ligne, et re nouveau erreur.

    Je seche literalement sur le pourquoi. Avez vous été confronté a ceci aussi ? Avez vous une piste d'exploration a me proposer ?

    Je vous met aussi les codes VBA de mes deux macros, cela pourrais nous aider ensemble a comprendre le pourquoi.

    La premiere qui permet d'effacer la ligne
    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 CommandButton8_Click()  'effacer article
        If MsgBox("Confirmez vous la suppression ?" & vbNewLine & "Fortement déconseillé, inactivez l'article de préférence.", vbYesNo + vbCritical + vbDefaultButton2, "ATTENTION : Action définitive") = vbYes Then
            Set zone = Feuil3.Columns("A").Find(ListView1.SelectedItem, LookIn:=xlValues, lookat:=xlPart)
            If Not zone Is Nothing Then
                Call secu_visi(Feuil3, False, False) 'feuille, proteger Y/N, visibilité Y/N
                zone.EntireRow.Delete
                Call secu_visi(Feuil3, True, False) 'feuille, proteger Y/N, visibilité Y/N
            End If
        End If
        ThisWorkbook.Save
        UserForm_Initialize
    End Sub
    la deuxieme qui me permet de filtrer ma listview selon les infos de ma combobox
    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
     
    Sub filtrer()
        Dim couleur As Variant, plage As Variant
        plage = Feuil3.Range("A1:N" & Feuil3.Range("A65000").End(xlUp).Row).Value
        With ListView1
            .ListItems.Clear
            For i = 2 To UBound(plage, 2)
                If plage(i, 14) = "Open" Then
                    couleur = RGB(255, 0, 0)
                Else
                    couleur = RGB(0, 0, 255)
                End If
                If CStr(plage(i, 2)) = ComboBox3 Then
                    .ListItems.Add , , plage(i, 1)
                    ligne = .ListItems.Count
                    .ListItems(ligne).ListSubItems.Add , , plage(i, 2)
                    .ListItems(ligne).ForeColor = couleur
                    .ListItems(ligne).ListSubItems.Add , , plage(i, 3)
                    .ListItems(ligne).ListSubItems.Add , , plage(i, 5)
                    .ListItems(ligne).ListSubItems.Add , , plage(i, 6)
                    .ListItems(ligne).ListSubItems.Add , , Format(plage(i, 8), "####.00")
                    '.ListItems(ligne).ForeColor = couleur
                End If
            Next i
        End With
    End Sub
    La macro plante sur le For i = 2. Je récupère les bonnes valeurs pourtant

    J'ai essayé d'être le plus précis possible dans ma requête, en esperant vous aider a mieux comprendre mon probleme.

    Bien a vous !

  2. #2
    Membre du Club
    Homme Profil pro
    Gestionnaire de production
    Inscrit en
    Mars 2023
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Canada

    Informations professionnelles :
    Activité : Gestionnaire de production
    Secteur : Alimentation

    Informations forums :
    Inscription : Mars 2023
    Messages : 6
    Par défaut Complément d'info
    J'ai oublié de mentionner que je suis sur Excel 365. Désolé pour ceci.

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 524
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 524
    Par défaut
    Hello,

    A mon avis, tu expérimente des problème de synchronisation de tes données et des contrôles les affichant.
    Quelques pistes:
    - Utilise des tableaux structurés, ce sera plus facile à manipuler.
    - Décorrèle les données de leurs représentation (combo-box, list-view ect ...).
    - Fait toi des fonction qui rafraichissent tes liste.
    - Lorsque tu met à jour tes données (suppression / ajout / maj), rafraichit tes listes.
    - Tu n'as aucune raison d'appeler UserForm_Initialize manuellement (c'est une faute de conception).

  4. #4
    Membre du Club
    Homme Profil pro
    Gestionnaire de production
    Inscrit en
    Mars 2023
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Canada

    Informations professionnelles :
    Activité : Gestionnaire de production
    Secteur : Alimentation

    Informations forums :
    Inscription : Mars 2023
    Messages : 6
    Par défaut Je me demande si j'ai bien choisi le titre de mon fil...
    Hello Deedolith, merci de t'être penché sur mon probleme.

    J'ai supprimer l'appel de l'userform_initialize dans mes sub, maintenant je fais appel a une macro qui initialise la totalité de ma form, listview, etc.., remet en forme, et popule le tout.
    Pas de problème de ce coté ci, et tu as raison, ca rends le tout + propre. (pour ceux qui sont intéressés, je peux poster le code).
    J'appelle cette fonction a chaque fois que j'ai agi sur le tableau (ajout, suppression, modif).

    Que veux tu dire par tableaux structurés ? J'utilise déjà des tableaux dans mes feuilles Excel. Voir image ci dessous a titre d'exemple, est ce ceci dont tu parles ?
    Nom : Capture d’écran 2023-04-13 235359.jpg
Affichages : 157
Taille : 86,2 Ko

    Que veux tu dire par décorréler les données de leurs représentation ?

  5. #5
    Membre du Club
    Homme Profil pro
    Gestionnaire de production
    Inscrit en
    Mars 2023
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Canada

    Informations professionnelles :
    Activité : Gestionnaire de production
    Secteur : Alimentation

    Informations forums :
    Inscription : Mars 2023
    Messages : 6
    Par défaut
    Je me suis aperçu d'une coquille que je me suis mis dans les jambes.

    Cette ligne de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    For i = 2 To UBound(plage, 2)
    Je l'ai remplacée par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    For i = 2 To UBound(plage)
    En corrigeant ceci, l'erreur n'existe plus.

    J'ai fait des multiples tests dans tout les sens, c'est résolu. Merci pour tes remarques qui m'ont permis de me faire ouvrir les yeux et de rendre plus logique mon code Camarade !

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 524
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 524
    Par défaut
    Les tableaux structurés sont ceux que tu créée via le menu: Insertion ==> Tableau.
    Il y a également des articles pour les manipuler sur dvp.com, je t'invite à les consulter.

    Par décorréler les données de leur représentation, j'entend que les contrôle ne sont en charge que de l'affichage, les mises à jour doivent se faire à la source.
    En clair, si tu veux supprimer des lignes, ce n'est pas dans les listes qu'il faut le faire, mais à la source, et rafraichir les listes ensuite.
    Ainsi, pas de problème de synchronisation.

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

Discussions similaires

  1. Erreur sur ouverture de fichier Excel
    Par nihilist dans le forum Développement Web en Java
    Réponses: 1
    Dernier message: 02/09/2010, 09h24
  2. somme des effectifs de lignes excel via VBA
    Par soul330 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 05/07/2010, 20h42
  3. COM : Erreur sur SaveAs au passage à Excel 2007
    Par Antjac dans le forum Langage
    Réponses: 1
    Dernier message: 07/12/2009, 11h32
  4. Récupération de données EXCEL sous VBA
    Par morifice dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 16/09/2009, 20h45
  5. Erreur sur récupération type d'input
    Par michaelbob dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 14/08/2006, 12h12

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