Cellule fusionnée et xlEdgeRight

Cellule fusionnée et xlEdgeRight - VB/VBA/VBS - Programmation

Marsh Posté le 18-12-2012 à 16:49:47    

Bonjour à tous,
 
J'ai besoin de repérer les bordures droites des cellules et je ne sais pas pourquoi j'arrive à les repérer sur les cellules simples mais je n'arrive pas à les repérer sur les cellules fusionnées.
 
Ex : je lance la macro suivante sans succès
 
Sub Macro1()
If Not Cells(1, 1).Borders(xlEdgeRight).LineStyle = xlNone Then Cells(1, 1) = "Test" & Cells(1, 1).Value
End Sub
 
Au contraire, cela marche pour toutes les autres bordures et les cellules non fusionnées. Je précise que je ne peux pas dé-fusionner ces cellules pour le bon fonctionnement de ma macro.

Reply

Marsh Posté le 18-12-2012 à 16:49:47   

Reply

Marsh Posté le 18-12-2012 à 17:18:09    

 
              Avec la propriété MergeArea (voir l'aide de VBA) cela devrait aller …
 

Reply

Marsh Posté le 18-12-2012 à 17:53:19    

Merci Marc,
 
J'ai trouvé une solution certainement pas la plus simple mais bon ça marche; cela consiste à repérer les cellules fusionnées dont la cellule juste à côté a une bordure gauche
 
If Cells(i, j).MergeArea.Columns.Count > 1 And Not Cells(i, Cells(i, j).MergeArea.Columns.Count + 1).Borders(xlEdgeLeft).LineStyle = xlNone Then Cells(i, j) = "Test" & Cells(i, j).Value

Reply

Marsh Posté le 18-12-2012 à 20:21:12    

 
               Et pourquoi ne pas tester directement sur  Cells(i,j).MergeArea  ?
 

Code :
  1.     If Cells(i, j).Address = Cells(i, j).MergeArea(1).Address And _
  2.        Cells(i, j).MergeArea.Borders(xlEdgeRight).LineStyle <> xlNone Then _
  3.        Cells(i, j) = "Test" & Cells(i, j).Value


               Le test de la première ligne ne sert qu'à éviter de refaire plusieurs fois l'affectation sur le même groupe de cellules fusionnées,
               j'ai supposé qu'il s'agissait d'une boucle …
 
               Et cela fonctionne aussi pour une cellule non fusionnée car le test s'effectue sur l'adresse de la première cellule de MergeArea,
               donc la cellule elle-même !
 
               S'il y a beaucoup de ligne à traiter, mettre en début de code  Application.ScreenUpdating = False  accélère le traitement.


Message édité par Marc L le 18-12-2012 à 20:30:39
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed