Mise en forme conditionnelle avancé VBA

Résolu/Fermé
Adrien - 31 janv. 2023 à 15:23
yg_be Messages postés 22802 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 21 mai 2024 - 2 févr. 2023 à 09:17

Bonjour,

Je souhaite faire une mise en forme conditionnelle "avancé" en VBA.

J'ai un tableau ou je veux séparer d'un trait épais dès que la valeur de la donnée de la cellule précédente de ma première colonne n'est plus la même.(trait épais sur le haut de la cellule A2:L2 si A2<>A1 même chose sur A3:L3 si A3<>A2 ,etc...)

J'arrive à m'en sortir avec une mise en forme conditionnelle traditionnel mais je n'ai pas autant d'options qu'en VBA car je ne peux pas faire de trait d'épaisseur standard alors que mon tableau a déjà des bordures de ce type partout donc il faut que je puisse mettre des bordures plus épaisses pour m'y retrouver.

Merci pour votre aide
Windows / Chrome 109.0.0.0

1 réponse

Adirien Messages postés 84 Date d'inscription samedi 11 mai 2013 Statut Membre Dernière intervention 27 janvier 2024 2
Modifié le 1 févr. 2023 à 17:26

Bonjour,

Finalement j'ai trouvé par moi même. Certainement pas la façon la plus adroite de faire mais c'est le résultat qui compte, je bricole le VBA plus que je ne le maitrise mais j'arrive à faire des choses c'est déjà ça :

Sub Test()

Dim nbrl As Integer
Dim nom As String
Dim Position As Integer
Position = 1
nom = ActiveSheet.Name
i = 0
nbrl = Application.WorksheetFunction.CountA(Sheets(nom).Range("$A:$A"))

'Boucle
Do Until i = nbrl
Set MaPlage = Columns("A:L").Rows(Position + 1)
If Sheets(nom).Range("A" & Position).Value <> Sheets(nom).Range("A" & (Position + 1)).Value Then
MaPlage.Borders(xlEdgeTop).Weight = xlMedium

End If

Position = Position + 1
i = i + 1
Loop

End Sub
0
yg_be Messages postés 22802 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 21 mai 2024 1 468
1 févr. 2023 à 19:48

bonjour,

L'écriture est un peu lourde, mais l'approche me semble correcte.

  1. Tu n'as pas besoin de deux compteurs, i et Position.
  2. Il est utile d'ajouter "option explicit" en début de module, ce qui te force à déclarer toutes tes variables.
  3. Il est prudent d'utiliser long et pas integer pour les numéros de lignes.
  4. le "set maplage" peut être déplacé à l'intérieur du "if"
  5. dans le set maplage, il est prudent d'ajouter "Sheets(nom)." devant "Columns".
1
Adirien > yg_be Messages postés 22802 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 21 mai 2024
1 févr. 2023 à 20:59

Merci pour ces suggestions.

Pour le point n°1 tu veux surment dire que je peux supprimer le compteur i mais à condition que ma boucle se termine d'elle même par une condition du type répéter la boucle jusqu'à une cellule vide. Car la en l'état m'a boucle se répète selon le comptage du nombre de lignes que contient le tableau.

0
yg_be Messages postés 22802 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 21 mai 2024 1 468 > Adirien
2 févr. 2023 à 09:17

Un seul compteur suffit, tu n'as pas besoin de i et de Position.  Tu peux utiliser Position dans le test de fin de boucle.

0