PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Probleme classe Excel (un seul poste concerné)
Probleme classe Excel (un seul poste concerné)
Débuté par Fany, 17 juin 2019 10:03 - 19 réponses
Membre enregistré
365 messages
Popularité : +12 (12 votes)
Posté le 17 juin 2019 - 10:03
Bonjour à tous,

Voilà, j'ai une erreur systématique a l'ouverture d'excel depuis mon application, et plus précisément dans la classe "ListeDeroulante" :
Jusqu'à maintenant, je n'ai jamais eu de problème. Et vendredi, un des postes client bug a chaque fois que j'utilise cette classe (le problème n'arrive que sur ce poste, qui fonctionne sous windows 10). Je soupçonne une mise à jour d'Excel qui ne ferait pas bon ménage avec mon code. (enfin j'incrimine plutôt mon code)

j'appelle la classe de cette manière :
gpclExcel:ListeDeroulante("",gsColCouleur+k,nLigneCouleur,nLigneFinition,"COULEUR")


Et la classe ressemble a ça :

Procedure ListeDeroulante(sClasseur="", sCelluleCible="", sNbrCouleur="", sNbrFinition="", TypeListe="")

// Déclaration des objets excel
//objXLApp est un objet automation dynamique
MaFeuilleCible est un objet automation dynamique
MaPlageCible est un objet automation dynamique
MaValidationCible est un objet automation dynamique

SELON TypeListe
CAS "COULEUR"

MaFeuilleCible = :m_pautExcel>>Worksheets("Configuration modules")
MaPlageCible = MaFeuilleCible>>Range(sCelluleCible)

MaValidationCible = MaPlageCible>>Validation
MaValidationCible>>Delete
// méthode Add de l'objet validation : expression .Add(Type, AlertStyle, Operator, Formula1, Formula2)
// xlValidateList = 3 , xlValidAlertStop = 1 , xlBetween = 1
// pas de Formula2
//MaValidationCible>>Add(3,1,1,"=BDD!$A$2:$A$"+sNbrCouleur)
MaValidationCible>>Add(3,1,1,"=BDD!$A$2:$A$"+sNbrCouleur) //****** C'est ici que ça semble bloquer
MaValidationCible>>IgnoreBlank = True
MaValidationCible>>InCellDropdown = True
MaValidationCible>>InputTitle = ""
MaValidationCible>>ErrorTitle = ""
MaValidationCible>>InputMessage = ""
MaValidationCible>>ErrorMessage = ""
MaValidationCible>>ShowInput = True
MaValidationCible>>ShowError = True

CAS "FINITION"

MaFeuilleCible = :m_pautExcel>>Worksheets("Configuration modules")
MaPlageCible = MaFeuilleCible>>Range(sCelluleCible)

MaValidationCible = MaPlageCible>>Validation
MaValidationCible>>Delete
MaValidationCible>>Add(3,1,1,"=BDD!$B$2:$B$"+sNbrFinition)
MaValidationCible>>IgnoreBlank = True
MaValidationCible>>InCellDropdown = True
MaValidationCible>>InputTitle = ""
MaValidationCible>>ErrorTitle = ""
MaValidationCible>>InputMessage = ""
MaValidationCible>>ErrorMessage = ""
MaValidationCible>>ShowInput = True
MaValidationCible>>ShowError = True

FIN


Et voilà l'erreur :
Erreur à la ligne 22 du traitement Méthode ListeDeroulante.
Vous avez appelé la méthode Automation 'Add'.
En tentant d'invoquer la méthode <Add> ou de lire la propriété <Add>, l'objet Automation/ActiveX a renvoyé l'erreur suivante :
'Erreur 800A03EC : '
En tentant d'invoquer la méthode <Add>, l'objet Automation/ActiveX a renvoyé l'erreur suivante :
'Erreur 800A03EC : '
En tentant de lire la propriété <Add>, l'objet Automation/ActiveX a renvoyé l'erreur suivante :
'Erreur 80020003, Le membre demandé n'existe pas'
En tentant d'écrire la propriété <Add>, l'objet Automation/ActiveX a renvoyé l'erreur suivante :
'Erreur 80020003, Le membre demandé n'existe pas'

