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 :

Aide sur une macro existante


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 31
    Par défaut Aide sur une macro existante
    Hello,

    Dans un autre forum, j'ai pu obtenir de l'aide sur la création d'une macro. La macro fonctionne correctement.
    Le problème est qu'une des étapes de la macro ne donne pas le résultat escompté et que je ne parviens pas à trouver une solution.
    L'objectif de cette macro est, entre autres, appliquer un "filtre" sur base de la date la plus éloignée. Actuellement, elle me donne l'inverse, c'est à dire qu'elle choisit la date la plus proche.

    Est-ce que quelqu'un aurait la gentillesse d'y jeter un coup d'oeil et de m'indiquer quel paramètre je devrais changer?

    D'avance un grand merci.

    PS : c'est un topic initialement posté sur forum excel pratique et la macro a été créé par MFerrand (tous les crédits lui reviennent ).

    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
    Sub FiltrerListe()
        Dim tbl(), dpt, itm, aa, i%, d As Object, ok As Boolean
        Set d = CreateObject("Scripting.Dictionary")
        aa = ActiveSheet.Range("A1").CurrentRegion.Value2
        For i = 2 To UBound(aa)
            dpt = aa(i, 1)
            If d.exists(dpt) Then
                itm = Split(d(dpt), ";")
                If aa(i, 3) < CInt(itm(1)) Then
                    ok = True
                ElseIf aa(i, 4) < CLng(itm(2)) Then
                    ok = True
                End If
                If ok Then
                    itm = aa(i, 2) & ";" & aa(i, 3) & ";" & aa(i, 4)
                    d(dpt) = itm: ok = False
                End If
            Else
                itm = aa(i, 2) & ";" & aa(i, 3) & ";" & aa(i, 4)
                d(dpt) = itm
            End If
        Next i
        ReDim tbl(d.Count, 3): i = 0
        For Each dpt In d.keys
            itm = Split(d(dpt), ";")
            i = i + 1: tbl(i, 0) = dpt: tbl(i, 1) = itm(0)
            tbl(i, 2) = CInt(itm(1)): tbl(i, 3) = CLng(itm(2))
        Next dpt
        itm = Split("Département Décision Phase Date")
        For i = 0 To 3
            tbl(0, i) = itm(i)
        Next i
        Application.ScreenUpdating = False
        With ActiveSheet.Range("J1").Resize(UBound(tbl, 1) + 1, 4)
            .Value = tbl
            With .Rows(1)
                .HorizontalAlignment = xlCenter: .Font.Italic = True
            End With
            .Columns(4).NumberFormat = "dd/mm/yyyy"
            .Columns.AutoFit
        End With
    End Sub

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Ce que je n'arrive pas à comprendre, c'est la raison pour laquelle tu ne poses pas directement la question à celui qui t'a aidé.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 31
    Par défaut
    Bonjour,

    Je pensais qu'il s'agissait d'un forum d'entraide et non pas d'un "tribunal", même s'il n'y a pas encore eu de plaidoirie (ca ne saurait tarder?)
    Je ne joue pas au ping-pong et c'est justement pour cette raison que j'ai indiqué qui avait établi cette macro et où.

    J'ai relancé le sujet mais je n'ai pas eu de retour de son auteur. Et je peux comprendre, chacun a ses propres occupations et c'est la raison pour laquelle je ne me permets pas d'adresser directement la question en MP à la personne. S'il avait le temps, il l'aurait probablement fait sur le topic.
    Il se trouve que mon besoin devient relativement urgent et c'est la raison pour laquelle je me suis adressé à vous ici.

    Ce sont deux forums que j'ai l'habitude de fréquenter. Maintenant, il se peut que le fait d'avoir posé la question en premier sur l'autre forum et en 2ème ici puisse gêner. Jamais facile d'être 2ème, n'est ce pas? (sur le ton de la blague hein, au cas ou la susceptibilité de certains se manifesterait )

    Quant à la formulation de certaines imprécisions, j'en conviens que ma demande ici peut sembler (et elle l'est) imprécise. Mon objectif n'était pas de refaire la même demande, de donner tout le contexte, etc.
    Dans mon esprit, cette macro ne comporte qu'un bout de code relatif à un traitement de dates et je pensais que pour des experts en VBA, repérer ce bout de code serait un jeu d'enfant. Ma conception du VBA est loin d'être réaliste.

    Quoi qu'il en soit, je suis relativement surpris par la tournure que prend ce post. Je suppose que de temps à autre il faut sortir un peu de la routine qui consiste à aider "le pauvre inculte qui n'y comprend rien" et d'envoyer balader certaines demandes. Aujourd'hui (ou hier) c'est tombé sur moi. Pas grave, on fera mieux la prochaine fois.

    En vous souhaitant une agréable journée Mesdames.

  4. #4
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    ce long discourt n'apporte malheureusement aucune information nouvelle sur ta demande alors qu'il t'a été indiqué qu'elle n'est pas suffisamment précise pour apporter une réponse fiable.
    Ne connaissant rien de tes données, comment savoir où se trouvent les dates dont tu parles ?

    Mais il est sans doute plus simple et logique de supposer que tous les participants de ce forum sont contre toi personnellement plutôt que d'envisager que ce soit ta demande qui soit imparfaite et de prendre la peine d'y apporter des informations complémentaires.

  5. #5
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 31
    Par défaut
    A la lecture du commentaire de unparia, j'ai pensé qu'une aide (par rapport à une demande déjà effectuée ailleurs) n'était pas appropriée.
    Raison pour laquelle je n'ai pas apporté plus de précisions. Et loin de moi la supposition que tous les membres du forum sont contre moi, il serait inutile de m'accorder autant d'importance, surtout que c'est moi qui ait besoin de quelque chose. Je n'ai pas généralisé, j'ai juste indiqué qu'il y a des jours avec et des jours sans, et que cette fois-ci c'était un jour sans.

    Puisqu'il faut plus de précisions, en voici :

    J'ai un tableau de données qui se présente sous cette forme :

    Nom : 1.PNG
