VBA - Tester une référence circulaire

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

E

Ecureuil

Guest
Bonjour à tous,

Je suis en train d'écrire un script qui ouvre un fichier Excel pour alimenter un autre fichier Excel. Je copie le contenu du premier fichier dans certaines zones du second fichier en utilisant la propiété FormulaR1C1. Mon code ressemble à :
For Ligne=0 To NbLignes-1
For Colonne=0 To NbColonnes-1
SheetDest.Cells(LigneDebDest+Ligne, ColDebDest+Colonne).NumberFormat = SheetOri.Cells(LigneDebOri+Ligne, ColDebOri+Colonne).NumberFormat
SheetDest.Cells(LigneDebDest+Ligne, ColDebDest+Colonne).FormulaR1C1 = SheetOri.Cells(LigneDebOri+Ligne, ColDebOri+Colonne).FormulaR1C1
Next
Next

SheetOri étant ma feuille Excel d'origine et SheetDest ma feuille Excel de destination.

Il se trouve que je ne recopie pas tout le temps l'intégralité des cellules de mon fichier d'origine dans mon fichier de destination. Du coup, certaines formules ne sont plus bonnes et Excel me sort un message comme quoi j'ai une référence circulaire.
Je comprends très bien pourquoi j'ai ce message mais je voudrais pouvoir déterminer quelles formules provoquent une référence circulaire afin de la remplacer par la valeur 'brute' de ma cellule d'origine en faisant un :
SheetDest.Cells(LigneDebDest+Ligne, ColDebDest+Colonne).Value = SheetOri.Cells(LigneDebOri+Ligne, ColDebOri+Colonne).Value

Quelqu'un aurait une petite idée ?

J'espère avoir été assez clair. Et merci à ceux qui ont eu le courage de me lire en entier 😉

Ecureuil
 
Bonsoir Ecureuil et jp14, bonsoir à toutes et à tous 🙂

Tu peux essayer d'ajouter un 'If Not Intersect...' dans ton code :

Dim CellDest As Range, CellOri As Range
' ...
For Ligne = 0 To NbLignes - 1
  For Colonne = 0 To NbColonnes - 1
    Set CellDest = SheetDest.Cells(LigneDebDest + Ligne, _
        ColDebDest + Colonne)
    Set CellOri = SheetOri.Cells(LigneDebOri + Ligne, _
        ColDebOri + Colonne)
    CellDest.NumberFormat = CellOri.NumberFormat
    CellDest.FormulaR1C1 = CellOri.FormulaR1C1
    If Not Intersect(CellDest, CellDest.Dependents) Is Nothing Then
      CellDest.Value = CellOri.Value
    End If
  Next Colonne
Next Ligne
' ...

Tiens-nous au courant 😉

A+
 
Merci à vous pour votre aide.

J'ai utilisé l'Intersect couplé au Dependents et ça fonctionne.
Il m'a fallu par contre rajouter une petite gestion d'erreur car Excel provoque une erreur lorsqu'une cellule n'a pas de dépendants. Mais le principal c'est que ça fonctionne 🙂

Ecureuil
 
- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
5
Affichages
911
Réponses
3
Affichages
879
Réponses
7
Affichages
987
Réponses
2
Affichages
1 K
Réponses
2
Affichages
822
D
Réponses
4
Affichages
1 K
Z
Réponses
3
Affichages
1 K
Zifox
Z
Réponses
1
Affichages
1 K
Retour