VBA - Tester une référence circulaire

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
 

Charly2

Nous a quittés en 2006
Repose en paix
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+
 
E

Ecureuil

Guest
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
 

Discussions similaires

Statistiques des forums

Discussions
312 305
Messages
2 087 070
Membres
103 454
dernier inscrit
Marion devaux