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

mise au point d'une dll travaillant sur Excel

11 réponses
Avatar
PM
Bonjour !

Je me suis mis à cette dll.
Quelques adaptations du code Excel VBA sont nécessaires.
La dll semble exiger la définition complète de l'objet. Donc, pas de
sheets(3). select
cells(1,1).select
mais oSheet.activate et oSheet.cells(1,1) etc.

D'où deux questions additionnelles :

1. existe-t-il une façon intelligente de débugger ? Ce matin, j'ai travaillé
bestialement dans MonProjetDll.vbp, en compilant la dll, puis en ouvrant
Excel, en faisant l'essai, en refermant Excel (pour pouvoir compiler à
l'étape suivante), et en progrssant pas à pas avec des exit sub pour
déterminer où ça plante... C'est pas génial génial.

2. pourquoi n'aime-t-il pas oSheet.select et accepte-t-il oSheet.activate ??

Merci !

10 réponses

1 2
Avatar
Gloops
PM a écrit, le 05/11/2004 10:13 :
Bonjour !

Je me suis mis à cette dll.
Quelques adaptations du code Excel VBA sont nécessaires.
La dll semble exiger la définition complète de l'objet. Donc, pas de
sheets(3). select
cells(1,1).select
mais oSheet.activate et oSheet.cells(1,1) etc.


...
2. pourquoi n'aime-t-il pas oSheet.select et accepte-t-il oSheet.activate ??

Merci !




Bonjour,

La création de DLL il va falloir que je m'y mette (d'ailleurs avant d'en
arriver là j'ai un fil en cours sur le plantage d'une routine graphique,
qui n'a pas l'air d'inspirer grand-monde).

Cela étant, même en développant sous Excel, j'ai toujours sélectionné
une feuille avec Activate. Même au départ de la feuille de débuguage,
Select ne donne rien de bon. ça doit être une méthode qui était prévue
pour être utilisée dans un cas précis, ou tout simplement qui a été
appliquée à une collection d'objets dans laquelle il se trouvait qu'il
y avait Worksheet, mais dans la pratique pour une feuille il vaut mieux
Activate.

C'est comme ça, comme je le rabâchais il n'y a pas longtemps dans le
newsgroup, l'ordre normal des opérations, c'est :
Workbook.Activate
Worksheet.Activate
Range.Select

Avant cela il peut y avoir la sélection de l'application avec AppActivate.

Si tu veux tu peux même écrire une fonction pour ça.

Public Function Selectionner(Sele As Range) As Boolean
On Error Goto ErrSelectionner
Selectionner = True

Sele.Parent.Parent.Activate 'Workbook
Sele.Parent.Activate 'Worksheet
Sele.Select 'Range
Exit Function
ErrSelectionner:
Selectionner = False
End Function

Set Feuil = Workbooks("Test.xls").WorkSheets("Feuil1")
If Not Selectionner(Feuil.Range("A1")) Then MsgBox "Gourré"

Tiens c'est vrai je n'ai jamais essayé, une fonction comme ça.
Tu as bien fait de poser la question, à l'occasion j'essaierai.
Avatar
ng
SAlut,

Tu n'es pas obligé de compiler, il suffit de cliquer sur la bouton "lecture"
de ton projet dll et elle sera utilisable ds excel sans etre compilée et
pourra etre debuggée depuis vb.

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/

PM wrote:
Bonjour !

Je me suis mis à cette dll.
Quelques adaptations du code Excel VBA sont nécessaires.
La dll semble exiger la définition complète de l'objet. Donc, pas de
sheets(3). select
cells(1,1).select
mais oSheet.activate et oSheet.cells(1,1) etc.

D'où deux questions additionnelles :

1. existe-t-il une façon intelligente de débugger ? Ce matin, j'ai
travaillé bestialement dans MonProjetDll.vbp, en compilant la dll,
puis en ouvrant Excel, en faisant l'essai, en refermant Excel (pour
pouvoir compiler à l'étape suivante), et en progrssant pas à pas avec
des exit sub pour déterminer où ça plante... C'est pas génial génial.

2. pourquoi n'aime-t-il pas oSheet.select et accepte-t-il
oSheet.activate ??
Merci !


Avatar
Gloops
Il y a un bouton "Lecture" ?

ng a écrit, le 05/11/2004 23:23 :

SAlut,

Tu n'es pas obligé de compiler, il suffit de cliquer sur la bouton "lecture"
de ton projet dll et elle sera utilisable ds excel sans etre compilée et
pourra etre debuggée depuis vb.



Avatar
ng
oui le bouton executer sans compilation

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/

Gloops wrote:
Il y a un bouton "Lecture" ?

ng a écrit, le 05/11/2004 23:23 :

SAlut,

Tu n'es pas obligé de compiler, il suffit de cliquer sur la bouton
"lecture" de ton projet dll et elle sera utilisable ds excel sans
etre compilée et pourra etre debuggée depuis vb.




Avatar
Gloops
Ah OK, je ne savais pas que tu l'appelais Lecture.
C'est vrai qu'il ressemble à celui de WMP.
_________________________________
ng a écrit, le 06/11/2004 21:09 :

oui le bouton executer sans compilation



Avatar
PM
Merci Nicolas,

ta réponse pointe sur ce que je cherche...
... mais je n'ai pas vraiment compris (Gloops m'a permis, par sa question,
de faire un essai... infructueux).

J'ai cliqué le bouton "lecture" comme tu dis, donc Exécuter sans compilation
(F5).
Je laisse la dll en mode exécution.
Dans Excel je lance mon appel, comme tu me l'as expliqué l'autre jour.
Il me dit qu'il ne reconnaît pas la méthode appelée (ce qui paraît logique
parce qu'elle n'a pas été compilée. D'ailleurs, on le voit bien en rédigeant
l'appel : il ne reconnaît comme objet que ce qui a déjà été compilé ;-).
Retour à la case départ).
Il faut sans doute une sorte d'initialisation en VB des classes et méthodes
non encore compilées (??)

Merci. A bientôt.


"ng" a écrit dans le message de news:

SAlut,

Tu n'es pas obligé de compiler, il suffit de cliquer sur la bouton
"lecture" de ton projet dll et elle sera utilisable ds excel sans etre
compilée et pourra etre debuggée depuis vb.

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/

PM wrote:
Bonjour !

Je me suis mis à cette dll.
Quelques adaptations du code Excel VBA sont nécessaires.
La dll semble exiger la définition complète de l'objet. Donc, pas de
sheets(3). select
cells(1,1).select
mais oSheet.activate et oSheet.cells(1,1) etc.

D'où deux questions additionnelles :

1. existe-t-il une façon intelligente de débugger ? Ce matin, j'ai
travaillé bestialement dans MonProjetDll.vbp, en compilant la dll,
puis en ouvrant Excel, en faisant l'essai, en refermant Excel (pour
pouvoir compiler à l'étape suivante), et en progrssant pas à pas avec
des exit sub pour déterminer où ça plante... C'est pas génial génial.

2. pourquoi n'aime-t-il pas oSheet.select et accepte-t-il
oSheet.activate ??
Merci !






Avatar
ng
Salut,

Il faut veiller à avoir démarrer ton projet excel apres le lancement (F5) de
la dll.
Une autre solution consite à utiliser ta classe de ta dll dans ton projet
excel come une classe normale puis de la mettre ds une dll seulement à la
fin.

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/

PM wrote:
Merci Nicolas,

ta réponse pointe sur ce que je cherche...
... mais je n'ai pas vraiment compris (Gloops m'a permis, par sa
question, de faire un essai... infructueux).

J'ai cliqué le bouton "lecture" comme tu dis, donc Exécuter sans
compilation (F5).
Je laisse la dll en mode exécution.
Dans Excel je lance mon appel, comme tu me l'as expliqué l'autre jour.
Il me dit qu'il ne reconnaît pas la méthode appelée (ce qui paraît
logique parce qu'elle n'a pas été compilée. D'ailleurs, on le voit
bien en rédigeant l'appel : il ne reconnaît comme objet que ce qui a
déjà été compilé ;-). Retour à la case départ).
Il faut sans doute une sorte d'initialisation en VB des classes et
méthodes non encore compilées (??)

