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 :

Mise en forme d'une table


Sujet :

Macros et VBA Excel

  1. #1
    Membre très actif Avatar de Ylmith
    Profil pro
    Powered by Laom and Bethecu
    Inscrit en
    Juin 2006
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Powered by Laom and Bethecu

    Informations forums :
    Inscription : Juin 2006
    Messages : 140
    Par défaut Mise en forme d'une table
    Bonjour,

    après avoir vainement cherché dans le site je me résoud à vous exposer mon
    problème...

    J'ai une table Excel que je voudrais mettre en forme de manière automatique
    selon la valeur d'un colonne, à savoir que cette colonne contient des valeurs
    telles que "Entrée A", "Entrée B", etc.

    Il s'agirait de partir de la 2eme ligne de la table (la première est réservée aux noms des champs) et en colonne 7, de compter toutes les lignes identiques et d'appliquer une mise en forme sur la région définie par ces lignes,

    ex : compter les lignes "Entrée A", appliquer une mise en forme sur ("A1:N26").

    Ensuite reprendre le même principe et continuer avec "Entrée B", etc.

    Merci d'avance.

  2. #2
    Membre Expert

    Homme Profil pro
    Technicien Métrologie R&D
    Inscrit en
    Janvier 2007
    Messages
    1 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien Métrologie R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 610
    Billets dans le blog
    1
    Par défaut
    salut
    tu parles d'une mise en forme conditionnelle
    FORMAT
    MISE EN FORME CONDITIONNELLE
    LA VALEUR DE LA CELLULE EST
    et tu donnes tes valeurs et ton format
    pour les cellule de la ligne il faut se servir de la formule est
    = si( cellule_test=valeur;vrai;faux)
    format couleur de fond de police bordure etc..
    Daranc

  3. #3
    Membre très actif Avatar de Ylmith
    Profil pro
    Powered by Laom and Bethecu
    Inscrit en
    Juin 2006
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Powered by Laom and Bethecu

    Informations forums :
    Inscription : Juin 2006
    Messages : 140
    Par défaut
    Bonjour et merci,

    je ne cherche pas à mettre une seule cellule en format conditionnel, ce qui est simple, je veux à partir de la ligne 2
    (qui peut être une variable "L_Dep") et de la colonne 7

    - compter le nombre de lignes avec la même valeur de colonne,
    ex.: toutes les lignes "Entrée A"
    Cette valeur est mensuelle et variable d'un mois à l'autre
    (plus ou moins de lignes)

    - à faire le total de ces lignes par un compteur quelconque (je peux
    le réaliser dans une boucle en donnant une condition

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    For each Cellule in range (G2:G3200)
    If Left(Cellule.Formula, 8) = "Entrée A" Then Compteur = Compteur +1
    - à utiliser ce compteur pour définir l'aire à mettre en forme

    en gros: je pars de 2 j'arrive à 7, j'applique UNE mise en forme sur (A2:N7),
    je peux utiliser [Range (Cells,Cells)] sous une forme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range(cells(L_Dep, Cl_Index), cells(L_Dep + Compteur - 1 , Cl_Index + 12)
    et puis la mise en forme correspondante

    Les colonnes sont prédéfinies et ne varient pas (Ouf!)

    A noter que les différents paramètres "Entrée A", "Entrée B", etc; se retrouvent de manière mensuelle et
    c'est bien ce qui devient compliqué.

    Si j'utilise un "Range" sur toute la table je vais avoir un compteur qui compte
    toutes les valeurs, sur les 12 mois, et la mise en forme de "Entrée A" janvier par exemple se fera non pas sur 15 lignes
    mais sur 170 (nbre de lignes de l'année)...
    Je pourrais paramétrer mois par mois mais j'ai 18 valeurs mensuelles et 12 mois...
    En fait le comptage devrait repartir de zéro à chaque nouvelle valeur de
    la colonne...Pfff! JE ne vois pas comment faire sans monter une usine à gaz!

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 567
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 567
    Par défaut
    tu ne dis pas si entrée A de janvier a le même mise en forme que entrée A de mars, c'est important car ça serais plus facile, même si le code reprend les 170 entrèes, le code en lui même serais plus basique
    en français dans le texte
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    pour chaque valeur de cette colonne
    si cette valeur = entrèe A alors format = ceformat
    suivant
    et est ce que le format que tu applique est simple, genre une certaine couleur, ce qui le rendrais facile a incrementer
    tu peux meme encre plus facile dans ce cas en faisant une seule boucle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    i = 2
    pour chaque valeur1 de macolonne
    si valeur1.couleur >1
     pour chaque valeur2 de ma colonne 
      si valeur1 = valeur2 alors valeur.couleur = i
     suivant valeur 2
    i = i + 1
    suivant valeur 1
    et cette simple boucle te mettra toutes tes valeurs identique de la meme couleur, et meme si c'est un morceau de la ligne, ça marche pareil.
    cela dis, c'est en gros pour le principe, mais un exemple de ton code actuel ou de ton tableau et des format a papplique seraient bienvenus pour t'aider

  5. #5
    Membre Expert

    Homme Profil pro
    Technicien Métrologie R&D
    Inscrit en
    Janvier 2007
    Messages
    1 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien Métrologie R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 610
    Billets dans le blog
    1
    Par défaut
    bonjour
    Ta table ? c'est un tableau est tu sur (au vu de tes explication ) qu'utiliserVBA ce n'est prendre un canon de 75 pour écraser un moustique ?
    Ce que tu veux faire c'est juste faire ressortir des lignes dont une colonne correspond a un critère (voir un deuxième critère de date )
    je pense qu'une formule dans la mise en forme conditionnelle résoudrait ton problème
    en m1 (par exemple) le mois 1 , 2 , ....,12
    en m2 la valeur d'entree
    ton tableau en a1:k250
    la colonne A = date la colonne K='Entree x'
    sur la cellule A2
    format
    mise en forme conditionnelle
    coche la formule est
    ecrire = si(et(mois($A2)=$m$1;$k2=$m$2);vrai;faux)
    format
    motif (vert pale)
    ok
    ok
    tu recopie le format sur la plage complète de ton tableau (et même au delà)
    le mise en forme est instantanée
    Daranc

  6. #6
    Membre très actif Avatar de Ylmith
    Profil pro
    Powered by Laom and Bethecu
    Inscrit en
    Juin 2006
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Powered by Laom and Bethecu

    Informations forums :
    Inscription : Juin 2006
    Messages : 140
    Par défaut
    Citation Envoyé par Daranc
    Ce que tu veux faire c'est juste faire ressortir des lignes dont une colonne correspond a un critère (voir un deuxième critère de date )
    Ce n'est pas vraiment ça. Il s'agit de quadriller chaque zone correspondant
    à la valeur donnée dans la colonne "Entrées" et de lui donner un
    encadrement plus épais.
    Je peux évidemment le faire manuellement, je peux aussi le faire zone par zone
    en donnant les valeurs de départ et d'arrivée dans des "Inputbox", ça je sais le
    faire, ce que je voudrais c'est que ce soit fait à partir de la détection de chaque
    changement de valeur de la colonne.
    La mise en forme de ces tableaux reposent déjà sur beaucoup de paramètres colorés, il peut m'arriver de mettre en valeur (par macro) certains paramètres pour mieux les
    visualiser puis d'avoir besoin de remettre en forme de manière plus simple.
    Ca peut paraître un luxe mais pour moi c'est essentiel, sachant que j'ai le même type de tableau de 2001 à 2007 et qu'il ne saurait être question que j'applique des mises en formes manuelles voire conditionnelles en raison de changements trop nombreux...
    Voici pour l'instant ce que j'ai de plus proche
    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    Private Sub CommandButton7_Click()
     
    For i = 1 To 4
     
    Rw_Index = InputBox("De quelle ligne part la mise en forme?")
    Nb_Lignes = InputBox("Combien de lignes pour cette entrée?")
     
     
        Cl_Index = 2
        Compteur = 0
     
    ' Mise en forme
        Range(Cells(Rw_Index, Cl_Index), Cells(Rw_Index + Nb_Lignes, Cl_Index + 12)).Select
     
        Selection.Borders(xlDiagonalDown).LineStyle = xlNone
        Selection.Borders(xlDiagonalUp).LineStyle = xlNone
     
        With Selection.Borders(xlEdgeLeft)
            .LineStyle = xlContinuous
            .Weight = xlThick
            .ColorIndex = xlAutomatic
        End With
        With Selection.Borders(xlEdgeTop)
            .LineStyle = xlContinuous
            .Weight = xlThick
            .ColorIndex = xlAutomatic
        End With
        With Selection.Borders(xlEdgeBottom)
            .LineStyle = xlContinuous
            .Weight = xlThick
            .ColorIndex = xlAutomatic
        End With
        With Selection.Borders(xlEdgeRight)
            .LineStyle = xlContinuous
            .Weight = xlThick
            .ColorIndex = xlAutomatic
        End With
        With Selection.Borders(xlInsideVertical)
            .LineStyle = xlContinuous
            .Weight = xlThin
            .ColorIndex = xlAutomatic
        End With
        With Selection.Borders(xlInsideHorizontal)
            .LineStyle = xlContinuous
            .Weight = xlThin
            .ColorIndex = xlAutomatic
        End With
     
        Range(Cells(Rw_Index, Cl_Index), Cells(Rw_Index, Cl_Index)).Select
     
     
        ActiveWindow.SmallScroll Down:=Nb_Lignes
     
        Next i
     
        MsgBox ("Boucle terminée!")
     
    End Sub
    Je fais une boucle sur 4 pour garder une bonne visibilité sur l'écran.

  7. #7
    Membre très actif Avatar de Ylmith
    Profil pro
    Powered by Laom and Bethecu
    Inscrit en
    Juin 2006
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Powered by Laom and Bethecu

    Informations forums :
    Inscription : Juin 2006
    Messages : 140
    Par défaut
    ne sert à rien, c'est juste un reste
    de l'ancienne macro...

  8. #8
    Membre très actif Avatar de Ylmith
    Profil pro
    Powered by Laom and Bethecu
    Inscrit en
    Juin 2006
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Powered by Laom and Bethecu

    Informations forums :
    Inscription : Juin 2006
    Messages : 140
    Par défaut
    Voilà à quoi ressemble le tableau


  9. #9
    Membre très actif Avatar de Ylmith
    Profil pro
    Powered by Laom and Bethecu
    Inscrit en
    Juin 2006
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Powered by Laom and Bethecu

    Informations forums :
    Inscription : Juin 2006
    Messages : 140
    Par défaut
    La colonne à partir de laquelle doit se réaliser la mise en forme est
    "Point de vente_06"

  10. #10
    Membre Expert

    Homme Profil pro
    Technicien Métrologie R&D
    Inscrit en
    Janvier 2007
    Messages
    1 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien Métrologie R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 610
    Billets dans le blog
    1
    Par défaut
    Ce n'est pas vraiment ça. Il s'agit de quadriller chaque zone correspondant
    à la valeur donnée dans la colonne "Entrées" et de lui donner un
    encadrement plus épais.

    rien ne t'empêche de jouer sur le format des bordures bon en conditionnelle je ne crois pas qu'il y ait l'épaisseur mais tu peut changer la couleur de tes bordures en rouge au-dessus et au dessous de la ligne ciblée
    Daranc

  11. #11
    Membre très actif Avatar de Ylmith
    Profil pro
    Powered by Laom and Bethecu
    Inscrit en
    Juin 2006
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Powered by Laom and Bethecu

    Informations forums :
    Inscription : Juin 2006
    Messages : 140
    Par défaut
    Citation Envoyé par Daranc
    bon en conditionnelle je ne crois pas qu'il y ait l'épaisseur mais tu peut changer la couleur de tes bordures en rouge au-dessus et au dessous de la ligne ciblée
    Daranc
    Effectivement il n'y a pas de possibilité de jouer en épaisseur sur une mise
    en forme conditionnelle normale mais j'y ai déjà pensé.
    Je peux sélectionner tout le tableau et appliquer un quadrillage et ensuite
    appliquer une mise en forme grasse à chaque cellule séparant 2 zones...mais
    le problème reste le même...
    C'est le même genre de code que précédemment mais simplifié
    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
     
    Private Sub CommandButton8_Click()
     
    For i = 1 To 4
     
    Rw_Index = InputBox("N° ligne de séparation (la séparation est au-dessus de la ligne)?")
     
        Cl_Index = 2
     
    ' Mise en forme
        Range(Cells(Rw_Index, Cl_Index), Cells(Rw_Index, Cl_Index + 12)).Select
     
     
        With Selection.Borders(xlEdgeTop)
            .LineStyle = xlContinuous
            .Weight = xlThick
            .ColorIndex = xlAutomatic
        End With
     
     
        'Range(Cells(Rw_Index, Cl_Index), Cells(Rw_Index, Cl_Index)).Select
     
     
        ActiveWindow.SmallScroll Down:=7
     
        Next i
     
        MsgBox ("Boucle terminée!")
     
    End Sub
    je suis obligé de saisir chaque valeur.

    J'avais également pensé à stocker les adresses de lignes dans une table et
    m'en servir mais ça je ne sais pas le faire et une table a des valeurs fixes et
    il faut vérifier ces valeurs...
    Il me faudrait quelque chose de plus immédiat...

    Merci en tous cas de prendre le temps de regarder mes petites bidouilles

    Je vais laisser reposer un peu...

  12. #12
    Membre Expert

    Homme Profil pro
    Technicien Métrologie R&D
    Inscrit en
    Janvier 2007
    Messages
    1 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien Métrologie R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 610
    Billets dans le blog
    1
    Par défaut
    salut je reprends ce fil
    j'ai mis les entrees en colonne F avec un tableau dont les valeurs commence en ligne 3
    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
    Sub lignage()
    With Sheets(1)
    a = .Range("f65535").End(xlUp).Row
    End With
    For t = 3 To a
    If Cells(t + 1, 6).Value <> Cells(t, 6).Value Then
     Range("A" & t & ":O" & t).Select
            With Selection.Borders(xlEdgeBottom)
            .LineStyle = xlContinuous
            .Weight = xlThick
            .ColorIndex = xlAutomatic
            End With
     End If
     Next
    End Sub

Discussions similaires

  1. Mise en forme d'une table avec du PHP
    Par Lorgar dans le forum Langage
    Réponses: 2
    Dernier message: 15/07/2011, 15h31
  2. Changement mise en forme dans une table hiérarchique
    Par florent.douille dans le forum WinDev
    Réponses: 2
    Dernier message: 27/07/2010, 15h25
  3. Réponses: 2
    Dernier message: 28/02/2010, 18h34
  4. Comment se passer des <table> pour la mise en forme d'une page
    Par gael dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 12/11/2008, 20h06
  5. Mise en forme d'une table
    Par PyMon dans le forum Access
    Réponses: 4
    Dernier message: 24/07/2007, 17h34

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