Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Probleme avec le code VBA by excel

8 réponses
Avatar
JLuc
Amis du soir, bonsoir,
J'ai un gros soucis avec un bout de code, excel reagi tres bizzarement.
J'ouvre un fichier word qui contient un objet excel, et je veux acceder
aux données de l'objet excel. J'ai ecris ceci :

oApp.ActiveDocument.InlineShapes(1).Activate
Set MyXL = oApp.ActiveDocument.InlineShapes(1).OLEFormat.Object
For x = 2 To MyXL.ActiveSheet.Range("A11").End(xlUp).Row
ActiveSheet.Range("C" & x - 1) = MyXL.ActiveSheet.Range("A" & x)
ActiveSheet.Range("D" & x - 1) = MyXL.ActiveSheet.Range("B" & x)
ActiveSheet.Range("E" & x - 1) = MyXL.ActiveSheet.Range("C" & x)
ActiveSheet.Range("F" & x - 1) = MyXL.ActiveSheet.Range("D" & x)
Next
oApp.ActiveDocument.Close False
oApp.Quit
Set oApp = Nothing
Set MyXL = Nothing

Lorsque je passe le code en mode pas a pas detaillé (F8), je recupere
bien les infos contenues dans l'objet excel. Par contre, si je lance la
macro en continu, je ne recupere rien de l'objet excel :-?
Quelqu'un pourrait eclairer ma lanterne ? Parce que là, je ne pige pas
du tout ce qui se passe :/

Merci pour vos reponses

--
____
( O | O )
--
_oooO_ JLuc _Oooo_

O-\O

8 réponses

Avatar
michdenis
Bonjour JLuc,

Avant de fermer ton application MyXl,
impose lui un délai minimum d'une ou
2 secondes ...


Application.Wait(Now + TimeValue("0:00:02"))
oApp.ActiveDocument.Close False


Salutations!


"JLuc" a écrit dans le message de news:
Amis du soir, bonsoir,
J'ai un gros soucis avec un bout de code, excel reagi tres bizzarement.
J'ouvre un fichier word qui contient un objet excel, et je veux acceder
aux données de l'objet excel. J'ai ecris ceci :

oApp.ActiveDocument.InlineShapes(1).Activate
Set MyXL = oApp.ActiveDocument.InlineShapes(1).OLEFormat.Object
For x = 2 To MyXL.ActiveSheet.Range("A11").End(xlUp).Row
ActiveSheet.Range("C" & x - 1) = MyXL.ActiveSheet.Range("A" & x)
ActiveSheet.Range("D" & x - 1) = MyXL.ActiveSheet.Range("B" & x)
ActiveSheet.Range("E" & x - 1) = MyXL.ActiveSheet.Range("C" & x)
ActiveSheet.Range("F" & x - 1) = MyXL.ActiveSheet.Range("D" & x)
Next
oApp.ActiveDocument.Close False
oApp.Quit
Set oApp = Nothing
Set MyXL = Nothing

Lorsque je passe le code en mode pas a pas detaillé (F8), je recupere
bien les infos contenues dans l'objet excel. Par contre, si je lance la
macro en continu, je ne recupere rien de l'objet excel :-?
Quelqu'un pourrait eclairer ma lanterne ? Parce que là, je ne pige pas
du tout ce qui se passe :/

Merci pour vos reponses

--
____
( O | O )
--
_oooO_ JLuc _Oooo_

O-O
Avatar
JLuc
*Bonjour michdenis*,
J'ai essayé la temporisation a 5 et 10 secondes, mais rien ne change :
memes effets. En pas a pas toujours ok mais pas en continu. J'ai meme
rajouté un Msgbox dans le For pour voir et j'obtients bien trois
message. Comme quoi je boucle au moins 3 fois. Mystère quand tu nous
tient ... Je joint le classeur et le document word, si quelqu'un a un
soupcon.
ATTENTION, le chemin du document word est en dur dans le code, donc a
modifier.
classeur : http://cjoint.com/?cxw1Msp2BW
doc word : http://cjoint.com/?cxw2ndrleU

Bonjour JLuc,

Avant de fermer ton application MyXl,
impose lui un délai minimum d'une ou
2 secondes ...


Application.Wait(Now + TimeValue("0:00:02"))
oApp.ActiveDocument.Close False


Salutations!


