Macro de compilation + erreur ref

Bonjour !

Je suis novice sur ce forum (et uuuun peu novice en excel...) alors tout d'abord un grand bonjour à tous !

J'ai un petit problème pour faire cohabiter une formule et une macro.

En fait j'ai un ensemble de classeurs ("recueils des besoins") avec des données, et un classeur "récap" avec la jolie macro ci-dessous pour compiler toutes mes données.

Elle ronronne comme un chaton, sauf pour une colonne qui sort une erreur "REF",, du coup je cherche un workaround.

La colonne R de la plage de données à copier contient en effet la formule suivante : =SI($A27="";"";"$A$7").

Je vois bien que c'est cette référence à la cellule A7 des classeurs source qui ne passe pas dans mon récap, mais je ne vois pas comment l'obtenir autrement... à moins de trouver comment faire copier/coller cette cellule par la macro si la ligne contient des données ? mais du coup quelle syntaxe ?

si vous avez des idées je suis absolument preneuse !

Voici la macro, et en PJ un exemple des classeurs à compiler :

Sub RECAP()

Dim WkRecap As Workbook

Dim WkMensuel As Workbook

Set WkRecap = ThisWorkbook

Range("A2").

Chemin = "C:\mon dossier ou sont tous les classeurs a compiler\"

fichier = Dir(Chemin & "*.xl*") '

Do While fichier <> ""

Set WkMensuel = Workbooks.Open(Filename:=Chemin & fichier)

WkMensuel.Worksheets("Recueil").Select

ActiveSheet.Unprotect ""

Range("A27:S39").Copy

WkRecap.ActiveSheet.Paste

WkMensuel.Activate

Application.CutCopyMode = False

WkMensuel.Close savechanges:=False

WkRecap.ActiveSheet.Cells(WkRecap.ActiveSheet.UsedRange.Rows.Count + 1, 1).Select

fichier = Dir ' Fichier suivant

Loop

Range("A1:A65536").SpecialCells(xlCellTypeBlanks).EntireRow.Delete

End Sub

Bonjour

Cette formule vient du classeur source ou simplement une formule qui calcul en fonction des données reprises dans le classeur Recap ?

De plus, dans votre code pourquoi copiez-vous A27 à S39 alors que votre dernière colonne est la colonne R.

En fonction de ces deux points, ne deviez vous pas copier de A27 à Q39 ?? et ajouter cette formule au fur et à mesure de l'importation des données ?

Cordialement

Bonjour !

Merci de cette réponse,

Pour la plage c'est un simple petit oubli dans l'anonymisation du classeur...

La formule vient du classeur source. Le fonctionnement est le suivant :

  • l'utilisateur qui doit remplir le classeur renseigne sa structure
  • les lignes 11 à 22 lui indiquent en fonction de cela ce qu'il avait demandé pour l'année dernière
  • les lignes 26 à 39 lui permettent de renseigner ses besoins pour l'année suivante

La formule sert donc à rappeler dans les lignes 26 à 39 le nom de la structure sans que l'utilisateur ait à les remettre, comme ca la structure apparaît dans le récap des besoins de toutes les structures (sinon une fois les classeurs compilés on ne sait plus qui a demandé quoi)

RE

Ok j'avais plus ou moins imaginé le mode de fonctionnement

Donc la formule en colonne R ne doit pas être importée des classeurs source vers le classeur RECAP.. juste ?

Si justement. Enfin soit la colonne R soit la cellule A7 du recueil source...

En fait il faut que dans ma compilation je dispose de l'info qui se trouve dans cette cellule

Merci beaucoup pour ton temps !

Re

Désolé mais ce n'est pas clair.

Mettons un exemple :

  • Classeur Recap, en A7 vous avez le mot STRUCTURE 2, en A27 vous avez votre formule SI
  • Classeur Source, en A7 vous avez le mot STRUCTURE 3, en A27 vous avez votre formule SI avec le mot STRUCTURE 3

Vous importez votre plage A27 à Rxx depuis le classeur Source. Que devez-vous avoir en Recap dans la cellule A27 avec votre formule SI ???

Bonjour,

La cellule A27 n'est pas en cause.

Le doc joint montre la cellule A7, en rouge, et la colonne R où l'info est reprise, en rouge aussi. L'idée est d'avoir le nom de la structure reporté sur chaque ligne, pour qu'il soit repris dans chaque ligne lors de la compilation. Ca fait doublon mais c'est le seul moyen que j'ai trouvé...

Re

Essayez avec ce code

Sub RECAP()
Dim WkRecap As Workbook
Dim WkMensuel As Workbook
Dim chemin As String, fichier As String
Dim ligne As Integer, dlg As Integer

Set WkRecap = ThisWorkbook
ligne = 27
chemin = "C:\mon dossier ou sont tous les classeurs a compiler\"
fichier = Dir(chemin & "*.xl*") '
Do While fichier <> ""
Set WkMensuel = Workbooks.Open(Filename:=chemin & fichier)
With WkMensuel.Worksheets("Recueil")
    .Range("A27:S39").Copy WkRecap.ActiveSheet.Range("A" & ligne)
    .Range("A7").Copy WkRecap.ActiveSheet.Range("R" & ligne)

    dlg = WkRecap.ActiveSheet.Range("A" & WkRecap.ActiveSheet.Rows.Count).End(xlUp).Row
    WkRecap.ActiveSheet.Range("R" & ligne).Copy WkRecap.ActiveSheet.Range("R" & ligne + 1 & ":R" & dlg)
   .Close savechanges:=False
   ligne = WkRecap.ActiveSheet.Cells(WkRecap.ActiveSheet.UsedRange.Rows.Count + 1, 1).Row + 1
End With
fichier = Dir ' Fichier suivant
Loop
'Range("A1:A65536").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub

Cordialement

Bonjour,

Toutes mes excuses pour ma réponse tardive ! Les projets se sont un peu enchaînés... Merci beaucoup beaucoup pour votre temps, j'essaie tout de suite !

Bonne journée

Ca marche ! Merci merci merci !

Je clos le sujet du coup !

Bonjour

Pas de souci pour votre retour tardif.

Une petite info, pour clore un sujet, cliquez sur le petit v en haut à droite de la fenetre.

Je l'ai fait pour ce fil

Cordialement

Rechercher des sujets similaires à "macro compilation erreur ref"