Ajouter une bordure en fonction du résultat d'une formule

Bonjour à toutes et à tous,

Voici le petit souci que je rencontre ce qui n'est pas étonnant vu mon niveau en vba.

J'ai réalisé une macro qui me permet lorsque je clique sur le bouton d'éditer deux listes en fonction de données contenues dans des cellules.

J'ai une liste déroulante avec des noms de communes nommées de A à AG. Lorsque je choisis une commune, des informations comme le nombre d'habitants, le nombre de conseiller municipaux et le nombre de conseiller communautaire apparait en dessous. Je crée les deux listes en fonction du nombre de conseillers municipaux et en fonction du nombre de conseiller communautaire.

Pour créer mes deux listes j'ai créé cette macro :

Sub Bouton1_Cliquer()

i = Range("E9").Value

j = Range("E10").Value

With Sheets("Feuil1")

For y = 15 To i + 15

.Cells(y, 1).Value = v

v = v + 1

Next

For y = 15 To j + 15

.Cells(y, 5).Value = x

x = x + 1

Next

End With

End Sub

Je voudrai inclure dans cette macro une formule qui ajouterai une bordure en dessous de certains chiffres des deux colonnes si une condition est remplie. Je précise que j'ai deux formules à valider dont une se trouve dans les deux listes

1/

Par exemple, pour connaitre le nombre limite de conseiller communautaire, la formule suivante doit s'appliquer.

