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

Problème d'exécution de macro

10 réponses
Avatar
Anne
Bonjour,

Je relance un peu le sujet d'un pr=E9c=E9dent post, avec des infos plus
pr=E9cises.
Il s'agit d'une macro qui effectue un couper/coller entre deux projets.

La macro fonctionne toujours bien en mode pas =E0 pas d=E9taill=E9. Mais
elle fait planter tout MS Project lorsque je l'ex=E9cute.


Voici la macro :
FileOpen Name:=3DActiveProject.Path & "\fichier2.mpp",
FormatID:=3D"MSProject.MPP"

Projects("fichier1").Activate

SelectRow Row:=3D1, rowrelative:=3DFalse
EditCut

Projects("fichier2").Activate

SelectEnd
SelectRow Row:=3D1
EditPaste

En mode ex=E9cution "classique", elle plante au niveau de EditCut.
Si maintenant je remplace EditCut par EditCopy, la macro plante au
niveau du EditPaste.
La macro s'ex=E9cute bien en mode pas =E0 pas d=E9taill=E9.
Elle s'ex=E9cute aussi si je mets un point d'arr=EAt qur l'instruction
qui pose apparemment probl=E8me et que je relance la suite de
l'ex=E9cution.
(d'autre part, sur certains ficheirs test, la macro fonctionne sans pb)

C'est un casse-t=EAte, je ne comprends pas pourquoi =E7a plante!!!
(je pr=E9cise aussi que cela fonctionnait tr=E8s bien il y a quelques
jours)

Et je ne vois pas non plus comment je pourrais contourner le probl=E8me
en essayant de construire mon code autrement...

Si quelqu'un a une id=E9e...

10 réponses

Avatar
Gérard Ducouret
Bonsoir Anne,

<<construire mon code autrement...>>
Une idée, c'est d'ailleurs un principe général en VBA : éviter au maximum de
simuler à l'identique une manip manuelle avec ses sélections, déplacement de
curseur, copier/coller. Dans le meilleur des cas cela ralentit l'éxécution
de la procédure, dans les moins bons cas cela plante...
Voir l'instruction que je vous indiquait hier :

SetTaskField Field:="Remarques", Value:="Note dans tache 3", TaskID:=3

Elle écrit une valeur dans un champ tâche, sans le sélectionner.
Etudiez ainsi les méthodes GetField, SetField... dans l'aide en ligne.

Gérard Ducouret [Project MVP]

"Anne" a écrit dans le message de
news:
Bonjour,

Je relance un peu le sujet d'un précédent post, avec des infos plus
précises.
Il s'agit d'une macro qui effectue un couper/coller entre deux projets.

La macro fonctionne toujours bien en mode pas à pas détaillé. Mais
elle fait planter tout MS Project lorsque je l'exécute.


Voici la macro :
FileOpen Name:¬tiveProject.Path & "fichier2.mpp",
FormatID:="MSProject.MPP"

Projects("fichier1").Activate

SelectRow Row:=1, rowrelative:úlse
EditCut

Projects("fichier2").Activate

SelectEnd
SelectRow Row:=1
EditPaste

En mode exécution "classique", elle plante au niveau de EditCut.
Si maintenant je remplace EditCut par EditCopy, la macro plante au
niveau du EditPaste.
La macro s'exécute bien en mode pas à pas détaillé.
Elle s'exécute aussi si je mets un point d'arrêt qur l'instruction
qui pose apparemment problème et que je relance la suite de
l'exécution.
(d'autre part, sur certains ficheirs test, la macro fonctionne sans pb)

C'est un casse-tête, je ne comprends pas pourquoi ça plante!!!
(je précise aussi que cela fonctionnait très bien il y a quelques
jours)

Et je ne vois pas non plus comment je pourrais contourner le problème
en essayant de construire mon code autrement...

Si quelqu'un a une idée...
Avatar
Anne
Ce que vous me suggérez, c'est de relever les différentes valeurs des
champs des tâches à copier dans le second fichier, grâce à
GetField, puis d'effacer les tâches dans le premier projet, et de les
recréer à l'identique dans le deuxième?

ça me paraît assez complexe, étant donné que je veux couper-coller
une tâche et ses sous-tâches, cela fait bcp d'informations...

Je vais essayer pour voir si cette méthode fonctionne.

Merci.
Avatar
Anne
Re-bonjour,

Juste une question subsidiaire :
quelle est la différence entre, par exemple :
ActiveCell.Task.SetField FieldID:=pjTaskDuration, Value:=...
et ActiveCell.Task.Duration=...

Merci. ça pique ma curiosité!
Avatar
Gérard Ducouret
Il n'y en a pas dans ce cas !
Certains champs peuvent faire l'objet d'une affectation de valeur "directe".
D'autres exigent une syntaxe plus élaborée.

Gérard Ducouret

"Anne" a écrit dans le message de
news:
Re-bonjour,

Juste une question subsidiaire :
quelle est la différence entre, par exemple :
ActiveCell.Task.SetField FieldID:=pjTaskDuration, Value:=...
et ActiveCell.Task.Duration=...

Merci. ça pique ma curiosité!
Avatar
Gérard Ducouret
Je en voyais pas très bien ce que vous voulez faire... Bon, j'ai exécuté la
macro et elle fonctionne bien chez moi !

Gérard Ducouret


"Anne" a écrit dans le message de
news:
Ce que vous me suggérez, c'est de relever les différentes valeurs des
champs des tâches à copier dans le second fichier, grâce à
GetField, puis d'effacer les tâches dans le premier projet, et de les
recréer à l'identique dans le deuxième?

ça me paraît assez complexe, étant donné que je veux couper-coller
une tâche et ses sous-tâches, cela fait bcp d'informations...

Je vais essayer pour voir si cette méthode fonctionne.

Merci.
Avatar
Anne
Merci d'avoir testé la macro.
La macro fonctionnait aussi il y a quelques jours sur tous mes
fichiers.
Elle fonctionne sur certains fichiers tests également chez moi, mais
pas pour les fichiers qui m'intéressent (des plannings existants).
C'est justement ce que je ne comprends pas.
Avatar
Gérard Ducouret
Si vos fichiers ne sont pas confidentiels, vous pouvez m'en envoyer un, je
ferai le test.

Mon adresse : ducouret point gerard at free point fr

Gérard Ducouret

"Anne" a écrit dans le message de
news:
Merci d'avoir testé la macro.
La macro fonctionnait aussi il y a quelques jours sur tous mes
fichiers.
Elle fonctionne sur certains fichiers tests également chez moi, mais
pas pour les fichiers qui m'intéressent (des plannings existants).
C'est justement ce que je ne comprends pas.
Avatar
Gérard Ducouret
Bonsoir Anne,

Je pense que ce qui peut faire planter votre macro c'est l'éventuelle
présence d'un affichage de ressource (actif) à la place d'un affichage de
tâche, soit dans le fichier source, soit dans le fichier cible.
Une instruction telle que:
ViewApply Name:="Diagramme de &Gantt"
devrait résoudre le problème. Chez moi ça marche.

Gérard Ducouret
Avatar
Anne
Merci, ça fonctionne!
Plus de bug sur MS Project. Merci encore pour votre aide.
Avatar
Gérard Ducouret
Anne,
Merci pour le feedback !

Gérard Ducouret

"Anne" a écrit dans le message de
news:
Merci, ça fonctionne!
Plus de bug sur MS Project. Merci encore pour votre aide.