"JLuc" a écrit dans le message de news:
Amis du soir, bonsoir,
J'ai un gros soucis avec un bout de code, excel reagi tres bizzarement.
J'ouvre un fichier word qui contient un objet excel, et je veux acceder
aux données de l'objet excel. J'ai ecris ceci :

oApp.ActiveDocument.InlineShapes(1).Activate
Set MyXL = oApp.ActiveDocument.InlineShapes(1).OLEFormat.Object
For x = 2 To MyXL.ActiveSheet.Range("A11").End(xlUp).Row
ActiveSheet.Range("C" & x - 1) = MyXL.ActiveSheet.Range("A" & x)
ActiveSheet.Range("D" & x - 1) = MyXL.ActiveSheet.Range("B" & x)
ActiveSheet.Range("E" & x - 1) = MyXL.ActiveSheet.Range("C" & x)
ActiveSheet.Range("F" & x - 1) = MyXL.ActiveSheet.Range("D" & x)
Next
oApp.ActiveDocument.Close False
oApp.Quit
Set oApp = Nothing
Set MyXL = Nothing

Lorsque je passe le code en mode pas a pas detaillé (F8), je recupere
bien les infos contenues dans l'objet excel. Par contre, si je lance la
macro en continu, je ne recupere rien de l'objet excel :-?
Quelqu'un pourrait eclairer ma lanterne ? Parce que là, je ne pige pas
du tout ce qui se passe :/

Merci pour vos reponses



--
____
( O | O )
--
_oooO_ JLuc _Oooo_

O-O

Avatar
JLuc
*Bonjour JLuc*,
Desolé, c'etait pas le bon doc word (une seule ligne)
http://cjoint.com/?cxw6GLzRYn
Celui ci est le bon (trois lignes)

*Bonjour michdenis*,
J'ai essayé la temporisation a 5 et 10 secondes, mais rien ne change : memes
effets. En pas a pas toujours ok mais pas en continu. J'ai meme rajouté un
Msgbox dans le For pour voir et j'obtients bien trois message. Comme quoi je
boucle au moins 3 fois. Mystère quand tu nous tient ... Je joint le classeur
et le document word, si quelqu'un a un soupcon.
ATTENTION, le chemin du document word est en dur dans le code, donc a
modifier.
classeur : http://cjoint.com/?cxw1Msp2BW
doc word : http://cjoint.com/?cxw2ndrleU

Bonjour JLuc,

Avant de fermer ton application MyXl,
impose lui un délai minimum d'une ou
2 secondes ...


Application.Wait(Now + TimeValue("0:00:02"))
oApp.ActiveDocument.Close False


Salutations!


"JLuc" a écrit dans le message de news:
Amis du soir, bonsoir,
J'ai un gros soucis avec un bout de code, excel reagi tres bizzarement.
J'ouvre un fichier word qui contient un objet excel, et je veux acceder
aux données de l'objet excel. J'ai ecris ceci :

oApp.ActiveDocument.InlineShapes(1).Activate
Set MyXL = oApp.ActiveDocument.InlineShapes(1).OLEFormat.Object
For x = 2 To MyXL.ActiveSheet.Range("A11").End(xlUp).Row
ActiveSheet.Range("C" & x - 1) = MyXL.ActiveSheet.Range("A" & x)
ActiveSheet.Range("D" & x - 1) = MyXL.ActiveSheet.Range("B" & x)
ActiveSheet.Range("E" & x - 1) = MyXL.ActiveSheet.Range("C" & x)
ActiveSheet.Range("F" & x - 1) = MyXL.ActiveSheet.Range("D" & x)
Next
oApp.ActiveDocument.Close False
oApp.Quit
Set oApp = Nothing
Set MyXL = Nothing

Lorsque je passe le code en mode pas a pas detaillé (F8), je recupere
bien les infos contenues dans l'objet excel. Par contre, si je lance la
macro en continu, je ne recupere rien de l'objet excel :-?
Quelqu'un pourrait eclairer ma lanterne ? Parce que là, je ne pige pas
du tout ce qui se passe :/

Merci pour vos reponses




--
____
( O | O )
--
_oooO_ JLuc _Oooo_

O-O


Avatar
michdenis
Bonjour JLuc,

Essaie ceci :

'---------------------
Sub test()

Dim Oapp As Object, MyXL As Object
Set Oapp = CreateObject("word.application")

Oapp.documents.Open ("c:Fax.doc") ' à définir ...

