none
Extraire donnée d'un Tableau croisé dynamique en vba RRS feed

  • Question

  • Bonsoir tous,

    J'avais envoyé un message suite à un code. j'ai trouvé le problème sur mon code, le problème ne vient pas du tout d'Excel, mais plutôt de mon code :

    Voici l'exemple abrégé du code :


    For i2 = 4 To LigneTCD

            If (ThisWorkbook.Worksheets("Mouvement").Cells(i2, 2).Value = ThisWorkbook.Worksheets("Stock").Cells(1, 4).Value) Then
                MsgBox "Importation des Données du TCD "
            Else
                MsgBox "L'année choisie n'existe pas dans TCD"
                Exit Sub
            End If

    Next i2

    Le problème de ce code, pourquoi il ne peut à aucun moment fonctionner :

    Lorsque je fais une boucle For de i2 = 4 To LigneTCD, suivi du Test avec If pour tester l'existence d'une date dans le TCD, il est normal dans ce cas, que j'ai la réponse du MsgBox après le ELSE : "L'année choisie n'existe pas dans TCD". Pourquoi ?

    Bien que l'Année choisie existe bien dans le TCD, cependant, dans le compteur de la boucle For, il y a des valeurs de i2, où l'année choisie n'existe pas, c'est sur la base de valeurs de i2 qu'Excel me répond que l'année n'existe et l'instruction Exit Sub le fait sortir tout de suite.

    Si je ne fait pas le ELSE avec Exit Sub, L'année choisie qui correspondra à i2 passera après l'avoir signalé par le MsgBox

    En les valeurs des autres i2 passeront aussi, sans le signalement du MsgBox

    NOTE :

    Mon problème désormais, c'est qu'on me trouve un code qui fonctionnera et qui ferra passer que l'Année choisie, à l'aide de l'instruction If.

    mercredi 18 juillet 2018 22:23

Toutes les réponses

  • Bonjour,

    Je crois que je devine : l'année sélectionnée n'existe pas dans le TCD parce qu'elle n'existe pas dans la base source ?

    Est-ce que c'est pour décourager les bonnes volontés que le code n'a pas été rédigé comme ceci ?

    int AnneeTraitee = ThisWorkbook.Worksheets("Stock").Cells(1, 4).Value
    For i2 = 4 To LigneTCD
    
            If (ThisWorkbook.Worksheets("Mouvement").Cells(i2, 2).Value = AnneeTraitee Then
                MsgBox "Importation des Données du TCD "
            Else
                MsgBox "L'année choisie n'existe pas dans TCD"
                Exit Sub
            End If
    
    Next i2

    Bien entendu il faut partir du principe que la question s'adresse à quelqu'un qui ne dispose pas du fichier, et donc ne sait pas pourquoi on lui dit que la date est saisie dans la cellule 1, 4 de la feuille Stock, plutôt que d'en faire abstraction et de se concentrer sur la logique de la fonction.

    À part ça effectivement, le Exit Sub fait qu'on arrête tout le traitement à la première ligne qui n'est pas concernée par l'année à traiter. ça paraît difficile à justifier.

    Autre chose : si les deux autres fils sont considérés comme résolus il faudrait le marquer, car ça faciliterait la lecture des forums.

    • Modifié Gloops dimanche 22 juillet 2018 17:02
    dimanche 22 juillet 2018 16:47