----- Informations techniques -----

Projet : MONPROJET

Appel WL :
Traitement de 'Méthode ListeDeroulante' (CExcel.ListeDeroulante), ligne 22, thread 0

Que s'est-il passé ?
Vous avez appelé la méthode Automation 'Add'.
En tentant d'invoquer la méthode <Add> ou de lire la propriété <Add>, l'objet Automation/ActiveX a renvoyé l'erreur suivante :
'Erreur 800A03EC : '
En tentant d'invoquer la méthode <Add>, l'objet Automation/ActiveX a renvoyé l'erreur suivante :
'Erreur 800A03EC : '
En tentant de lire la propriété <Add>, l'objet Automation/ActiveX a renvoyé l'erreur suivante :
'Erreur 80020003, Le membre demandé n'existe pas'
En tentant d'écrire la propriété <Add>, l'objet Automation/ActiveX a renvoyé l'erreur suivante :
'Erreur 80020003, Le membre demandé n'existe pas'

Code erreur : 2205
Niveau : erreur fatale

Dump de l'erreur du module 'wd240vm.dll' (24.0.205.2).
Identifiant des informations détaillées (.err) : 130001
Informations supplémentaires :
EIT_PILEWL :
Méthode ListeDeroulante (CExcel.ListeDeroulante), ligne 22
Clic sur BTN_ImporterDepuisExcelConf1 (FEN_TestModule.RUBAN_ModificationCommande.BTN_ImporterDepuisExcelConf1), ligne 839
Clic sur BTN_ModifierCommande (FI_Commande.FI_Commande.BTN_ModifierCommande), ligne 2
EIT_DATEHEURE : 14/06/2019 15:58:45
EIT_TYPE_WDFILE : <4>
EIT_IDCODE : <458752>





j'ai regardé un peu partout si quelqu'un avait eu un problème de ce genre, mais sans succès : voilà mes pistes, mais bien souvent il n'y a pas de réponses au problème :

https://forum.pcsoft.fr/fr-FR/pcsoft.fr.windev.old/23771-export-excel-erreur-80020003-membre-demande-existe-pas/read.awp

https://www.developpez.net/forums/d1090279/environnements-developpement/windev/erreur-lecture-donnees-automate/

Et cette solution que j'ai tenté et qui n'a pas fonctionné :

https://www.developpez.net/forums/d1334550/environnements-developpement/windev/ole-dynamique-pilotage-excel-service-windows/

Bref, je ne sais pas ce qui se passe... c'est rageant parce que je ne vois pas quoi modifier.

Pouvez vous m'aider ?

Merci d'avance
Membre enregistré
939 messages
Popularité : +66 (68 votes)
Posté le 17 juin 2019 - 14:28
bonjour Fany,

sans trop trop avoir testé, votre ligne de code avec le Delete pour moi détruit votre objet, ce qui fait que la suite plante.
Avez vous testé sans cette ligne ?
Message modifié, 17 juin 2019 - 14:29
Membre enregistré
939 messages
Popularité : +66 (68 votes)
Posté le 17 juin 2019 - 14:30
la doc date du 18 Mai, donc il y a comme vous le pensiez peu être également une histoire de maj d'Excel :

https://docs.microsoft.com/fr-fr/office/vba/api/excel.validation.delete
Membre enregistré
365 messages
Popularité : +12 (12 votes)
Posté le 17 juin 2019 - 15:56
Bonjour,

Merci Christophe pour votre réponse rapide !
Malheureusement, je me suis empressée de tester votre proposition, et même en mettant en commentaire les deux endroits où se trouvent "Delete", et ça ne change rien... J'avais pas mal d'espoir sur cette solution ^^