Oapp.ActiveDocument.InlineShapes(1).Activate
Set MyXL = Oapp.ActiveDocument.InlineShapes(1).OLEFormat.Object
With MyXL.ActiveSheet
tblo = .Range("a1:E" & .Range("b65536").End(xlUp).Row).Value
End With
Oapp.ActiveDocument.Close False
Oapp.Quit
Set Oapp = Nothing: Set MyXL = Nothing
Worksheets("Feuil1").Range("c1").Resize(UBound(tblo, 1), UBound(tblo, 2)) = tblo

End Sub
'---------------------


Salutations !




"JLuc" a écrit dans le message de news:
*Bonjour JLuc*,
Desolé, c'etait pas le bon doc word (une seule ligne)
http://cjoint.com/?cxw6GLzRYn
Celui ci est le bon (trois lignes)

*Bonjour michdenis*,
J'ai essayé la temporisation a 5 et 10 secondes, mais rien ne change : memes
effets. En pas a pas toujours ok mais pas en continu. J'ai meme rajouté un
Msgbox dans le For pour voir et j'obtients bien trois message. Comme quoi je
boucle au moins 3 fois. Mystère quand tu nous tient ... Je joint le classeur
et le document word, si quelqu'un a un soupcon.
ATTENTION, le chemin du document word est en dur dans le code, donc a
modifier.
classeur : http://cjoint.com/?cxw1Msp2BW
doc word : http://cjoint.com/?cxw2ndrleU

Bonjour JLuc,

Avant de fermer ton application MyXl,
impose lui un délai minimum d'une ou
2 secondes ...


Application.Wait(Now + TimeValue("0:00:02"))
oApp.ActiveDocument.Close False


Salutations!


"JLuc" a écrit dans le message de news:
Amis du soir, bonsoir,
J'ai un gros soucis avec un bout de code, excel reagi tres bizzarement.
J'ouvre un fichier word qui contient un objet excel, et je veux acceder
aux données de l'objet excel. J'ai ecris ceci :

oApp.ActiveDocument.InlineShapes(1).Activate
Set MyXL = oApp.ActiveDocument.InlineShapes(1).OLEFormat.Object
For x = 2 To MyXL.ActiveSheet.Range("A11").End(xlUp).Row
ActiveSheet.Range("C" & x - 1) = MyXL.ActiveSheet.Range("A" & x)
ActiveSheet.Range("D" & x - 1) = MyXL.ActiveSheet.Range("B" & x)
ActiveSheet.Range("E" & x - 1) = MyXL.ActiveSheet.Range("C" & x)
ActiveSheet.Range("F" & x - 1) = MyXL.ActiveSheet.Range("D" & x)
Next
oApp.ActiveDocument.Close False
oApp.Quit
Set oApp = Nothing
Set MyXL = Nothing

Lorsque je passe le code en mode pas a pas detaillé (F8), je recupere
bien les infos contenues dans l'objet excel. Par contre, si je lance la
macro en continu, je ne recupere rien de l'objet excel :-?
Quelqu'un pourrait eclairer ma lanterne ? Parce que là, je ne pige pas
du tout ce qui se passe :/

Merci pour vos reponses




--
____
( O | O )
--
_oooO_ JLuc _Oooo_

O-O


Avatar
JLuc
*Bonjour michdenis*,
Ca Marche, merci de ton aide. Par contre, tu sais pourquoi excel reagi
de cette facon ?

Bonjour JLuc,

Essaie ceci :

'---------------------
Sub test()

Dim Oapp As Object, MyXL As Object
Set Oapp = CreateObject("word.application")

Oapp.documents.Open ("c:Fax.doc") ' à définir ...

Oapp.ActiveDocument.InlineShapes(1).Activate
Set MyXL = Oapp.ActiveDocument.InlineShapes(1).OLEFormat.Object
With MyXL.ActiveSheet
tblo = .Range("a1:E" & .Range("b65536").End(xlUp).Row).Value
End With
Oapp.ActiveDocument.Close False
Oapp.Quit
Set Oapp = Nothing: Set MyXL = Nothing
Worksheets("Feuil1").Range("c1").Resize(UBound(tblo, 1), UBound(tblo, 2)) =
tblo

End Sub
'---------------------


Salutations !




"JLuc" a écrit dans le message de news:
*Bonjour JLuc*,
Desolé, c'etait pas le bon doc word (une seule ligne)
http://cjoint.com/?cxw6GLzRYn
Celui ci est le bon (trois lignes)

