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 :

Plage de données dynamiques


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    autre
    Inscrit en
    Décembre 2019
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Décembre 2019
    Messages : 23
    Points : 26
    Points
    26
    Par défaut Plage de données dynamiques
    Bonjour,

    je bloque sur un problème de plages de données.

    J'ai un petit script VBA qui me génère des tableaux de la forme suivante:
    Nom : tablo.PNG
Affichages : 301
Taille : 30,9 Ko

    En gros le script génère le premier tableau "A4:L9" puis le copie colle le nombre de fois nécéssaire en fonction d'une variable "nombretableaux".

    Maintenant, j'aimerais mettre en place une règle de mise en forme conditionnelle sur certaines cases de ces tableaux. Sur l'exemple, la première règle sera sur les plages =$B$6:$L$8;$B$13:$L$15;$B$20:$L$22;$B$27:$L$29, et la deuxième sur la plage =$B$9:$L$9;$B$16:$L$16;$B$23:$L$23;$B$30:$L$30. Le problème c'est que cette plage change en fonction du nombre de tableau et que je n'arrive pas à voir comment générer dynamiquement une plage.

    Si quelqu'un a une piste, ça m'aiderait grandement!

    Bonne soirée

  2. #2
    Membre chevronné
    Inscrit en
    Septembre 2007
    Messages
    1 132
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 132
    Points : 1 803
    Points
    1 803
    Par défaut
    Bonjour,
    Citation Envoyé par thesus_size Voir le message
    Maintenant, j'aimerais mettre en place une règle de mise en forme conditionnelle sur certaines cases de ces tableaux.
    Si tu mets tes MFC sur la première plage, ensuite la copie te copiera aussi la MFC sans aucun calcul.

  3. #3
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 413
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 413
    Points : 16 255
    Points
    16 255
    Par défaut
    BOnjour

    Teste le numéro de ligne avec modulo pour la 1ere et =3 pour la seconde
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    autre
    Inscrit en
    Décembre 2019
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Décembre 2019
    Messages : 23
    Points : 26
    Points
    26
    Par défaut
    Citation Envoyé par anasecu Voir le message
    Bonjour,


    Si tu mets tes MFC sur la première plage, ensuite la copie te copiera aussi la MFC sans aucun calcul.
    Oui, mais j'ai une MFC différente pour chaque tableau, alors que j'aimerais que ce soit la même MFC pour tous les tableaux. En gros c'est pour mettre en couleur la valeur la plus petite de tous les tableaux.

  5. #5
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 413
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 413
    Points : 16 255
    Points
    16 255
    Par défaut
    RE

    Phrase ambiguë

    La valeur la plus petite des données de l'ensemble des tableaux ou par tableau ?

    Donne un exemple car avec des cellules vides c'est très abstrait
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    autre
    Inscrit en
    Décembre 2019
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Décembre 2019
    Messages : 23
    Points : 26
    Points
    26
    Par défaut
    Citation Envoyé par 78chris Voir le message
    RE

    Phrase ambiguë

    La valeur la plus petite des données de l'ensemble des tableaux ou par tableau ?

    Donne un exemple car avec des cellules vides c'est très abstrait
    Exemple ici:
    Nom : tablo exemple.PNG