Affichages : 150
Taille : 20,7 Ko

    La colonne C reprend des données de 1 à 4, où 1 > 2, 2 > 3, 3 > 4
    La colonne A, reprend une donnée commune à plusieurs lignes. Je ne souhaiterais garder cette valeur qu'une seule fois, en affichant en colonne C la variable la plus "importante" selon ce que j'ai décrit ci-dessous.
    La valeur à reprendre en colonne D serait la date la plus éloignée dans le temps, par rapport à la date d'aujourd'hui.

    Le tableau ressemblerait à ceci :
    Nom : 2.PNG
Affichages : 133
Taille : 8,0 Ko

    La macro fonctionne parfaitement à l’exception près que c'est la date la plus proche qui est choisie alors que je recherche la date la plus éloignée.

    La colonne B n'a que peu d'importance. Limite je la supprimerais de mon tableau.

    Est-ce que ces précisions sont-elles suffisantes?

    Merci

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Alors d'après ton explication ci-dessous, je ne comprends pas pourquoi on retrouve dans ton dernier tableau quatre lignes avec la lettre A dont deux avec à la fois A en colonne A et 1 en colonne C
    La colonne A, reprend une donnée commune à plusieurs lignes. Je ne souhaiterais garder cette valeur qu'une seule fois, en affichant en colonne C la variable la plus "importante" selon ce que j'ai décrit ci-dessous.
    mais peut-être n'ai je rien compris ce qui est encore possible.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  7. #7
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 31
    Par défaut
    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour,
    Alors d'après ton explication ci-dessous, je ne comprends pas pourquoi on retrouve dans ton dernier tableau quatre lignes avec la lettre A dont deux avec à la fois A en colonne A et 1 en colonne C

    mais peut-être n'ai je rien compris ce qui est encore possible.
    Erreur de ma part, je jongle avec plusieurs fichiers pour trouver une solution et j'ai copié le tableau du mauvais fichier. Oui ok, je l'ai mérité, balancez les tomates.

    Voici le résultat corrigé :
    Nom : 2.PNG
Affichages : 143
Taille : 6,3 Ko

  8. #8
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Je pense (sans certitude) que c'est l'inégalité de la ligne 11 qui est dans le mauvais sens.
    Même si ce n'est pas ça, tu ne perds rien à essayer.

  9. #9
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Bonjour,

    As tu fait déjà ce que @Menhir (que je salue) t'as proposé?
    Citation Envoyé par Menhir Voir le message
    Je pense (sans certitude) que c'est l'inégalité de la ligne 11 qui est dans le mauvais sens.
    Même si ce n'est pas ça, tu ne perds rien à essayer.
    Edit : Si on doit prendre en compte le chiffre supposé être le plus important (1, 2, 3, 4) puis ensuite la date la plus éloignée (Est ce cela ?), la bonne réponse est laquelle pour le B ? :

    B Lisbonne 2 28/02/18
    OU
    B Madrid 3 30/06/18

    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

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

Discussions similaires

  1. Aide sur une macro qui change la couleur de police
    Par bruxmu dans le forum VBA Word
    Réponses: 4
    Dernier message: 26/03/2020, 16h36
  2. [XL-2010] aide sur une macro de majoration automatique 5% par an
    Par chermiti10 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 14/04/2015, 09h49
  3. Besoin d'aide sur une macro
    Par kyros21 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/11/2011, 09h33
  4. [XL-2007] aide sur une macro
    Par ozaland dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 21/06/2011, 17h32
  5. petite aide sur une macro pour transfere de valeur
    Par fpouzou dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 03/06/2007, 16h54

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