Merci. A bientôt.


"ng" a écrit dans le message de news:

SAlut,

Tu n'es pas obligé de compiler, il suffit de cliquer sur la bouton
"lecture" de ton projet dll et elle sera utilisable ds excel sans
etre compilée et pourra etre debuggée depuis vb.

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/

PM wrote:
Bonjour !

Je me suis mis à cette dll.
Quelques adaptations du code Excel VBA sont nécessaires.
La dll semble exiger la définition complète de l'objet. Donc, pas de
sheets(3). select
cells(1,1).select
mais oSheet.activate et oSheet.cells(1,1) etc.

D'où deux questions additionnelles :

1. existe-t-il une façon intelligente de débugger ? Ce matin, j'ai
travaillé bestialement dans MonProjetDll.vbp, en compilant la dll,
puis en ouvrant Excel, en faisant l'essai, en refermant Excel (pour
pouvoir compiler à l'étape suivante), et en progrssant pas à pas
avec des exit sub pour déterminer où ça plante... C'est pas génial
génial. 2. pourquoi n'aime-t-il pas oSheet.select et accepte-t-il
oSheet.activate ??
Merci !






Avatar
PM
Merci bcp !

C'est pas encore la simplicité de la programmation directe, mais je crois
qu'on ne peut pas faire mieux.
L'idée de travailler avec un module de classe dans VBA permet de dégrossir
le travail, mais ne me paraît pas solutionner tout.

Par exemple, j'ai une MsgBox dans VBA.
Quand je la transfère dans un module de classe dans Excel VBA, pas de pb.
Quand je la passe en VB, elle s'affiche dans le programme VB et reste en
arrière plan d'Excel.
J'ai pas encore trouvé la soluce, si ce n'est de laisser ce bout là dans
VBA...

Encore merci !


"ng" a écrit dans le message de news:

Salut,

Il faut veiller à avoir démarrer ton projet excel apres le lancement (F5)
de la dll.
Une autre solution consite à utiliser ta classe de ta dll dans ton projet
excel come une classe normale puis de la mettre ds une dll seulement à la
fin.

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/

PM wrote:
Merci Nicolas,

ta réponse pointe sur ce que je cherche...
... mais je n'ai pas vraiment compris (Gloops m'a permis, par sa
question, de faire un essai... infructueux).

J'ai cliqué le bouton "lecture" comme tu dis, donc Exécuter sans
compilation (F5).
Je laisse la dll en mode exécution.
Dans Excel je lance mon appel, comme tu me l'as expliqué l'autre jour.
Il me dit qu'il ne reconnaît pas la méthode appelée (ce qui paraît
logique parce qu'elle n'a pas été compilée. D'ailleurs, on le voit
bien en rédigeant l'appel : il ne reconnaît comme objet que ce qui a
déjà été compilé ;-). Retour à la case départ).
Il faut sans doute une sorte d'initialisation en VB des classes et
méthodes non encore compilées (??)

Merci. A bientôt.


"ng" a écrit dans le message de news:

SAlut,

Tu n'es pas obligé de compiler, il suffit de cliquer sur la bouton
"lecture" de ton projet dll et elle sera utilisable ds excel sans
etre compilée et pourra etre debuggée depuis vb.

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/

PM wrote:
Bonjour !

Je me suis mis à cette dll.
Quelques adaptations du code Excel VBA sont nécessaires.
La dll semble exiger la définition complète de l'objet. Donc, pas de
sheets(3). select
cells(1,1).select
mais oSheet.activate et oSheet.cells(1,1) etc.

D'où deux questions additionnelles :

