[RESOLU] VBA - Tag d'1 var bidimensionnelle sur 1 librairie SharePoint

VBA - Tag d'1 var bidimensionnelle sur 1 librairie SharePoint [RESOLU] - VB/VBA/VBS - Programmation

Marsh Posté le 25-07-2017 à 16:20:06    

Bonjour à tous,
 
 
Je vous expose mon problème ci-dessous.
 
J'ai réalisé une macro qui crée des fichiers, lesquels fichiers sont destinés à être mis en ligne sur une librairie SharePoint. Dans cette librairie, 2 variables ont un champ requis obligatoire : "Code_Fic" et "Codes_Pays" :
* "Code_Fic" : Variable unidimensionnelle, ayant pour valeurs un type de fichier (ex : "A", "B", "C"...)
* "Codes_Pays" : Variable bidimensionnelle ayant pour valeurs des couples de codes de pays (ex : "FR, US", "GE, IT", "ES, PT"...)
 
En préambule, je travaille sur le SharePoint via une connexion à un lecteur réseau.
 
Ma 1ère solution a été d'utiliser les propriétés personnalisées d'Excel ("Custom Properties" ). J'ai créé, dans un fichier produit, une propriété personnalisée "Code_Fic" avec pour valeur "A". J'ai enregistré le fichier sur mon disque et je l'ai copié-collé sur le SharePoint. La valeur "A" a bien été lue et s'est bien affichée dans la colonne "Code_Fic". Le problème intervient avec la variable "Codes_Pays". Je ne savais pas comment coder 2 codes dans une valeur de propriété personnalisée. J'ai donc entré "FR, US". Cette valeur est bien affichée sur la librairie du SharePoint dans la colonne "Codes_Pays", sauf que l'utilisation du filtre montre que cette valeur n'est pas lue correctement. En effet, "FR, US" est vu comme une seule chaîne de caractère, alors que ça devrait être lu comme "FR" code pays 1 et "US" code pays 2. J'ai essayé d'entrer des valeurs avec d'autres séparateurs, avec ou sans espaces ("FR-US", "FR ; US", "FR_US"...), mais rien à faire, la valeur n'est pas lue correctement.
 
Ma 2ème solution a été d'enregistrer directement le fichier produit sur le SharePoint. Pour cela, il faut un 1er enregistrement test, dont on gère l'erreur, pour afficher les "Content Type Properties", qui sont donc les 2 variables requises. Ensuite, j'entre les valeurs pour chaque variable, en utilisant dans VBA un tableau à 2 dimensions ("Tab_Codes_Pays(0)" et "Tab_Codes_Pays(1)" ) pour entrer les codes des 2 pays. Comme, dans la librairie du SharePoint, des listes ont été définies pour chaque variable, il faut bien faire attention à entrer des codes qui appartiennent bien à ces listes, sans quoi l'enregistrement final déclenchera une erreur et le fichier ne pourra pas être enregistré. J'enregistre donc le fichier une 2ème fois, de manière définitive. Cette fois-ci, le filtre de la colonne "Codes_Pays" marche bien. A titre de précision, j'ai testé le fait de copier-coller le fichier produit sur le SharePoint puis de l'ouvrir pour éviter le 1er enregistrement test qui provoque une erreur. Mais cela prend encore plus de temps.
 
La 2ème solution est satisfaisante, mais elle prend plus de temps que la 1ère : environ 6-7 sec vs 1-2 sec pour 1 fichier. Vu que je produis 900 fichiers, cela fait une différence très importante.
 
* Est-il possible, dans ma 1ère solution, de taguer une variable bidimensionnelle (qui nécessite 2 valeurs) avec une propriété personnalisée ?
* Si tel n'est pas le cas, y'a-t-il une solution plus rapide et efficace avec VBA que ma 2ème solution ?
 
 
Merci d'avance pour votre aide.
 
Cordialement.


Message édité par air1_16 le 03-08-2017 à 16:24:16
Reply

Marsh Posté le 25-07-2017 à 16:20:06   

Reply

Marsh Posté le 25-07-2017 à 18:32:35    

Bonjour,
 