*Bonjour michdenis*,
J'ai essayé la temporisation a 5 et 10 secondes, mais rien ne change : memes
effets. En pas a pas toujours ok mais pas en continu. J'ai meme rajouté un
Msgbox dans le For pour voir et j'obtients bien trois message. Comme quoi je
boucle au moins 3 fois. Mystère quand tu nous tient ... Je joint le classeur
et le document word, si quelqu'un a un soupcon.
ATTENTION, le chemin du document word est en dur dans le code, donc a
modifier.
classeur : http://cjoint.com/?cxw1Msp2BW
doc word : http://cjoint.com/?cxw2ndrleU

Bonjour JLuc,

Avant de fermer ton application MyXl,
impose lui un délai minimum d'une ou
2 secondes ...


Application.Wait(Now + TimeValue("0:00:02"))
oApp.ActiveDocument.Close False


Salutations!


"JLuc" a écrit dans le message de news:
Amis du soir, bonsoir,
J'ai un gros soucis avec un bout de code, excel reagi tres bizzarement.
J'ouvre un fichier word qui contient un objet excel, et je veux acceder
aux données de l'objet excel. J'ai ecris ceci :

oApp.ActiveDocument.InlineShapes(1).Activate
Set MyXL = oApp.ActiveDocument.InlineShapes(1).OLEFormat.Object
For x = 2 To MyXL.ActiveSheet.Range("A11").End(xlUp).Row
ActiveSheet.Range("C" & x - 1) = MyXL.ActiveSheet.Range("A" & x)
ActiveSheet.Range("D" & x - 1) = MyXL.ActiveSheet.Range("B" & x)
ActiveSheet.Range("E" & x - 1) = MyXL.ActiveSheet.Range("C" & x)
ActiveSheet.Range("F" & x - 1) = MyXL.ActiveSheet.Range("D" & x)
Next
oApp.ActiveDocument.Close False
oApp.Quit
Set oApp = Nothing
Set MyXL = Nothing

Lorsque je passe le code en mode pas a pas detaillé (F8), je recupere
bien les infos contenues dans l'objet excel. Par contre, si je lance la
macro en continu, je ne recupere rien de l'objet excel :-?
Quelqu'un pourrait eclairer ma lanterne ? Parce que là, je ne pige pas
du tout ce qui se passe :/

Merci pour vos reponses





--
____
( O | O )
--
_oooO_ JLuc _Oooo_

O-O



Avatar
michdenis
Bonjour JLuc,

| tu sais pourquoi excel reagi de cette facon ?

Tu ne l'aimes pas ma solution ? ;-)

Tu peux toujours modifier ta proposition originale comme ceci :

En ouvrant l'objet OleObject qui est un classeur Excel, le document
actif est bien le classeur actif que tu as ouvert et non ton classeur où
origine ta macro... il te manquait seulement la référence à ThisWorkbook
pour que tes données s'inscrive dans ta feuille.

Voilà !

'-----------------------------
Sub print_var()

Set Oapp = CreateObject("word.application")
Oapp.documents.Open ("c:Fax.doc")
Oapp.ActiveDocument.InlineShapes(1).Activate
Set MyXL = Oapp.ActiveDocument.InlineShapes(1).OLEFormat.Object
For x = 2 To MyXL.ActiveSheet.Range("A11").End(xlUp).Row
With ThisWorkbook
.ActiveSheet.Range("C" & x - 1).Value = MyXL.ActiveSheet.Range("A" & x).Value
.ActiveSheet.Range("D" & x - 1).Value = MyXL.ActiveSheet.Range("B" & x).Value
.ActiveSheet.Range("E" & x - 1).Value = MyXL.ActiveSheet.Range("C" & x).Value
.ActiveSheet.Range("F" & x - 1).Value = MyXL.ActiveSheet.Range("D" & x).Value
End With
Next
Oapp.ActiveDocument.Close False
Oapp.Quit
Set Oapp = Nothing: Set MyXL = Nothing

End Sub
'-----------------------------


Salutations!




"JLuc" a écrit dans le message de news:
*Bonjour michdenis*,
Ca Marche, merci de ton aide. Par contre, tu sais pourquoi excel reagi
de cette facon ?

Bonjour JLuc,

Essaie ceci :

'---------------------
Sub test()

Dim Oapp As Object, MyXL As Object
Set Oapp = CreateObject("word.application")

Oapp.documents.Open ("c:Fax.doc") ' à définir ...

Oapp.ActiveDocument.InlineShapes(1).Activate
Set MyXL = Oapp.ActiveDocument.InlineShapes(1).OLEFormat.Object
With MyXL.ActiveSheet
tblo = .Range("a1:E" & .Range("b65536").End(xlUp).Row).Value
End With
Oapp.ActiveDocument.Close False
Oapp.Quit
Set Oapp = Nothing: Set MyXL = Nothing
Worksheets("Feuil1").Range("c1").Resize(UBound(tblo, 1), UBound(tblo, 2)) > tblo

End Sub
'---------------------


Salutations !




"JLuc" a écrit dans le message de news:
*Bonjour JLuc*,
Desolé, c'etait pas le bon doc word (une seule ligne)
http://cjoint.com/?cxw6GLzRYn
Celui ci est le bon (trois lignes)

*Bonjour michdenis*,
J'ai essayé la temporisation a 5 et 10 secondes, mais rien ne change : memes
effets. En pas a pas toujours ok mais pas en continu. J'ai meme rajouté un
Msgbox dans le For pour voir et j'obtients bien trois message. Comme quoi je
boucle au moins 3 fois. Mystère quand tu nous tient ... Je joint le classeur
et le document word, si quelqu'un a un soupcon.
ATTENTION, le chemin du document word est en dur dans le code, donc a
modifier.
classeur : http://cjoint.com/?cxw1Msp2BW
doc word : http://cjoint.com/?cxw2ndrleU

Bonjour JLuc,

Avant de fermer ton application MyXl,
impose lui un délai minimum d'une ou
2 secondes ...


Application.Wait(Now + TimeValue("0:00:02"))
oApp.ActiveDocument.Close False


Salutations!


"JLuc" a écrit dans le message de news:
Amis du soir, bonsoir,
J'ai un gros soucis avec un bout de code, excel reagi tres bizzarement.
J'ouvre un fichier word qui contient un objet excel, et je veux acceder
aux données de l'objet excel. J'ai ecris ceci :

oApp.ActiveDocument.InlineShapes(1).Activate
Set MyXL = oApp.ActiveDocument.InlineShapes(1).OLEFormat.Object
For x = 2 To MyXL.ActiveSheet.Range("A11").End(xlUp).Row
ActiveSheet.Range("C" & x - 1) = MyXL.ActiveSheet.Range("A" & x)
ActiveSheet.Range("D" & x - 1) = MyXL.ActiveSheet.Range("B" & x)
ActiveSheet.Range("E" & x - 1) = MyXL.ActiveSheet.Range("C" & x)
ActiveSheet.Range("F" & x - 1) = MyXL.ActiveSheet.Range("D" & x)
Next
oApp.ActiveDocument.Close False
oApp.Quit
Set oApp = Nothing
Set MyXL = Nothing

Lorsque je passe le code en mode pas a pas detaillé (F8), je recupere
bien les infos contenues dans l'objet excel. Par contre, si je lance la
macro en continu, je ne recupere rien de l'objet excel :-?
Quelqu'un pourrait eclairer ma lanterne ? Parce que là, je ne pige pas
du tout ce qui se passe :/

Merci pour vos reponses





--
____
( O | O )
--
_oooO_ JLuc _Oooo_

O-O



Avatar
JLuc
michdenis avait soumis l'idée :
Tu ne l'aimes pas ma solution ? ;-)


Mais si, mais si, il est meeeerveeeiiilllleux ! :')
Non, la seule question que je me pose, c'est pourquoi ca marche en pas
a pas et pas en continu. C'est juste pour ma culture personnelle. Par
contre, je vais tester cette derniere methode dès ce soir :-)

--
JLuc

Avatar
michdenis
| c'est pourquoi ca marche en pas a pas et pas en continu

Quand tu arrêtes ta procédure sur chaque ligne de code, tu
redonne le focus(classeur actif) sur le classeur où la macro
est écrite par le fait même sur "l'activesheet" ce n'est pas
vrai lorsque la macro s'exécute en continue !


Salutations!


"JLuc" a écrit dans le message de news:
michdenis avait soumis l'idée :
Tu ne l'aimes pas ma solution ? ;-)


Mais si, mais si, il est meeeerveeeiiilllleux ! :')
Non, la seule question que je me pose, c'est pourquoi ca marche en pas
a pas et pas en continu. C'est juste pour ma culture personnelle. Par
contre, je vais tester cette derniere methode dès ce soir :-)

--
JLuc