1. existe-t-il une façon intelligente de débugger ? Ce matin, j'ai
travaillé bestialement dans MonProjetDll.vbp, en compilant la dll,
puis en ouvrant Excel, en faisant l'essai, en refermant Excel (pour
pouvoir compiler à l'étape suivante), et en progrssant pas à pas
avec des exit sub pour déterminer où ça plante... C'est pas génial
génial. 2. pourquoi n'aime-t-il pas oSheet.select et accepte-t-il
oSheet.activate ??
Merci !










Avatar
Gloops
Salut,

Ah, ça, j'ai vu des sociétés internationales d'édition de logiciel
tomber dans le panneau (pas forcément par appel à une DLL, mais
l'affichage d'un message en arrière-plan, ça s'est vu).

Je me demande si SetFocus pourrait aider, mais apparemment ça imposerait
une programmation beaucoup plus lourde, car par défaut MsgBox ne fournit
pas son hWnd ...

Il m'est arrivé de créer un formulaire pour l'affichage d'un message,
afin que l'utilisateur puisse copier le message dans le presse-papiers.
Gérer le focus sur le message pourrait être une autre motivation pour
faire ça. Une solution plus légère est de trouver le hWnd du message par
FindWindowEx.

Cela étant si après compilation le problème ne se pose plus, c'est
peut-être moins motivant.
_________________________________
PM a écrit, le 08/11/2004 11:18 :
Merci bcp !

C'est pas encore la simplicité de la programmation directe, mais je crois
qu'on ne peut pas faire mieux.
L'idée de travailler avec un module de classe dans VBA permet de dégrossir
le travail, mais ne me paraît pas solutionner tout.

Par exemple, j'ai une MsgBox dans VBA.
Quand je la transfère dans un module de classe dans Excel VBA, pas de pb.
Quand je la passe en VB, elle s'affiche dans le programme VB et reste en
arrière plan d'Excel.
J'ai pas encore trouvé la soluce, si ce n'est de laisser ce bout là dans
VBA...

Encore merci !


"ng" a écrit dans le message de news:


Salut,

Il faut veiller à avoir démarrer ton projet excel apres le lancement (F5)
de la dll.
Une autre solution consite à utiliser ta classe de ta dll dans ton projet
excel come une classe normale puis de la mettre ds une dll seulement à la
fin.

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/

PM wrote:

Merci Nicolas,

ta réponse pointe sur ce que je cherche...
... mais je n'ai pas vraiment compris (Gloops m'a permis, par sa
question, de faire un essai... infructueux).

J'ai cliqué le bouton "lecture" comme tu dis, donc Exécuter sans
compilation (F5).
Je laisse la dll en mode exécution.
Dans Excel je lance mon appel, comme tu me l'as expliqué l'autre jour.
Il me dit qu'il ne reconnaît pas la méthode appelée (ce qui paraît
logique parce qu'elle n'a pas été compilée. D'ailleurs, on le voit
bien en rédigeant l'appel : il ne reconnaît comme objet que ce qui a
déjà été compilé ;-). Retour à la case départ).
Il faut sans doute une sorte d'initialisation en VB des classes et
méthodes non encore compilées (??)

Merci. A bientôt.


"ng" a écrit dans le message de news:


SAlut,

Tu n'es pas obligé de compiler, il suffit de cliquer sur la bouton
"lecture" de ton projet dll et elle sera utilisable ds excel sans
etre compilée et pourra etre debuggée depuis vb.

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/

PM wrote:

Bonjour !

Je me suis mis à cette dll.
Quelques adaptations du code Excel VBA sont nécessaires.
La dll semble exiger la définition complète de l'objet. Donc, pas de
sheets(3). select
cells(1,1).select
mais oSheet.activate et oSheet.cells(1,1) etc.

D'où deux questions additionnelles :

1. existe-t-il une façon intelligente de débugger ? Ce matin, j'ai
travaillé bestialement dans MonProjetDll.vbp, en compilant la dll,
puis en ouvrant Excel, en faisant l'essai, en refermant Excel (pour
pouvoir compiler à l'étape suivante), et en progrssant pas à pas
avec des exit sub pour déterminer où ça plante... C'est pas génial
génial. 2. pourquoi n'aime-t-il pas oSheet.select et accepte-t-il
oSheet.activate ??
Merci !