Affichages : 295
Taille : 22,0 Ko

    La même MFC est appliquée sur les trois premières lignes du premier et du second tableau. Une deuxième MFC (même règle => valeur minimum de la sélection) est appliquée à la dernière ligne des deux tableaux.

    Je vais essayer d'utiliser du pseudo-code pour expliciter ce qui me tracasse:

    Pour le nombre de tableau généré:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Pour le nombre de tableau généré:
        Créer une plage de sélection comportant les trois premières lignes de chaque tableau
            Appliquer MFC = la plus petite valeur de la sélection est mise en forme
        Créer une 2nd plage de sélection comportant la dernière ligne de chaque tableau
             Appliquer MFC = la plus petite valeur de la sélection est mise en forme
    J'imagine que je devrais arriver à quelque chose comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Set BigRange = Union(Range(Cells(6, 2), Cells(8, 12)), Range(Cells(13, 2), Cells(15, 12)))
                    BigRange.FormatConditions.AddTop10
                    BigRange.FormatConditions(BigRange.FormatConditions.Count).SetFirstPriority
    Mais je ne vois pas comment créer "dynamiquement" (en fonction d'une variable quoi), ces plages.

    Merci d'avance

  7. #7
    Membre chevronné
    Inscrit en
    Septembre 2007
    Messages
    1 132
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 132
    Points : 1 803
    Points
    1 803
    Par défaut
    Bonsoir,
    Citation Envoyé par thesus_size Voir le message
    La même MFC est appliquée sur les trois premières lignes du premier et du second tableau. Une deuxième MFC (même règle => valeur minimum de la sélection) est appliquée à la dernière ligne des deux tableaux.
    Sur ton premier tableau que tu veux copier, après l'avoir généré, tu rajoutes la MFC puis tu fais tes copies et tes MFC seront correctes sur tous les tableaux.
    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
        With Range("B5:L7")
            .FormatConditions.AddTop10
            With .FormatConditions(1)
                .TopBottom = xlTop10Bottom
                .Rank = 1
            End With
            .FormatConditions(1).Interior.Color = 5296274 ' à modifier
        End With
        With Range("B8:L8")
            .FormatConditions.AddTop10
            With .FormatConditions(1)
                .TopBottom = xlTop10Bottom
                .Rank = 1
            End With
            .FormatConditions(1).Interior.Color = 5296274 ' à modifier
        End With

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    autre
    Inscrit en
    Décembre 2019
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Décembre 2019
    Messages : 23
    Points : 26
    Points
    26
    Par défaut
    Bonjour et merci de ta réponse

    J'ai testé ta solution, et le problème reste le même. Je vais essayer de réexpliquer autrement. Sur l'exemple précédent, j'avais enlevé les légendes de la colonne de gauche, ce qui peut porter à confusion. Je les remets pour plus de clarté.
    Nom : exemple2.PNG
Affichages : 245
Taille : 21,0 Ko
    Les deux tableaux contiennent des données qui font partie du même ensemble. Les lignes 5 et 12 correspondent à une localisation en millimètres ( de 0mm à 21000mm). Dans l'exemple ci dessus, j'ai appliqué ton bout de code. Dans ce cas, j'ai une MFC différente (mais avec la même règle et la même mise en forme, on est d'accord) pour chaque tableau, il est donc mis en valeur la plus petite valeur de chaque tableau. Ce que je cherche à faire, c'est mettre en valeur la plus petite valeur des deux tableaux, comme dans l'exemple ci-dessous.
    Nom : exemple3.PNG
Affichages : 241
Taille : 20,3 Ko

    C'est pourquoi je parle de la création dynamique de la plage pour laquelle va s'appliquer la MFC. Dans l'exemple ci-dessus, la plage d'application de la MFC est : =$B$6:$L$8;$B$13:$L$15.

    Si j'avais trois tableaux, la plage d'application devrait être =$B$6:$L$8;$B$13:$L$15;$B$20:$L$22 et ainsi de suite.

    Et c'est là que je bloque.

  9. #9
    Membre chevronné
    Inscrit en
    Septembre 2007
    Messages
    1 132
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 132
    Points : 1 803
    Points
    1 803
    Par défaut
    Bonjour
    Citation Envoyé par thesus_size Voir le message
    Si j'avais trois tableaux, la plage d'application devrait être =$B$6:$L$8;$B$13:$L$15;$B$20:$L$22 et ainsi de suite
    J'avais compris que tu cherchais le petit sur chaque tableau.
    Comme tu le veux sur l'ensemble des tableaux cela devrait fonctionner avec ce code.

    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
    Dim num As Integer, adr As String
        With Range("B6:L8")
            adr = .Address
            For num = 1 To nombretableaux - 1
               adr = adr & "," & .Offset(7 * num, 0).Address
            Next num
        End With
        With Range(adr)
            .FormatConditions.AddTop10
            With .FormatConditions(1)
                .TopBottom = xlTop10Bottom
                .Rank = 1
            End With
            .FormatConditions(1).Interior.Color = 5296274 ' à modifier
        End With
        With Range("B9:L9")
            adr = .Address
            For num = 1 To nombretableaux - 1
               adr = adr & "," & .Offset(7 * num, 0).Address
            Next num
        End With
        With Range(adr)
            .FormatConditions.AddTop10
            With .FormatConditions(1)
                .TopBottom = xlTop10Bottom
                .Rank = 1
            End With
            .FormatConditions(1).Interior.Color = 5296274 ' à modifier
        End With

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    autre
    Inscrit en
    Décembre 2019
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Décembre 2019
    Messages : 23
    Points : 26
    Points
    26
    Par défaut
    Ca marche parfaitement, merci beaucoup!

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

Discussions similaires

  1. [XL-2013] Création d'une plage de donnée dynamique
    Par prostagma dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 25/06/2019, 17h59
  2. [XL-2007] Calcule de la valeur maximum d'une plage de données dynamique
    Par flo84316 dans le forum Excel
    Réponses: 2
    Dernier message: 10/05/2016, 09h49
  3. [XL-2007] Créer une plage de données dynamique
    Par capi81 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 23/07/2014, 21h12
  4. [XL-2010] Plage de données dynamique si valeurs copiées avec liaison
    Par moilou2 dans le forum Excel
    Réponses: 8
    Dernier message: 05/04/2013, 17h16
  5. [XL-2010] Plage de donnée dynamique pour graphique
    Par moilou2 dans le forum Excel
    Réponses: 3
    Dernier message: 07/03/2013, 18h51

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