Ce qui est bizarre c'est que ce code fonctionne sur tous les autres postes.
Posté le 17 juin 2019 - 16:18
Bonjour Fany,

ActiveX est-il autorisé sur le poste en question?

Thierry
Membre enregistré
365 messages
Popularité : +12 (12 votes)
Posté le 18 juin 2019 - 08:52
Bonjour Thierry, et merci pour votre réponse.

Désolée si ma question va paraitre bête, mais vous parlez des contrôles ActiveX d'Excel ?
(onglet développeur --> contrôles --> Insérer --> Autres contrôles) ?
Posté le 18 juin 2019 - 10:01
Je pense plutôt à la sécurité :
soit dans les paramètres d'Excel qui interdit les macros
soit dans les paramètres de l'antivirus.

Je me dis que si ça ne fonctionne pas pour un seul poste, c'est que c'est sur le poste qu'il faut regarder (que les ActiveX ne sont pas autorisés - ou pas mis à jour...)

Thierry
Posté le 18 juin 2019 - 12:58
Bonjour Fany

je vais peut être dire une bêtise mais vu que Microsoft a effectuer une grosse mise à jour au mois de mai .

Votre problème ne serai pas simplement un problème de droit sur vos fichier?
surtout si il ce trouve dans c:\ ou dans un Program Files .

pour en être sur vous pouvez toujours vérifier vos droit sur votre fichier.
clic droit sur le fichier ou dossier ou rep ensuite "propriété"
onglet sécurité
Vérifier si il y a droit en lecture/ écriture
vous pouvez modifier les droits d'utilisation.

je dit ça mais je peut me tromper, mais un petite vérification ne fait pas de mal, comme ça vous serai sure que cela ne vient pas de la .

Bon courage pour votre problème , Ludovic
Membre enregistré
365 messages
Popularité : +12 (12 votes)
Posté le 18 juin 2019 - 14:16
Bonjour Thierry et Ludo, et merci pour vos réponses,

Je vais regarder ça, je vous tiens au courant si jamais une des propositions fonctionne.

Je ne pense pas que le problème vienne des droits.
Pour résumer, l'objectif de mon code,est de créer un fichier excel, dans lequel j'écris des valeurs issues de la base de donnée de mon projet. J'utilise la classe CExcel, plus précisément les procédures "EcrireValeur" et "ListeDeroulante" pour saisir les informations dans mon fichier. Puis j'affiche le fichier.

J'ai isolé les parties du code qui faisaient appel à la procédure "ListeDeroulante" (là ou se trouve l'erreur) en les mettant en commentaire, suite à quoi le fichier s'est bien ouvert (mais sans listes déroulantes). Je pense donc, mais je peux me tromper, que les droits ne sont pas remis en cause, sinon je n'aurai pas pu manipuler le fichier, ni l'ouvrir. (je peux me tromper)

Je vais quand même regarder du coté des droits. Je tenais à préciser cette info au cas où ça serait parlant pour vous.

Encore merci à vous, vous êtes super de me consacrer de votre temps (précieux j'imagine)

A plus tard,

Fany
Posté le 18 juin 2019 - 14:39
Une liste déroulante dans Excel (celle insérée depuis l'onglet développeur) est un ActiveX. Et votre message d'erreur l'indique bien. Le poste de l'utilisateur est donc bien en cause.
Test a effectué : ouvrir le même fichier directement depuis Excel et voir si la barre jaune de notifications des sécurité des macros ne s'affiche pas.
Membre enregistré
365 messages
Popularité : +12 (12 votes)
Posté le 18 juin 2019 - 17:16
J'ai fait le test. J'ai enregistré le fichier et je l'ai ouvert dans le poste concerné : le bandeau jaune "mode protégé" s'est bien affiché en demandant si je voulais activer les modifications.

J'ai fait le même test sur mon poste, et le fichier s'est ouvert sans me demander l'activation des modifications.

J'ai donc comparé les réglages du mode protégé pour voir ce qui était différent... nous avons les même réglages entre les deux postes. C'est à rien n'y comprendre...
Membre enregistré
939 messages
Popularité : +66 (68 votes)
Posté le 19 juin 2019 - 13:03
rebonjour Fany,

il peu y avoir des droits sur le fichier qui verrouille son ouverture en mode protégé.
faites un clic droit sur votre fichier, dans l'onglet général, en bas, est-ce que vous avez :
Sécurité : Ce fichier provient d'un autre ordinateur et peu éventullement être bloqué pour protéger cet ordinateur.

si oui, il faut cliquer sur "Débloquer'
Membre enregistré
365 messages
Popularité : +12 (12 votes)
Posté le 20 juin 2019 - 14:18
Merci Thierry pour le lien vers le poste. J'étais également tombée dessus pendant mes recherches, mais ça n'a rien changé. J'ai créé les deux dossiers aux emplacement préconisés, ça n'a pas marché non plus. (a moins d'avoir mal fait... j'ai simplement créé les dossiers Desktop aux emplacement définis, et vérifié les droits... rien à faire)

Ensuite, pour mieux vous expliquer la génération de mon fichier Excel, je n'ouvre pas un fichier Excel existant, mais je le créé moi même.
En utilisant :
//OUVRIR UN NOUVEAU DOCUMENT
gpclExcel:NouveauDoc()
gpclExcel:EstVisible(Faux)


Avec NouveauDoc :
Procedure NouveauDoc()

QUAND EXCEPTIONEXCEPTION DANS
//Ajouter un classeur
:m_pautExcel>>Workbooks>>Add()
FAIRE
:MsgErreur("Impossible d'ajouter un classeur.",ExceptionInfo())
RETOUR
FIN

// il n'y a pas de classeur en cours
:m_sClasseurEnCours=""


Et ensuite j'écris dans mon classeur (qui n'est du coup encore enregistré nul par) à l'aide des procédures "EcrireValeur" ET "ListeDeroulante". Et c'est sur "ListeDeroulante" que ça bloque.
Le bug arrive avant que le fichier soit enregistré quelque part. Je n'ai donc pas vraiment moyen de vérifier les droits du fichier étant donné qu'il est en cours de création et "physiquement" enregistré nul part.

Y a t'il un moyen dans la procédure "NouveauDoc" de désactiver le mode protégé ?

Je ne sais plus quoi faire.

Encore merci pour vos messages, c'est top de se sentir soutenue.

Fany
Membre enregistré
365 messages
Popularité : +12 (12 votes)
Posté le 20 juin 2019 - 15:35
J'ai essayé de rajouter ce code dans la procédure d'ouverture du nouveau document, pour "essayer" de forcer l'activation des macros, mais rien...
:m_pautExcel>>ActiveWorkbook>>RunAutoMacro=3
Posté le 21 juin 2019 - 11:36
salut
si c'est bien un problème de droit ou protection sur le fichier as tu pensé a passé par le CMD (DOS WINDOW) pour activer ou désactivée les droits sur le fichier .

exemple :
a taper dans le dos avec la commande "cmd"

Supprime la protection : attrib -r ""C:\TonChemin\TonFichier.xls""
Active la protection : attrib +r ""C:\TonChemin\TonFichier.xls""

tu peut aussi creer un .bat qui le fera tout seul et que tu lance avec windev depuis ddelance ou lancer aussi directement la commande avec ddelance.

j'ai tester vite fait avec un txt et ça fonctionne . je peut mettre ou enlever les droit sur le fichier.

exemple : sur ton btn de traitement , tu peut mettre un petit loader qui :
1 - vérifie le chemin du fichier et vérifie si le fichier existe .
2 - modifie directement les droits
3- si tu veut que la fenêtre dos reste ouverte du rajoute en dessous "PAUSE" sinon tu ne met rien et la fenêtre va s'ouvrir et ce refermer directement.
4 - tu lance ton traitement.
5- tu peut même remettre la protection après si tu le souhaite .

liste des commandes pour attrib : https://docs.microsoft.com/fr-fr/windows-server/administration/windows-commands/attrib

bon dev Ludo
Membre enregistré
365 messages
Popularité : +12 (12 votes)
Posté le 21 juin 2019 - 11:39
Bonjour à tous,

Il semblerait que j'ai trouvé la solution à mon problème... J'étais à mille lieux de penser que ça pouvait venir de là.

Roulements de tambour....

En fait, je n'avais pas fait attention, mais en faisant mes tests sur le poste qui posait problème, je me suis rendu compte que le nom des colonnes n'étaient pas du style "A" "B" "C" mais plutôt "1" "2" "3"...
J'étais passé à côté de ça...

Je me suis empressée de mettre mon excel en mode style de référence "L1C1" dans les options. Et.... ça a planté !
Je me suis remise en "A1" et hop, ça fonctionne.

Bon, ce que je n'arrive pas à expliquer c'est que "EcrireValeur" ne pose pas de problème, peu importe le style de référence, alors que "ListeDeroulante" n’apprécie pas le mode "L1C1". Je continuerai à regarder pour mieux comprendre, mais tant que ça fonctionne c'est l’essentiel.


J'aimerai maintenant, à l'ouverture de mon classeur, forcer le style de référence "A1" (pour éviter que le problème ne se reproduise accidentellement)
Savez vous comment faire ?

Ou au moins connaitre en quel style de référence le classeur est parametré... pour que je puisse envisager les deux cas dans mon code, du genre

SI StyleReference = "A1" alors
--> je traduis mon code en A1
SINON
--> je traduis mon code en L1C1
FIN

J'ai commencé à chercher, j'ai quelque pistes mais rien de probant, si quelqu'un sait, ça me rendrait bien service.

Encore merci à vous,

Fany
Membre enregistré
365 messages
Popularité : +12 (12 votes)
Posté le 21 juin 2019 - 11:48
Je suis sur cette piste :

https://docs.microsoft.com/fr-fr/office/vba/api/excel.application.referencestyle

mais n'étant pas très douée dans le pilotage d'excel, je ne sais pas trop comment l'appliquer à mon code :

j'ai tenté :
Procedure NouveauDoc()

QUAND EXCEPTIONEXCEPTION DANS
//Ajouter un classeur
:m_pautExcel>>Workbooks>>Add()
:m_pautExcel>>workbooks>>ReferenceStyle>>xlA1 // plantage ici
FAIRE
:MsgErreur("Impossible d'ajouter un classeur.",ExceptionInfo())
RETOUR
FIN

// il n'y a pas de classeur en cours
:m_sClasseurEnCours=""


mais ça a planté, je ne connais pas la bonne syntaxe pour xlA1
Membre enregistré
1 304 messages
Popularité : +47 (51 votes)
Posté le 21 juin 2019 - 12:24
Salut Fanny,

xlA1 est une constante d'Excel, tu dois donc déclarer cette constante ou mettre ça valeur.

Quand j'ai besoin de savoir les valeurs, je passe en mode VBA d'Excel et je crée un code pour avoir la valeur

Sub test()
a = xlA1 ' Renvoi 1
b = xlR1C1 ' Renvoi -4150
END Sub


Bon Dev
Daryl

--
http://www.concept4u2.com
Membre enregistré
365 messages
Popularité : +12 (12 votes)
Posté le 21 juin 2019 - 14:54
Super, merci Daryl,

J'ai rajouté :
:m_pautExcel>>Application>>ReferenceStyle=1


et ça force le démarrage en mode A1

merci à vous pour tous vos messages, votre aide et vos encouragements.

:merci:

Fany
Message modifié, 21 juin 2019 - 14:54