Avatar
ng
Salut,

Pr la msgbox : vbSystemModal.

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/

Gloops wrote:
Salut,

Ah, ça, j'ai vu des sociétés internationales d'édition de logiciel
tomber dans le panneau (pas forcément par appel à une DLL, mais
l'affichage d'un message en arrière-plan, ça s'est vu).

Je me demande si SetFocus pourrait aider, mais apparemment ça
imposerait une programmation beaucoup plus lourde, car par défaut
MsgBox ne fournit pas son hWnd ...

Il m'est arrivé de créer un formulaire pour l'affichage d'un message,
afin que l'utilisateur puisse copier le message dans le
presse-papiers. Gérer le focus sur le message pourrait être une autre
motivation pour faire ça. Une solution plus légère est de trouver le
hWnd du message par FindWindowEx.

Cela étant si après compilation le problème ne se pose plus, c'est
peut-être moins motivant.
_________________________________
PM a écrit, le 08/11/2004 11:18 :
Merci bcp !

C'est pas encore la simplicité de la programmation directe, mais je
crois qu'on ne peut pas faire mieux.
L'idée de travailler avec un module de classe dans VBA permet de
dégrossir le travail, mais ne me paraît pas solutionner tout.

Par exemple, j'ai une MsgBox dans VBA.
Quand je la transfère dans un module de classe dans Excel VBA, pas
de pb. Quand je la passe en VB, elle s'affiche dans le programme VB
et reste en arrière plan d'Excel.
J'ai pas encore trouvé la soluce, si ce n'est de laisser ce bout là
dans VBA...

Encore merci !


"ng" a écrit dans le message de news:


Salut,

Il faut veiller à avoir démarrer ton projet excel apres le
lancement (F5) de la dll.
Une autre solution consite à utiliser ta classe de ta dll dans ton
projet excel come une classe normale puis de la mettre ds une dll
seulement à la fin.

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/

PM wrote:

Merci Nicolas,

ta réponse pointe sur ce que je cherche...
... mais je n'ai pas vraiment compris (Gloops m'a permis, par sa
question, de faire un essai... infructueux).

J'ai cliqué le bouton "lecture" comme tu dis, donc Exécuter sans
compilation (F5).
Je laisse la dll en mode exécution.
Dans Excel je lance mon appel, comme tu me l'as expliqué l'autre
jour. Il me dit qu'il ne reconnaît pas la méthode appelée (ce qui
paraît logique parce qu'elle n'a pas été compilée. D'ailleurs, on
le voit bien en rédigeant l'appel : il ne reconnaît comme objet
que ce qui a déjà été compilé ;-). Retour à la case départ).
Il faut sans doute une sorte d'initialisation en VB des classes et
méthodes non encore compilées (??)

Merci. A bientôt.


"ng" a écrit dans le message de news:


SAlut,

Tu n'es pas obligé de compiler, il suffit de cliquer sur la bouton
"lecture" de ton projet dll et elle sera utilisable ds excel sans
etre compilée et pourra etre debuggée depuis vb.

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/

PM wrote:

Bonjour !

Je me suis mis à cette dll.
Quelques adaptations du code Excel VBA sont nécessaires.
La dll semble exiger la définition complète de l'objet. Donc,
pas de sheets(3). select
cells(1,1).select
mais oSheet.activate et oSheet.cells(1,1) etc.

D'où deux questions additionnelles :

1. existe-t-il une façon intelligente de débugger ? Ce matin,
j'ai travaillé bestialement dans MonProjetDll.vbp, en compilant
la dll, puis en ouvrant Excel, en faisant l'essai, en refermant
Excel (pour pouvoir compiler à l'étape suivante), et en
progrssant pas à pas avec des exit sub pour déterminer où ça
plante... C'est pas génial génial. 2. pourquoi n'aime-t-il pas
oSheet.select et accepte-t-il oSheet.activate ??
Merci !












1 2