#ref!

julius

XLDnaute Nouveau
bonjour à tous

En cas de #ref! dans la Cellule Bi de ma feuille "résultats", je souhaite ouvrir le fichier nommé dans la cellule Ai de la meme feuille. (cf doc joint)
voivi le code auquel j'ai pensé........et qui ne marche pas......

merci pour vos lumières


Sub nc()
'

'
Dim i As Integer

Nblignes = [A65536].End(xlUp).Row


Windows("synthèse.xls").Activate
Sheets("résultats").Select

For i = 4 To Nblignes
If Range("B" & i).Value = "#REF!" Then

Workbooks.Open Filename:="L:\service\enquêtesatisfaction\A&i&.xls"
Range("A1").Select
Selection.Copy

Windows("synthèse.xls").Activate
Sheets("liaisons").Select
Range("F" & i).Select
ActiveSheet.Paste


End If
Next i

End Sub
 

Fichiers joints

Dernière édition:

Excel_lent

XLDnaute Impliqué
Re : #ref!

Salut,

à tester :
Code:
Sub nc()
Dim i As Integer

Nblignes = [A65536].End(xlUp).Row
Windows("synthèse.xls").Activate
Sheets("résultats").Select
   For i = 4 To Nblignes
     [COLOR=Red]On Error GoTo erreur
     If Range("B" & i).Value = False Then GoTo erreur[/COLOR]
   Next i
  Exit Sub
[COLOR=Red]erreur:[/COLOR]
    Workbooks.Open Filename:="L:\service\enquêtesatisfaction\A&i&.xls"
    Range("A1").Select
    Selection.Copy
    
    Windows("synthèse.xls").Activate
    Sheets("liaisons").Select
    Range("F" & i).Select
        ActiveSheet.Paste
    
    End If
  
End Sub

@+
 

wilfried_42

XLDnaute Barbatruc
Re : #ref!

Bonjour julius, excel_lent

"L:\service\enquêtesatisfaction\A&i&.xls "
si j'ai compris ->
"L:\service\enquêtesatisfaction\A" & i & ".xls"
on racourcit :
Range("A1").Select
Selection.Copy

Windows("synthèse.xls").Activate
Sheets("liaisons").Select
Range("F" & i).Select
ActiveSheet.Paste
devient :

Range("A1").Copy destination:=Workbooks("synthèse.xls").Sheets("liaisons").Range("F" & i)
je n'arrive jamais à me reppeler s'il y a un S ou pas, à tester avec et sans

Le but : Pas de select, pas d'activate, Gain de temps, on est toujours positionné sur le 2eme fichier on peut si besoin le fermer (ce qui me parrait logique selon la structure de la macro)

Thisworkbook.close false
False --> sans sauvegarde

Structure générale de la macro

Sub nc()
'

'
Dim i As Long ' le nombre de ligne pouvant dépasser la limite des integer


Nblignes = Sheets("résultats").[A65536].End(xlUp).Row
' Je ne sais pas si tu es sur la bonne feuille puisque tu la selectionne apres

' Ouverture du fichier avant la boucle pour ne pas avoir à l'ouvrir chaque fois
Workbooks.Open Filename:="L:\service\enquêtesatisfaction\A" & i & ".xls"

' La boucle de controle
For i = 4 To Nblignes
If Range("B" & i).Value = "#REF!" Then

' La macro de copie pour le s j'ai toujours une incertitude
Range("A1").Copy destination:=Workbooks("synthèse.xls").Sheets("liaisons").Range("F" & i)

end if
next i

' Enfin fermeture du fichier --> sans sauvegarde puisque n'a éré utilisé qu'en lecture
Thisworkbook.close false

end sub
 
Dernière édition:

julius

XLDnaute Nouveau
Re : #ref!

Bonjour wilfried_42, bonjour Excel_lent

merci pour votre aide
je teste tout ça

Julius
 

julius

XLDnaute Nouveau
Re : #ref!

re bonjour

en mixant vos 2 reponses voilà ce qui pourrait donner la macro

Sub nc()
Dim i As Long


Windows("synthèse.xls").Activate
Sheets("résultats").Select
Nblignes = [A65536].End(xlUp).Row

For i = 4 To Nblignes
On Error GoTo erreur
If Range("B" & i).Value = False Then GoTo erreur
Next i
Exit Sub
erreur:

Workbooks.Open Filename:="L:\service\enquêtesatisfaction\A" & i & ".xls"

Range("A1").Copy Destination:=Workbooks("synthèse.xls").Sheets("liaisons").Range("F" & i)


End Sub

seul probleme si i=20 excel recherche le fichier A20.xls et non le nom de fichier contenu dans la cellule A20 de ma feuille résultats

comment faire ?

Encore merci pour les astuces et les notes détaillées
 

wilfried_42

XLDnaute Barbatruc
Re : #ref!

re:

Workbooks.Open Filename:="L:\service\enquêtesatisfaction\A" & i & ".xls"
devient:
Workbooks.Open Filename:="L:\service\enquêtesatisfaction\" & range("A" & i).value & ".xls"

en Rouge si l'extension n'est pas precisée dans la cellule
 

julius

XLDnaute Nouveau
Re : #ref!

re

merci pour tes préciseuses precisions wilfried_42
la macro tourne
seul probleme, la boucle s'arrete dès la 1ere erreur trouvée.

de plus, est il possible au travers du copier coller de creer une liaison entre le fichier synthèse et le fichier excel (ouvert par la macro) ? En l'état, la macro fait un copier en valeur.
 

wilfried_42

XLDnaute Barbatruc
Re : #ref!

re:

Personnellement, je ne comprends pas trop ta macro,
le on error goto erreur, le if then goto erreur

Un peti fichier serait interressant ?

en attendant je vois plutot la boucle comme cela

Code:
For i = 4 To Nblignes
If Range("B" & i).Value = "#REF!" Then
Workbooks.Open Filename:="L:\service\enquêtesatisfaction\" & range("A" & i).value & ".xls"
Range("A1").Copy destination:=Workbooks("synthèse.xls").Sheets("liaisons").Range("F" & i)
ThisWorkbook.close false
end if
next i
Maintenant avec le on error goto

Code:
For i = 4 To Nblignes
on error goto erreur
If Range("B" & i).Value = False Then GoTo erreur else  goto suite
erreur:
Workbooks.Open Filename:="L:\service\enquêtesatisfaction\" & range("A" & i).value & ".xls"
Range("A1").Copy destination:=Workbooks("synthèse.xls").Sheets("liaisons").Range("F" & i)
ThisWorkbook.close false
suite:
on error goto 0 ' Toujours rendre le controle à Excel
next i
 

julius

XLDnaute Nouveau
Re : #ref!

bonjour Wilfried_42

je ne maitrise pas bien les
on error goto erreur, le if then goto erreur

mon but est, pour chaque fichier qui me renvoie un message d'erreur dans la 1ere macro de créer une liaison avec mon fichier de synthèse grace à un copier /coller (je n'ai rien trouver d'autre...)

donc:
si #ref dans le fichier de synthèse
ouvre le fichier désigné en colonne A
prendre une cellule de ce fichier
le coller dans la feuille liaison du fichier de synthèse

cf doc joint

(à défaut de mieux)

j'ai cherché sur le forum de quoi mettre les liaisons à jour .....sans résultat.

merci pour ton aide
 

Fichiers joints

julius

XLDnaute Nouveau
Re : #ref!

bonjour à tous

je m'en suis sorti avec la macro suivante (sans doute perfectible):

Sub lien()
Dim i As Long
Dim wb As Workbook


Windows("synthèse.xls").Activate
Sheets("résultats").Select
Nblignes = [A65536].End(xlUp).Row

' La boucle de controle
For i = 4 To Nblignes
On Error GoTo erreur
If Range("B" & i).Value = False Then GoTo erreur Else GoTo suite

' La macro de copie
erreur:
Workbooks.Open Filename:="L:\service\enquêtesatisfaction\annee_en_cours\" & Range("A" & i).Value
Range("A1").Copy


Windows("synthèse.xls").Activate
Sheets("liaisons").Select
Range("F" & i).Select
ActiveSheet.Paste Link:=True


suite:
On Error GoTo 0 '

Next i

For Each wb In Workbooks
If wb.Name <> "synthèse.xls" Then wb.Close SaveChanges:=False
Next wb

End Sub



en rouge: correspond au copier/collage spécial/coller avec liaison


merci à Wilfried_42 et à Excel_lent pour votre aide.

Julius
 

Discussions similaires


Haut Bas