Avec Join() et Split() on peut mettre de nombreuses valeurs dans une seule variable chaine.


---------------
Cordialement, Patrice
Reply

Marsh Posté le 26-07-2017 à 16:04:13    

Bonjour,
 
Il y a de l'idée. malheureusement, ça ne change rien.
 
En fait, la fonction "Join", je l'ai faite moi-même dans la macro en regroupant "FR" et "US" dans une même chaîne de caractères, ce qui donne "FR; US".
 
Le problème est que "FR; US" est vu comme une seule chaîne de caractères. Le SharePoint n'arrive pas à faire ce que fait la fonction "Split".

Reply

Marsh Posté le 02-08-2017 à 15:09:41    

Bonjour,
 
 
 
La solution, donnée ICI par nonoxp, était la bonne en réponse à ma 1ère question liée à ma 1ère solution donnée ! Il s'agissait en fait de coder "FS-US" de cette manière dans la CustomDocumentProperty : ;#FR;#US;#
avec ;# avant le premier libellé, après le dernier libellé et entre chaque libellé.
 
Cela marche donc parfaitement. Les fichiers copiés-collés sur le SharePoint ont donc les valeurs de la variables "Codes_Pays" qui sont bien affichées et bien lues par le filtre.
 
 
 
D'autre part, on m'a donné dans un autre forum une piste sur le fait d'utiliser un fichier "Template". L'idée est de créer un fichier "Template" qu'on enregistre dans le SharePoint, de manière à lui faire intégrer les ContentTypeProperties. Ce fichier "Template" est déplacé sur mon disque, et tous les fichiers sont créés suivant cette maquette, avec donc les ContentTypeProperties à l'intérieur. Le 1er enregistrement qui déclenche une erreur et qui permet l'affichage des ContentTypeProperties est donc inutile, vu que les ContentTypeProperties apparaissent déjà.
 
J'ai donc également enlevé le fait d'enregistrer le fichier sur mon disque, laissant juste l'enregistrement sur le SharePoint. J'ai effectué le test. Bien que moins long, cela prend toujours bien plus de temps que d'enregistrer les fichiers sur le disque et de les copier-coller sur le lecteur réseau lié à l'URL du SharePoint. En gros : Tps Enregistrement disque + Tps copier-coller SharePoint <<< Tps Enregistrement SharePoint
 
 
 
Ma dernière idée a été d'enregistrer tous les fichiers sur mon disque, avec les CustomDocumentProperties, puis de copier-coller le dossier créé dans le lecteur réseau lié à l'URL du SharePoint plutôt que, à la production de chaque fichier, de copier-coller celui-ci sur le lecteur réseau lié à l'URL du SharePoint. Au final, il n'y a aucun gain de temps. Cela prend même un peu plus de temps.
 
 
 
J'ai donc retenu ma 1ère solution, qui a donc été modifiée et qui marche cette fois-ci à 100%. A la production de chaque fichier, je crée des CustomDocumentProperties (propriétées personnalisées) ayant pour noms les noms des variables de la librairie du SharePoint. Pour chaque CustomDocumentProperty, j'insère la valeur adéquate, en prenant soin, pour une variable multi-dimensionnelle, d'utiliser le séparateur ";#" entre chaque valeur, ainsi qu'avant la 1ère valeur et après la dernière valeur (ex : ";#FR;#US;#" ). J'enregistre le fichier sur mon disque, que je copie-colle ensuite sur le lecteur réseau lié à l'URL du SharePoint. L'enregistrement des fichiers sur le disque est obligatoire dans cette méthode. On pourra éventuellement supprimer le dossier créé sur le disque à la fin de l'exécution de la macro.
 
Si on ouvre un fichier copié-collé dans le SharePoint, on s'aperçoit que les CustomDocumentProperties, toujours présentes, ont permis la création des ContentTypeProperties qui contiennent bien les valeurs entrées dans les CustomDocumentProperties.
 
 
 
Voilà où en est ma réflexion. Si vous avez une meilleure solution, je suis preneur. Merci pour votre aide. Bonne journée.


Message édité par air1_16 le 02-08-2017 à 15:11:39
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed