XL 2021 VBA - Visualiser les références circulaires

  • Initiateur de la discussion Initiateur de la discussion Dudu2
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Dudu2

XLDnaute Barbatruc
Bonjour,

Je modifie le sujet...

Excel affiche les flèches des références circulaires quand il en a envie.
Sur la dernière référence circulaire de la dernière feuille si j'en crois ce que je vois.
Je n'ai pas trouvé dans le ruban un bouton pour le faire.

Comment contrôler la zone sur laquelle Excel dessine les flèches des références circulaires ?

Merci par avance.
 
Dernière édition:
Solution
Bonjour,

Finalement j'ai modifié le code pour trouver le même résultat qu'Excel, comme ça pas de discussion.

Non seulement je peux afficher les flèches Excel où je veux et en plus je sais retrouver par avance les cellules Excel de TOUTES les références circulaires. Pas belle la vie ?
Bonjour.
Comment récupérer le contenu de cette fenêtre ?
VB:
Option Explicit
Private ClnCirc As Collection, CelRef As Range
Sub Test()
   Dim Cel As Range, TRapport() As String, N As Integer
   Set ClnCirc = New Collection
   Set CelRef = ActiveSheet.CircularReference
   If CelRef Is Nothing Then
      MsgBox "Pas de référence circulaire.", vbInformation
   Else
      PrécédentCirc
      ReDim TRapport(1 To ClnCirc.Count)
      For Each Cel In ClnCirc
         N = N + 1: TRapport(N) = Cel.Address(False, False, External:=True)
         Next Cel
      MsgBox "Circulaires :" & vbLf & Join(TRapport, vbLf), vbExclamation
      End If
   End Sub
Function PrécédentCirc(Optional ByVal Cel As Range) As Boolean
   Dim CelPr As Range, RngPr As Range
   If CelRef Is Nothing Then Exit Function
   If Cel Is Nothing Then Set Cel = CelRef: ClnCirc.Add Cel, Key:=Cel.Address(False, False, External:=True)
   On Error Resume Next
   Set RngPr = Cel.DirectPrecedents
   If Err Then Exit Function
   On Error GoTo 0
   If RngPr Is Nothing Then Exit Function
   For Each CelPr In RngPr
      If CelPr.Address(External:=True) = CelRef.Address(External:=True) Then PrécédentCirc = True: Exit For
      If PrécédentCirc(CelPr) Then PrécédentCirc = True: Exit For
      Next CelPr
   If PrécédentCirc Then
      On Error Resume Next
      ClnCirc.Add Cel, Key:=Cel.Address(External:=True), Before:=1
      End If
   End Function
 
Hou-la, la destruction en règle !
1750067887212.gif

Chez moi ça fait ce que je veux et chez un de mes "utilisateurs" aussi. C'est d'ailleurs pour lui que j'ai dû le faire.

Ce sont bien des références circulaires dont les cellules sont exactement prè-identifiées par mon code à l'endroit que je choisis et vérifiées par les flèches d'Excel qui ne viennent pas de Cupidon et qui sont positionnées toujours par mon code à l'endroit que je choisis. 100% contrôle.

Donc tout va bien.
1750068372566.gif


USF.gif
 
Dernière édition:
@Dranreb,

Tu m'as déjà fait découvrir qu'il existe une propriété Range.DirectPrecedents ce qui, si je l'avais su, m'aurait évité de devoir faire un fonction qui fait la même chose. Je corrige donc mon code du Post #11.

Cependant, ton affaire souffre du même handicap que le code de @patricktoulon, car il part de ActiveSheet.CircularReference.
Ça pose 3 problèmes lorsqu'il y a plusieurs références circulaires dans la feuille:
  1. Comme pour les flèches, Excel choisit la référence circulaire qui lui plait (soit disant la 1ère - par rapport à quoi ?)
    Dans cet exemple, on voit qu'il prend la 2ème, pas la 1ère.

  2. Tu ne peux pas aller plus loin et découvrir les autres références circulaires.
    Edit: sauf peut-être à "détruire" temporairement celle trouvée pour tenter de trouver le suivante.

  3. Tu ne peux pas choisir la zone où tu veux voir la ou les références circulaires car c'est Excel qui choisit.
C'est pour ça que j'ai dû faire un code qui cherche les références circulaires sur toutes les cellules à formules (soit de la feuille soit de la zone sélectionnée), et on en trouve pas mal, puis les éliminer lorsqu'elles se recoupent.

1750076421609.png
 
Dernière édition:
Bah! on ne les collectionne pas en général, les références circulaires ! On résout la première qui se présente !
Toutefois on peut partir d'une cellule imposée, ça ne devrait pas poser de problème. PrécédentCirc devrait retourner False s'il n'y en a pas.
 
Si tu le fais sur plusieurs cellules d'une zone, PrécédentCirc va t'en retourner plusieurs fois, et pas seulement sur les cellules identifiées sur ActiveSheet.CircularReference. Car d'autres cellules peuvent croiser le chemin de cette boucle sur les tableaux "complexes" rouges.
Sur une série de cellules il faudra les éliminer. J'allais le faire sur ton code mais je dois couper. Donc plus tard si tu ne l'as pas fait.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
1
Affichages
794
Retour