toutes mes plates excuses, j'avais oublié de mettre Sheets("Feuil1")
For Each c In Wk.Sheets("Feuil1").Range("A1:G12")
Denis, ça fonctionne du tonnerre, un gros merci cela va m’éviter cette opération à la mimine et comme j'ai beaucoup de tableau à lire sur les pdf, c'est un temps précieux économisé big bisou* isabelle
toutes mes plates excuses,
j'avais oublié de mettre Sheets("Feuil1")
For Each c In Wk.Sheets("Feuil1").Range("A1:G12")
Denis, ça fonctionne du tonnerre, un gros merci cela va m’éviter cette opération
à la mimine
et comme j'ai beaucoup de tableau à lire sur les pdf, c'est un temps précieux
économisé
big bisou*
isabelle
toutes mes plates excuses, j'avais oublié de mettre Sheets("Feuil1")
For Each c In Wk.Sheets("Feuil1").Range("A1:G12")
Denis, ça fonctionne du tonnerre, un gros merci cela va m’éviter cette opération à la mimine et comme j'ai beaucoup de tableau à lire sur les pdf, c'est un temps précieux économisé big bisou* isabelle
MichD
Il y a différentes manières d'ouvrir directement un fichier PDF avec Excel... bien sûr, il y a des entourloupettes!!!
malheureusement ces méthodes se sont pas applicable de mon cas, j'ai différent tableau à lire sur le même fichier pdf et ces tableau n'ont pas la même structure.
ta macro fait bien mon affaire, il ne reste qu'un petit point obscur à démêler lors de la lecture des Wk, le classeur "Feuil1" est lu 2 fois voir la fenêtre d’exécution : http://cjoint.com/?DLic6CKY0j7
au deuxième passage cela cause un erreur sur cette ligne Wk.Close SaveChanges:úlse vu qu'au 1er passage le classeur a été fermé.
en ajoutant On Error Resume Next ça résout le problème mais je me demandait si il y avait une autre solution.
isabelle
Le 2014-12-07 22:21, MichD a écrit :
Il y a différentes manières d'ouvrir directement un fichier PDF avec Excel... bien sûr, il y a des entourloupettes!!!
malheureusement ces méthodes se sont pas applicable de mon cas,
j'ai différent tableau à lire sur le même fichier pdf et ces tableau n'ont pas
la même structure.
ta macro fait bien mon affaire, il ne reste qu'un petit point obscur à démêler
lors de la lecture des Wk, le classeur "Feuil1" est lu 2 fois
voir la fenêtre d’exécution : http://cjoint.com/?DLic6CKY0j7
au deuxième passage cela cause un erreur sur cette ligne
Wk.Close SaveChanges:úlse
vu qu'au 1er passage le classeur a été fermé.
en ajoutant
On Error Resume Next
ça résout le problème mais je me demandait si il y avait une autre solution.
isabelle
Le 2014-12-07 22:21, MichD a écrit :
Il y a différentes manières d'ouvrir directement un fichier PDF avec Excel...
bien sûr, il y a des entourloupettes!!!
malheureusement ces méthodes se sont pas applicable de mon cas, j'ai différent tableau à lire sur le même fichier pdf et ces tableau n'ont pas la même structure.
ta macro fait bien mon affaire, il ne reste qu'un petit point obscur à démêler lors de la lecture des Wk, le classeur "Feuil1" est lu 2 fois voir la fenêtre d’exécution : http://cjoint.com/?DLic6CKY0j7
au deuxième passage cela cause un erreur sur cette ligne Wk.Close SaveChanges:úlse vu qu'au 1er passage le classeur a été fermé.
en ajoutant On Error Resume Next ça résout le problème mais je me demandait si il y avait une autre solution.
isabelle
Le 2014-12-07 22:21, MichD a écrit :
Il y a différentes manières d'ouvrir directement un fichier PDF avec Excel... bien sûr, il y a des entourloupettes!!!
| lors de la lecture des Wk, le classeur "Feuil1" est lu 2 fois **** Je ne comprends pas ce que tu essaies de faire... pourquoi lire 2 fois le même fichier?
Un fichier exemple.
Il y a plus rapide pour copier des données d'un tableau qu'une boucle. Dans ce fichier, le classeur ouvert dans l'autre instance est fermé sans enregistrement et cette instance d'Excel est aussi fermée.
Adapte le nom des objets et surtout celle-ci au début de la procédure
targetWB.name = "Classeur1" ' toi tu devrais avoir : targetWB.name = "Feuil1"
http://cjoint.com/?DLisqhhK80V
| lors de la lecture des Wk, le classeur "Feuil1" est lu 2 fois
**** Je ne comprends pas ce que tu essaies de faire... pourquoi lire 2 fois
le même fichier?
Un fichier exemple.
Il y a plus rapide pour copier des données d'un tableau qu'une boucle.
Dans ce fichier, le classeur ouvert dans l'autre instance est fermé sans
enregistrement et cette instance d'Excel est aussi fermée.
Adapte le nom des objets et surtout celle-ci au début de la procédure
targetWB.name = "Classeur1" ' toi tu devrais avoir : targetWB.name =
"Feuil1"
| lors de la lecture des Wk, le classeur "Feuil1" est lu 2 fois **** Je ne comprends pas ce que tu essaies de faire... pourquoi lire 2 fois le même fichier?
Un fichier exemple.
Il y a plus rapide pour copier des données d'un tableau qu'une boucle. Dans ce fichier, le classeur ouvert dans l'autre instance est fermé sans enregistrement et cette instance d'Excel est aussi fermée.
Adapte le nom des objets et surtout celle-ci au début de la procédure
targetWB.name = "Classeur1" ' toi tu devrais avoir : targetWB.name = "Feuil1"
http://cjoint.com/?DLisqhhK80V
isabelle
re bonjour Denis,
au premier test ça fonctionne parfaitement, les données sont transférées, le classeur et l'application sont fermés, je sélectionne Cogniview et crée un nouveau classeur "Feuil1" j’exécute la macro et là j'ai l'erreur d'Automation L'objet invoqué s'est déconnecté de ses client. j’appuie sur le bouton fin de cette fenêtre d'erreur, j’exécute à nouveau la macro et là ça fonctionne si je continue le problème apparait en alternance 1 fois sur 2
isabelle
re bonjour Denis,
au premier test ça fonctionne parfaitement, les données sont transférées, le
classeur et l'application sont fermés,
je sélectionne Cogniview et crée un nouveau classeur "Feuil1"
j’exécute la macro et là j'ai l'erreur d'Automation L'objet invoqué s'est
déconnecté de ses client.
j’appuie sur le bouton fin de cette fenêtre d'erreur,
j’exécute à nouveau la macro et là ça fonctionne
si je continue le problème apparait en alternance 1 fois sur 2
au premier test ça fonctionne parfaitement, les données sont transférées, le classeur et l'application sont fermés, je sélectionne Cogniview et crée un nouveau classeur "Feuil1" j’exécute la macro et là j'ai l'erreur d'Automation L'objet invoqué s'est déconnecté de ses client. j’appuie sur le bouton fin de cette fenêtre d'erreur, j’exécute à nouveau la macro et là ça fonctionne si je continue le problème apparait en alternance 1 fois sur 2
isabelle
MichD
Voici le test que j'ai réalisé avec succès. Je n'ai pas ton environnement, mais je crée par macro une instance d'Excel et j'y inscris des données (quelconque) à 3 reprises. Pour chacune de ces 3 instances, j'appelle la macro dont j'ai légèrement la ligne de déclaration pour y introduire un paramètre soit le nom du fichier Get_Workbook_Another_Instance(NomFichier As String)
J'ai aussi ajouté à cette procédure "Get_Workbook_Another_Instance(NomFichier As String)" la ligne de code suivante afin de m’assurer que les objets avaient libéré la mémoire : Set Wk = Nothing: Set objApp = Nothing . Cette ligne de code est à la fin de la procédure.
Ce test doit se rapprocher de ce que tu essaies de faire... tout fonctionne correctement durant l'exécution de la procédure.
'----------------------------------------------------------------------------------- Sub test()
Dim Xl As Excel.Application, Wb As Workbook Dim A As Long
For A = 1 To 3 Set Xl = CreateObject("Excel.application") Xl.Visible = True Set Wb = Xl.Workbooks.Add Wb.Worksheets("Feuil1").Range("A1:A10") = 1 Get_Workbook_Another_Instance Wb.name Set Xl = Nothing: Set Wb = Nothing Next
End Sub
'----------------------------------------------------------------------------------- Sub Get_Workbook_Another_Instance(NomFichier As String) Dim targetWB As TargetWBType, Rg As Range, T As Variant
targetWB.name = NomFichier 'Nom du fichier que tu recherches
Call GetAllWorkbookWindowNames(targetWB)
If Not Wk Is Nothing Then 'Tu as une variable Workbook(WK) à partir duquel tu peux 'extraire les données du fichier de l'autre instance. 'Copie dans une variable T, le tableau de la feuille à extraire T = Wk.Worksheets("Feuil1").Range("A1:D25")
'Détermine où tu veux copier les données, Nom feuille est plage 'de cellules à adapter... Set Rg = ThisWorkbook.Worksheets("Feuil1").Range("A1")
Application.ScreenUpdating = False Application.EnableEvents = False 'Ajoute les données de la varible à la plage que tu as déterminé. Rg.Resize(UBound(T, 1), UBound(T, 2)) = T Application.EnableEvents = True Application.ScreenUpdating = True
'pour fermer le classeur sans enregistrement Wk.Close False 'pour fermer l'instance d'Excel où est ouvert Wk objApp.Quit Set Wk = Nothing: Set objApp = Nothing Else MsgBox "Fichier non trouvé." End If End Sub '-----------------------------------------------------------------------------------
"isabelle" a écrit dans le message de groupe de discussion : m64rrf$o0g$
re bonjour Denis,
au premier test ça fonctionne parfaitement, les données sont transférées, le classeur et l'application sont fermés, je sélectionne Cogniview et crée un nouveau classeur "Feuil1" j’exécute la macro et là j'ai l'erreur d'Automation L'objet invoqué s'est déconnecté de ses client. j’appuie sur le bouton fin de cette fenêtre d'erreur, j’exécute à nouveau la macro et là ça fonctionne si je continue le problème apparait en alternance 1 fois sur 2
isabelle
Voici le test que j'ai réalisé avec succès. Je n'ai pas ton environnement,
mais je crée par macro une instance d'Excel et j'y inscris des données
(quelconque) à 3 reprises. Pour chacune de ces 3 instances, j'appelle la
macro dont j'ai légèrement la ligne de déclaration pour y introduire un
paramètre soit le nom du fichier
Get_Workbook_Another_Instance(NomFichier As String)
J'ai aussi ajouté à cette procédure
"Get_Workbook_Another_Instance(NomFichier As String)" la ligne de code
suivante afin de m’assurer que les objets avaient libéré la mémoire : Set
Wk = Nothing: Set objApp = Nothing . Cette ligne de code est à la fin de la
procédure.
Ce test doit se rapprocher de ce que tu essaies de faire... tout fonctionne
correctement durant l'exécution de la procédure.
'-----------------------------------------------------------------------------------
Sub test()
Dim Xl As Excel.Application, Wb As Workbook
Dim A As Long
For A = 1 To 3
Set Xl = CreateObject("Excel.application")
Xl.Visible = True
Set Wb = Xl.Workbooks.Add
Wb.Worksheets("Feuil1").Range("A1:A10") = 1
Get_Workbook_Another_Instance Wb.name
Set Xl = Nothing: Set Wb = Nothing
Next
End Sub
'-----------------------------------------------------------------------------------
Sub Get_Workbook_Another_Instance(NomFichier As String)
Dim targetWB As TargetWBType, Rg As Range, T As Variant
targetWB.name = NomFichier 'Nom du fichier que tu recherches
Call GetAllWorkbookWindowNames(targetWB)
If Not Wk Is Nothing Then
'Tu as une variable Workbook(WK) à partir duquel tu peux
'extraire les données du fichier de l'autre instance.
'Copie dans une variable T, le tableau de la feuille à extraire
T = Wk.Worksheets("Feuil1").Range("A1:D25")
'Détermine où tu veux copier les données, Nom feuille est plage
'de cellules à adapter...
Set Rg = ThisWorkbook.Worksheets("Feuil1").Range("A1")
Application.ScreenUpdating = False
Application.EnableEvents = False
'Ajoute les données de la varible à la plage que tu as déterminé.
Rg.Resize(UBound(T, 1), UBound(T, 2)) = T
Application.EnableEvents = True
Application.ScreenUpdating = True
'pour fermer le classeur sans enregistrement
Wk.Close False
'pour fermer l'instance d'Excel où est ouvert Wk
objApp.Quit
Set Wk = Nothing: Set objApp = Nothing
Else
MsgBox "Fichier non trouvé."
End If
End Sub
'-----------------------------------------------------------------------------------
"isabelle" a écrit dans le message de groupe de discussion :
m64rrf$o0g$1@speranza.aioe.org...
re bonjour Denis,
au premier test ça fonctionne parfaitement, les données sont transférées, le
classeur et l'application sont fermés,
je sélectionne Cogniview et crée un nouveau classeur "Feuil1"
j’exécute la macro et là j'ai l'erreur d'Automation L'objet invoqué s'est
déconnecté de ses client.
j’appuie sur le bouton fin de cette fenêtre d'erreur,
j’exécute à nouveau la macro et là ça fonctionne
si je continue le problème apparait en alternance 1 fois sur 2
Voici le test que j'ai réalisé avec succès. Je n'ai pas ton environnement, mais je crée par macro une instance d'Excel et j'y inscris des données (quelconque) à 3 reprises. Pour chacune de ces 3 instances, j'appelle la macro dont j'ai légèrement la ligne de déclaration pour y introduire un paramètre soit le nom du fichier Get_Workbook_Another_Instance(NomFichier As String)
J'ai aussi ajouté à cette procédure "Get_Workbook_Another_Instance(NomFichier As String)" la ligne de code suivante afin de m’assurer que les objets avaient libéré la mémoire : Set Wk = Nothing: Set objApp = Nothing . Cette ligne de code est à la fin de la procédure.
Ce test doit se rapprocher de ce que tu essaies de faire... tout fonctionne correctement durant l'exécution de la procédure.
'----------------------------------------------------------------------------------- Sub test()
Dim Xl As Excel.Application, Wb As Workbook Dim A As Long
For A = 1 To 3 Set Xl = CreateObject("Excel.application") Xl.Visible = True Set Wb = Xl.Workbooks.Add Wb.Worksheets("Feuil1").Range("A1:A10") = 1 Get_Workbook_Another_Instance Wb.name Set Xl = Nothing: Set Wb = Nothing Next
End Sub
'----------------------------------------------------------------------------------- Sub Get_Workbook_Another_Instance(NomFichier As String) Dim targetWB As TargetWBType, Rg As Range, T As Variant
targetWB.name = NomFichier 'Nom du fichier que tu recherches
Call GetAllWorkbookWindowNames(targetWB)
If Not Wk Is Nothing Then 'Tu as une variable Workbook(WK) à partir duquel tu peux 'extraire les données du fichier de l'autre instance. 'Copie dans une variable T, le tableau de la feuille à extraire T = Wk.Worksheets("Feuil1").Range("A1:D25")
'Détermine où tu veux copier les données, Nom feuille est plage 'de cellules à adapter... Set Rg = ThisWorkbook.Worksheets("Feuil1").Range("A1")
Application.ScreenUpdating = False Application.EnableEvents = False 'Ajoute les données de la varible à la plage que tu as déterminé. Rg.Resize(UBound(T, 1), UBound(T, 2)) = T Application.EnableEvents = True Application.ScreenUpdating = True
'pour fermer le classeur sans enregistrement Wk.Close False 'pour fermer l'instance d'Excel où est ouvert Wk objApp.Quit Set Wk = Nothing: Set objApp = Nothing Else MsgBox "Fichier non trouvé." End If End Sub '-----------------------------------------------------------------------------------
"isabelle" a écrit dans le message de groupe de discussion : m64rrf$o0g$
re bonjour Denis,
au premier test ça fonctionne parfaitement, les données sont transférées, le classeur et l'application sont fermés, je sélectionne Cogniview et crée un nouveau classeur "Feuil1" j’exécute la macro et là j'ai l'erreur d'Automation L'objet invoqué s'est déconnecté de ses client. j’appuie sur le bouton fin de cette fenêtre d'erreur, j’exécute à nouveau la macro et là ça fonctionne si je continue le problème apparait en alternance 1 fois sur 2
isabelle
isabelle
right on, merci Denis, isabelle
Le 2014-12-08 14:18, MichD a écrit :
J'ai aussi ajouté à cette procédure "Get_Workbook_Another_Instance(NomFichier As String)" la ligne de code suivante afin de m’assurer que les objets avaient libéré la mémoire : Set Wk = Nothing: Set objApp = Nothing .
right on,
merci Denis,
isabelle
Le 2014-12-08 14:18, MichD a écrit :
J'ai aussi ajouté à cette procédure "Get_Workbook_Another_Instance(NomFichier As
String)" la ligne de code suivante afin de m’assurer que les objets avaient
libéré la mémoire : Set Wk = Nothing: Set objApp = Nothing .
J'ai aussi ajouté à cette procédure "Get_Workbook_Another_Instance(NomFichier As String)" la ligne de code suivante afin de m’assurer que les objets avaient libéré la mémoire : Set Wk = Nothing: Set objApp = Nothing .