=si(arrondi.inf(E10/4;0)=0;arrondi.inf(E10/4;0)+1;arrondi.inf(E10/4;0)

si je prend la commune A, j'ai 3 CC indiqués dans la case E10 alors se sera 3/4 mais si je tombe à 0, je dois ajouter 1.

En fonction du résultat trouvé par la formule, je veux donc mettre un trait pour indiquer la limite et cela dans les deux listes.

2/ je veux également inclure cette formule qui me donnera le maximum de candidats sur la liste municipale

Pour exemple, toujours avec la commune A, j'ai23 conseiller municipaux dans la case E9 alors pour avoir ma limite, j'applique la formule suivante : E9*3/5 ce qui me donne 13,8. Je précise que je dois prendre toujours à l'arrondi inférieur donc ici 13 (idem au dessus).

Je veux, comme plus haut, mettre un trait en dessous pour indiquer la limite.

J'ai bien essayé de récupérer les formules via l'enregistreur mais je patauge pour l'écriture.

Dans l'absolu, le document word montre ce à quoi je veux arriver.

Merci à toutes les âmes charitables qui voudront bien m'expliquer la manière de procéder.

Salut trufu,

Je t'ai laissé ton bouton RESET pour faire joli mais, plus vraiment besoin puisque la macro fait tout toute seule, nettoyage et calcul.

La macro démarre sur un changement en [E7] = nom de la commune.

En [F9] et [F10] se trouvent les formules qui calculent les nombres limites de candidats CM et CC.

=MAX(1;ENT(E9*3/5))

A contrôler car pour les CC, tu parles dans ton post de 1/4 (formule) puis 3/4...

Private Sub Worksheet_Change(ByVal Target As Range)
'
If Not Intersect(Target, [E7]) Is Nothing Then
    Range("A15:A1000").Delete shift:=xlUp
    Range("E15:E1000").Delete shift:=xlUp
    If [E9] > 0 Then
        Range("A15").Value = 1
        Range("A15").DataSeries rowcol:=xlColumns, Step:=1, Stop:=[E9]
        With Range("A" & 14 + [F9]).Borders(xlEdgeBottom)
            .LineStyle = xlContinuous
            .Weight = xlMedium
            .ColorIndex = 3
        End With
    End If
    If [E10] > 0 Then
        Range("E15").Value = 1
        Range("E15").DataSeries rowcol:=xlColumns, Step:=1, Stop:=[E10]
        With Range("E" & 14 + [F10]).Borders(xlEdgeBottom)
            .LineStyle = xlContinuous
            .Weight = xlMedium
            .ColorIndex = 3
        End With
    End If
End If
'
End Sub

A+

Salut trufu,

Je t'ai laissé ton bouton RESET pour faire joli mais, plus vraiment besoin puisque la macro fait tout toute seule, nettoyage et calcul.

La macro démarre sur un changement en [E7] = nom de la commune.

En [F9] et [F10] se trouvent les formules qui calculent les nombres limites de candidats CM et CC.

=MAX(1;ENT(E9*3/5))

A contrôler car pour les CC, tu parles dans ton post de 1/4 (formule) puis 3/4...

Private Sub Worksheet_Change(ByVal Target As Range)
'
If Not Intersect(Target, [E7]) Is Nothing Then
    Range("A15:A1000").Delete shift:=xlUp
    Range("E15:E1000").Delete shift:=xlUp
    If [E9] > 0 Then
        Range("A15").Value = 1
        Range("A15").DataSeries rowcol:=xlColumns, Step:=1, Stop:=[E9]
        With Range("A" & 14 + [F9]).Borders(xlEdgeBottom)
            .LineStyle = xlContinuous
            .Weight = xlMedium
            .ColorIndex = 3
        End With
    End If
    If [E10] > 0 Then
        Range("E15").Value = 1
        Range("E15").DataSeries rowcol:=xlColumns, Step:=1, Stop:=[E10]
        With Range("E" & 14 + [F10]).Borders(xlEdgeBottom)
            .LineStyle = xlContinuous
            .Weight = xlMedium
            .ColorIndex = 3
        End With
    End If
End If
'
End Sub

A+

Merci Curulis57! Ca fonctionne super!

Pour le 3/4, j'ai voulu prendre l'exemple si le chiffre obtenu en cellule e10= 3 alors j'applique la formule qui est E10/4 donc pour l'exemple 3/4.

Maintenant, si je veux ajouter dans la cellule à côté des bordures un texte. J'ai tenté de reprendre ta formule en la modifiant pour que, au lieu d'afficher la bordure, cela affiche du texte mais bon, j'arrive pas trop.

Ah oui, question bête. Tu m'as laissé le bouton RESET mais comment on le supprime? J'arrivais le faire avant puisque j'avais créé un bouton.

Salut trufu,

ta formule en la modifiant pour que, au lieu d'afficher la bordure, cela affiche du texte

J'avoue que, là, j'ai du mal à comprendre ce que tu veux!

Faudra ré-expliquer avec, au besoin, un fichier-exemple pour illustrer ta demande...

J'enlèverai le bouton "RESET" par la même occasion!

A+

Côté explication, c'est vrai que je peux mieux faire!

Par rapport à ce que tu m'as proposé, j'ai recopié la condition qui met une bordure dans la colonne E pour qu'elle s'applique aussi à la colonne A. Donc pour la formule =MAX(1;ENT(E10/4)), elle s'applique dans les deux colonnes ("A" et "E").

La formule =MAX(1;ENT(E9*3/5)) permet d'avoir une bordure uniquement dans la colonne A. Au final, j'aurais deux traits dans la colonne A et 1 seul dans la colonne E

Je voudrais que lorsque la macro s'applique, non seulement qu'elle ajoute les bordures (comme tu as réussis à le faire) mais également qu'une phrase "Limites candidats identiques" s'ajoute dans la colonne C à hauteur du trait qui correspond à la formule=MAX(1;ENT(E10/4)) soit la condition E(9)>0 dans ta vba. La même chose pour la formule=MAX(1;ENT(E9*3/5)) avec cette fois ci la phrase "Dernier candidat pour CC", qui s'ajoute dans la colonne C

Pour faire simple, lorsque les bordures s'affichent, la phrase correspondant à la bordure s'affiche également.

Je pense être clair...Après réflexion peut-être pas!

Voici le fichier test.

Merci

A++

2test.zip (16.35 Ko)

Euuuuuuhhhh...

A la réflexion, j'ai fait à l'inspiration après interprétation risquée et hasardeuse!

Comme disent les jeunes qui vont à l'examen sans étudier : "Au talent!"

Private Sub Worksheet_Change(ByVal Target As Range)
'
If Not Intersect(Target, [E7]) Is Nothing Then
    Range("A15:E1000").Delete shift:=xlUp
    If [E9] > 0 Then
        Range("A15").Value = 1
        Range("A15").DataSeries rowcol:=xlColumns, Step:=1, Stop:=[E9]
        With Range("A" & 14 + [F9]).Borders(xlEdgeBottom)
            .LineStyle = xlContinuous
            .Weight = xlMedium
            .ColorIndex = 3
        End With
    End If
    If [E10] > 0 Then
        Range("E15").Value = 1
        Range("E15").DataSeries rowcol:=xlColumns, Step:=1, Stop:=[E10]
        With Range("E" & 14 + [F10]).Borders(xlEdgeBottom)
            .LineStyle = xlContinuous
            .Weight = xlMedium
            .ColorIndex = 3
        End With
    End If
    If [F9] = [F10] Then
        Range("C" & 14 + [F9]).Value = "Limite candidats identique"
    Else
        Range("B" & 14 + [F9]).Value = "Limite candidats CM"
        Range("D" & 14 + [F10]).Value = "Limite candidats CC"
    End If
End If
'
End Sub

A+

3trufu.xlsm (24.10 Ko)

MERCI!! Ton talent est bien présent !:appl2:

C'est ce que je voulais. J'ai juste ajouté la condition qui applique le trait dans la colonne E, aussi à la colonne A.

Juste un point. J'ai vérifié sur toutes les communes et la condition qui applique un trait dans la colonne A fonctionne sauf pour la commune Z où le trait ne s'affiche pas. Je ne l'explique pas.

Qu'en penses-tu curulis57?

a+

Salut Trufu,

- j'imagine que c'est plutôt "CM"...

Range("C" & 14 + [F9]).Value = "Limite candidats CM"

- tu peux joindre les deux actions dans le même bloc IF...ENDIF...

    If [E10] > 0 Then
        Range("E15").Value = 1
        Range("E15").DataSeries rowcol:=xlColumns, Step:=1, Stop:=[E10]
        With Range("E" & 14 + [F10]).Borders(xlEdgeBottom)
            .LineStyle = xlContinuous
            .Weight = xlMedium
            .ColorIndex = 3
        End With
        With Range("A" & 14 + [F10]).Borders(xlEdgeBottom)
            .LineStyle = xlContinuous
            .Weight = xlMedium
            .ColorIndex = 3
        End With
    End If

Toutes les communes "fonctionnent".

A+

4trufu.xlsm (23.38 Ko)

Merci curulis57, tout fonctionne à merveille!

A+

Rechercher des sujets similaires à "ajouter bordure fonction resultat formule"