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

Excel Discussion :

Mise en forme condtionnelle


Sujet :

Excel

  1. #1
    Membre averti
    Homme Profil pro
    Responsable Automatisme
    Inscrit en
    Mars 2015
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Responsable Automatisme
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mars 2015
    Messages : 35
    Par défaut Mise en forme condtionnelle
    Bonjour,
    J'ai un tableau avec des regles de MFC: ex: =ET($O5="Fait";$C5=FAUX) =$O$5:$R$310;$B$5:$M$310 je rempli les cellules en jaune selon conditions
    La ligne 5 etant ma première ligne de mon tableau.

    Cependant j'ai une macro qui m'insere une nouvelle ligne au début de mon tableau. Ma nouvelle ligne se trouve donc en ligne 5. Mes mises en forme conditionnelles se décalent de 1 à chaque insertion ex: $O$6:$R$311;$B$6:$M$311. Comment puis-je appliquer mes MFC aux lignes insérées ?

    Merci de votre aide,

    Cdt

  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 114
    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 114
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Pour éviter de commencer à monter une usine à gaz qui vous obligerait à recopier la mise en forme à chaque insertion de ligne, je ne peux que vous conseiller d'utiliser les tableaux structurés.
    L'un des avantages de son utilisation, c'est que les formules, la mise en forme conditionnelle ainsi que la validation des données sont automatiquement propagées et de plus l'utilisation de cet objet est nettement plus simple en VBA

    Pour en savoir plus sur le sujet
    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
    Homme Profil pro
    Responsable Automatisme
    Inscrit en
    Mars 2015
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Responsable Automatisme
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mars 2015
    Messages : 35
    Par défaut
    Merci de votre retour.
    Je vais regarder vos liens
    Bonne journée

  4. #4
    Membre averti
    Homme Profil pro
    Responsable Automatisme
    Inscrit en
    Mars 2015
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Responsable Automatisme
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mars 2015
    Messages : 35
    Par défaut
    Le tableau structuré n'a pas résolu mon Pb. J'ai du ajouter dans macro qui ajouter une ligne au debit du tableau, le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Range("b6:r6").Select
        Selection.Copy
        Range("b5:r5").Select
        Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
            SkipBlanks:=False, Transpose:=False
        Application.CutCopyMode = False

  5. #5
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 548
    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 548
    Par défaut
    Bonjour

    Citation Envoyé par Freedavys18 Voir le message
    Le tableau structuré n'a pas résolu mon Pb. J'ai du ajouter dans macro qui ajouter une ligne au debit du tableau, le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Range("b6:r6").Select
        Selection.Copy
        Range("b5:r5").Select
        Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
            SkipBlanks:=False, Transpose:=False
        Application.CutCopyMode = False
    Comme ailleurs, puisqu'il s’agit d'un cross post, je réponds

    On n'utilise pas des select dans VBA

    Ton code n'insère pas une ligne de tableau mais copie un format... ce qui est inutile si l'insertion est correctement programmée

    On ne programme pas un tableau structuré comme un plage : on ajoute une ligne dans un tableau structuré par ListRows.Add associé au paramètre qui précise où se fait l'insertion

    Et cela marche parfaitement sans mettre le souk dans les MFC ni nécessiter de traficotage du format

    https://fauconnier.developpez.com/tu...structuresvba/

  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 114
    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 114
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    C'est normal.
    Un Copier/Coller d'une cellule ou d'une plage de cellules copie toutes les propriétés de cet objet et les colles. Que la plage cible soit une plage classique ou un tableau structuré.
    Pour obtenir le résultat escompté, il y a lieu de ne copier/coller que les valeurs et/ou les formules à l'aide du collage spécial
    J'ajouterai qu'il est plus simple de coller la ligne à la fin de la table et d'ensuite trier la table en fonction de notre choix.

    Faites un test manuel sans VBA.
    1. Convertissez votre tableau constitué de cellules classiques et convertissez le en tableau structuré
    2. Créez une mise en forme conditionnelle
    3. Copier la plage source et faites un collage spécial-valeur à la fin du tableau (première ligne libre)

    Vous constaterez que la nouvelle ligne de votre tableau structuré à hérité de la mise en forme conditionnelle.
    Il suffit ensuite de créer votre code VBA
    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
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 548
    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 548
    Par défaut
    RE
    Citation Envoyé par Philippe Tulliez Voir le message

    Copier la plage source et faites un collage spécial-valeur à la fin du tableau (première ligne libre)
    Que ce soit la dernière ou une ligne insérée au début, cela donne le même résultat : la MFC est prise en compte sur l'ensemble de la colonne

    Pour ma part je n'utilise jamais la parentalité feuille ni l'adresse des Tableaux structurés puisque Excel les gère. Donc je trouve plus simple le ListRows.Add dans tous les cas plutôt que le le calcul de la ligne située sous le tableau dans le cas où on insère à la fin.
    Cela permet aussi de ne pas se préoccuper de l'affichage éventuel de la ligne des Totaux.

  8. #8
    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 114
    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 114
    Billets dans le blog
    53
    Par défaut
    Bonjour Chris,
    Que ce soit la dernière ou une ligne insérée au début, cela donne le même résultat : la MFC est prise en compte sur l'ensemble de la colonne
    Tu as raison mais je préconise la dernière ligne car tu peux ainsi coller plus qu'une ligne sans avoir à redimensionner le tableau cible

    Pour ma part je n'utilise jamais la parentalité feuille ni l'adresse des Tableaux structurés puisque Excel les gère.
    Pour les tableaux structurés, je ne l'utilise plus non plus, j'utilise Range("TableName").ListObject mais il faut s'assurer que le bon classeur soit actif.

    Cela permet aussi de ne pas se préoccuper de l'affichage éventuel de la ligne des Totaux.
    Sauf erreur de ma part, si tu colles plusieurs lignes en une seule instruction, tu écrases la ligne des totaux.

    Je préconise le collage spécial valeur car il y a une perte de format (alignement et nombre) si on utilise la méthode Copy avec l'argument Destination

    Dans l'illustration le collage est fait en sélectionnant la première cellule de la première colonne de la dernière ligne.
    A gauche le collage avec l'instruction ListRows.Add à droite le collage sans ListRows.Add et on peut voir que le tableau du dessous a conserver le format

    Le collage commence à la ligne 26

    Maintenant, c'est possible qu'une instruction plus intéressante est à utiliser mais je ne la connais pas et je suis toujours intéressé d'approfondir mes connaissances.
    Nom : 231029 dvp Tableau Structuré Perte format Copy Destination.png
