Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[VBA] Calcul des dépendants sur plusieurs feuilles

5 réponses
Avatar
HD
Bonjour,

Sur mon classeur, en calcul manuel, dans l'événement
Workbook_SheetChange j'utilise le calcul des dépendants afin de
permettre d'avoir un minimum de calcul tout en ayant le calcul manuel.
Le souci est que Dependents.Calculate ne me calcule que les cellules
dépendantes de la feuille sur laquelle je fais ma modif... Y'a-t-il
moyen de répercuter le calcul des dépendants sur tous les dépendants de
ma cellule quelque soit la feuille sur laquelle se trouve les dépendants
?

Merci d'avance,

Pour votre aide,

@+
HD


---
L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast.
http://www.avast.com

5 réponses

Avatar
HD
Bonjour,

Personne n'a d'idées ? ou ça n'est pas faisable ?

@+
HD


---
L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast.
http://www.avast.com
Avatar
MichD
Bonjour,

L'aide d'Excel est très explicit :

Range.Dependents, propriété (Excel)

Remarques
"dépendants" propriété ne fonctionne que sur l'active feuille et ne peut pas
suivre les références distantes.


Cet exemple montre comment sélectionner les dépendants de la cellule A1 de
la feuille Sheet1.
Worksheets("Sheet1").Activate
Range("A1").Dependents.Select


Dans le ThisWorkbook, tu peux utiliser l'événement suivant

'----------------------------------------
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Sh.Calculate
End Sub
'----------------------------------------

Peu importe la feuille que tu as à l'écran, tu es certain que les formules
de la feuille active ont été évaluées.
Avatar
HD
L'aide d'Excel est très explicit :
Range.Dependents, propriété (Excel)
Remarques
"dépendants" propriété ne fonctionne que sur l'active feuille et ne
peut pas suivre les références distantes.


Dommage...

Cet exemple montre comment sélectionner les dépendants de la
cellule A1 de la feuille Sheet1.
Worksheets("Sheet1").Activate
Range("A1").Dependents.Select


Et y'a-t-il la possibilité en VBA d'avoir la liste des dépendants d'une
cellule que ces dépendants se trouvent sur la feuille ou sur une autre
feuille ?

Lorsque l'on utilise le bouton "Formules / Repérer les dépendants" l'on
voit un symbole nous indiquant qu'il y'a des dépendants extérieurs à la
feuille active.

@+
HD


---
L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast.
http://www.avast.com
Avatar
MichD
En VBA, on peut utiliser quelque chose comme ceci :

Dans l'aide, consulte cette méthode "NavigateArrow", dans ces paramètres, tu
peux
déterminer soit les précédents ou les dépendants.

Cela fait très longtemps que je n'ai pas utilisé ceci et je n'ai pas
d'exemple en tête...où déjà fait sur ce sujet. Est-ce que cela t'aide!
Le code est commenté en français!

Attention, il se peut que le service de messagerie effectue des coupures
intempestives!


'--------------------------------------------------------------------------------------
Sub Constituer_les_précédents() 'Ou dépendants

'adaptation d'une procédure (FindPrecedents)
'written by Bill Manville, revised by Paul S.
'mpep, August 14, 2001
'Cette procédure détermine les cellules ( y.c dans un autre fichier
et y.c si un nom
'de plage a été donné) d'une cellule contenant une formule

Dim rLast As Range, iLinkNum As Integer, iArrowNum As Integer
Dim bNewArrow As Boolean, tabladdress()
Dim nbaddress

Set cell = ActiveCell
'Application.ScreenUpdating = False
cell.Select
ActiveCell.ShowPrecedents
Set rLast = cell
iArrowNum = 1
iLinkNum = 1
bNewArrow = True

'on entre de toute façon une 1ere fois dans la boucle
Do
Do
Application.Goto rLast
'pour se prémunir d'une référence à
'une cellule d'un classeur fermé
'et aussi terminer le processus s'il n'y a pas de nouvelle flèche
On Error Resume Next
'Navigatearrow fait se déplacer l'activation vers le range
'Source l 'un après l'autre si 'on porte TowardPrecedent:=True
'sinon si on met false c'est vers le dépendent
ActiveCell.NavigateArrow TowardPrecedent:=True,
ArrowNumber:=iArrowNum, LinkNumber:=iLinkNum
'si erreur on sort
If Err.Number > 0 Then Exit Do
On Error GoTo 0

