Microsoft 365 VBA - Tester si une cellule est pointée par une formule - Antécédent

  • Initiateur de la discussion Initiateur de la discussion guigol
  • 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 !

guigol

XLDnaute Junior
Bonjour,

Je cherche, je creuse, et je ne trouve pas.

J'ai à analyser plusieurs dizaines de fichiers truffés de formules.
J'ai identifié un certain nombre de cellules qui doivent contenir des formules.
et un certain nombre qui doivent être pointée par des formules.

printscreen.png


Pour les premières, pas de souci : --> si HasFormula renvoie True --> OK
Ici B3 me renvoie True

Par contre, pour les secondes, comment faire avec une macro?

j'aimerais que D4 me renvoie True et D6 aussi.
J'aimerais que D8 me renvoie False.

En sachant que mes fichiers contiennent plusieurs feuilles, et que les cellules peuvent être pointées par des formules positionnées sur d'autres feuilles.

Une idée?
 
Dernière édition:
Bonjour Guigol,
Dans Formules vous avez Repérer les antécédents.
donc pointez sur une cellule, cliquez sur Repérer les antécédents et XL vous montre les cellules qui interviennent sur la formule. Si une cellule vient d'une autre page XL vous l'indique avec un symbole de page.
Et vous avez pareil pour les dépendants, c'est à dire toutes les cellules qui utilisent la cellule que vous avez pointé.
Vous avez aussi Affiche les formules qui peut être bien pratique.
 
Effectivement, ce n'est pas un détail. Et ça limite beaucoup les solutions.
Je ne sais même pas s'il en existe une.
Pour des calculs simples, on pourrait faire la somme des nombres de la page.
Pour chaque cellule qui contient un nombre, sauvegarder ce nombre, mettre la cellule à zéro, refaire la somme de la matrice plus la valeur sauvegardée, on devrait trouver la même somme si cette valeur n'est pas utilisée. Puis remettre la valeur.
Mais quid des fonctions complexes comme SI ...
Il ne reste alors que l'analyse syntaxique, mais à c'est une autre histoire.
 
Bonjour,

Quelque chose comme ça :
VB:
Sub Cellulesformules()
Dim cellules As Range, Aire As Range, cel As Range
On Error Resume Next
Set cellules = ActiveSheet.UsedRange.SpecialCells(xlCellTypeFormulas, 23)
On Error GoTo 0
For Each Aire In cellules.Areas
    For Each cel In Aire
        Debug.Print "Cellule Examinée: " & cel.Address(), cel.Parent.Name
        Afficher cel, True
        Afficher cel, False
    Next
Next
End Sub

Sub Afficher(cellule As Range, Optional Dependantes As Boolean = True)
    Dim plage As Range, cel As Range
    On Error GoTo FIN
    If Dependantes Then Set plage = cellule.Dependents Else Set plage = cellule.Precedents
 
    Debug.Print , IIf(Dependantes, "Dépendantes:", "Précédentes:")
    For Each cel In plage
        Debug.Print , cel.Address(), cel.Parent.Name
    Next
FIN:
On Error GoTo 0
End Sub

Il y a aussi les objets DirectDependents et DirectPrecedents... Je vous laisse peaufiner à votre besoin
 

Pièces jointes

- 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

Retour