Affichages : 220
Taille : 71,6 Ko
    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

  9. #9
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 548
    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 548
    Par défaut
    RE
    Citation Envoyé par Philippe Tulliez Voir le message
    Je préconise le collage spécial valeur car il y a une perte de format (alignement et nombre) si on utilise la méthode Copy avec l'argument Destination
    Le demandeur n'utilise pas la copie pour insérer sa ligne si je lis bien le post initial

    Il a utilisé la copie pour recopier la MFC dans son dernier post

    Pour la création de lignes par copie, il y a plusieurs approches selon les cas mais effectivement le collage spécial valeurs s'impose.

  10. #10
    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 114
    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 114
    Billets dans le blog
    53
    Par défaut
    Bonjour Chris,
    Le demandeur n'utilise pas la copie pour insérer sa ligne si je lis bien le post initial
    Au temps pour moi, j'ai mal lu la question.
    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

Discussions similaires

  1. Mise en forme condtionnelle pas facile
    Par UDSP50 dans le forum Excel
    Réponses: 4
    Dernier message: 03/06/2015, 00h38
  2. Mise en forme condtionnelle en asp
    Par ravidat dans le forum ASP
    Réponses: 1
    Dernier message: 30/07/2010, 11h04
  3. Réponses: 11
    Dernier message: 25/02/2009, 16h51
  4. Mise en forme condtionnelle
    Par Homer091 dans le forum Excel
    Réponses: 6
    Dernier message: 28/10/2008, 16h48
  5. Mise en forme HTML
    Par Regis.C dans le forum XML/XSL et SOAP
    Réponses: 5
    Dernier message: 25/04/2004, 11h55

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