'à l'issue de la 2eme boucle boucle si l'addresse en cours est
adresse
'de la cellule contenant la formule,il faut donc sortir. On compare
les addresses
'complètes pour eviter de confondre p.e Feuil1!$A$1 avec !$A$1
'il vaut mieux mettre selection que ActiveCell car si
ActiveCell.NavigateArrow TowardPrecedent
'renvoie une plage de cellules ( ex:
recherchev(C4;toto;1;FAUX)renvoie vers uen plage
'de cellules nommée toto, alors selection renverra l'addresse
complète tandis que
'activecell renverra seulement la 1ere cellule de la plage toto
If rLast.Address(external:=True) =
ActiveCell.Address(external:=True) Then Exit Do
If rLast.Address(external:=True) = Selection.Address(external:=True)
Then Exit Do
nbaddress = nbaddress + 1
ReDim Preserve tabladdress(1 To nbaddress)
tabladdress(nbaddress) = ActiveCell.Address(external:=True)
bNewArrow = False 'remise à False pour la 1ere boucle Do pour quand
on va sortir
'on ne soit pas éjecté de la 1ere boucle Do. Cette ejection ne
'doit se produire que si err.number était <>0
iLinkNum = iLinkNum + 1 ' Essai d'un nouveau lien sur la même
flèche
Loop
If bNewArrow Then Exit Do 'si err.number était <> 0 , on sort
iLinkNum = 1 'on remet le lien à 1 puisqu'on va attaquer une autre
flèche
bNewArrow = True
iArrowNum = iArrowNum + 1 'essai autre flèche
Loop

rLast.Parent.ClearArrows 'on efface toutes les flèches
Application.Goto rLast 'on retourne à la cellule contenant la formule
'une fois que l'on a constitué le tableau tabladdress, il suffit de le
parcourir
'pour conniatre les addresses exactes des cellules
'If bNewArrow Then Exit Sub
'au cas où il n'y ait pas du tout de formules ca planterait avec la boucle
for suivante
'tester avant si tabaddress contient des éléments autrement plantage
'de Application.Goto Range(tabladdress(1))
For i = LBound(tabladdress) To UBound(tabladdress)
MsgBox tabladdress(i)
Next
'si on veut s'y rendre p.e à la 1ere addresse
Application.Goto Range(tabladdress(1))
End Sub
'--------------------------------------------------------------------------------------

"HD" a écrit dans le message de groupe de discussion :
md93ap$k0b$

L'aide d'Excel est très explicit :
Range.Dependents, propriété (Excel)
Remarques
"dépendants" propriété ne fonctionne que sur l'active feuille et ne peut
pas suivre les références distantes.


Dommage...

Cet exemple montre comment sélectionner les dépendants de la
cellule A1 de la feuille Sheet1.
Worksheets("Sheet1").Activate
Range("A1").Dependents.Select


Et y'a-t-il la possibilité en VBA d'avoir la liste des dépendants d'une
cellule que ces dépendants se trouvent sur la feuille ou sur une autre
feuille ?

Lorsque l'on utilise le bouton "Formules / Repérer les dépendants" l'on
voit un symbole nous indiquant qu'il y'a des dépendants extérieurs à la
feuille active.

@+
HD


---
L'absence de virus dans ce courrier électronique a été vérifiée par le
logiciel antivirus Avast.
http://www.avast.com
Avatar
HD
En VBA, on peut utiliser quelque chose comme ceci :
Dans l'aide, consulte cette méthode "NavigateArrow",
dans ces paramètres, tu peux déterminer soit les
précédents ou les dépendants.


Intéressant.

Cela fait très longtemps que je n'ai pas utilisé ceci et je n'ai pas
d'exemple en tête...où déjà fait sur ce sujet. Est-ce que cela t'aide!
Le code est commenté en français!


Merci pour la piste.

Attention, il se peut que le service de messagerie effectue des
coupures intempestives!


Effectivement.


Pour les dépendants, j'ai modifié une fonction trouvé sur le net qui me
donne la liste des dépendants (ci-dessous). Je vais voir pour l'adapter
à ce que je cherche à faire, calculer les dépendants des autres
feuilles... encore faut il que cela ne soit pas trop lourd...


Function HasOtherDependentSheet(Acell As Range) As Boolean
Dim rLast As Range, iLinkNum As Integer, iArrowNum As Integer
Dim stMsg As String
Dim bNewArrow As Boolean
Application.ScreenUpdating = False
ActiveCell.ShowDependents
Set rLast = Acell
iArrowNum = 1
iLinkNum = 1
bNewArrow = True
Do
Do
Application.Goto rLast
On Error Resume Next
ActiveCell.NavigateArrow TowardPrecedent:úlse,
ArrowNumber:=iArrowNum, LinkNumber:=iLinkNum
If Err.Number > 0 Then Exit Do
On Error GoTo 0
If rLast.Address(external:=True) =
ActiveCell.Address(external:=True) Then Exit Do
bNewArrow = False
If rLast.Worksheet.Parent.Name =
ActiveCell.Worksheet.Parent.Name Then
If rLast.Worksheet.Name = ActiveCell.Parent.Name Then
' local
stMsg = stMsg & vbNewLine & Selection.Address
Else
stMsg = stMsg & vbNewLine & "'" & Selection.Parent.Name
& "'!" & Selection.Address
End If
Else
' external
stMsg = stMsg & vbNewLine &
Selection.Address(external:=True)
End If
iLinkNum = iLinkNum + 1 ' try another link
Loop
If bNewArrow Then Exit Do
iLinkNum = 1
bNewArrow = True
iArrowNum = iArrowNum + 1 'try another arrow
Loop
rLast.Parent.ClearArrows
Application.Goto rLast
MsgBox "Dependents are" & stMsg

HasOtherDependentSheet = InStr(1, stMsg, "!") > 0
End Function

@+
HD


---
L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast.
http://www.avast.com