Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Assistant intégration et restitution
    Inscrit en
    juillet 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Assistant intégration et restitution

    Informations forums :
    Inscription : juillet 2017
    Messages : 8
    Points : 5
    Points
    5
    Par défaut VBA - Tag d'une variable bidimensionnelle sur une librairie SharePoint pour un fichier
    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.

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    mai 2004
    Messages
    1 486
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : mai 2004
    Messages : 1 486
    Points : 2 082
    Points
    2 082
    Par défaut
    Bonjour

    Citation Envoyé par Air1_16 Voir le message
    * Est-il possible, dans ma 1ère solution, de taguer une variable bidimensionnelle (qui nécessite 2 valeurs) avec une propriété personnalisée ?
    Oui, ca depend de quel type est la colonne Codes_Pays.

    - Choix (a selection multiple) : valeurs possibles A,B,C
    La customproperty Excel prendra pour valeur une chaine de caracteres avec le format suivant: ;#[V1];#[V2];#
    Exemple -> ;#A;#B;#C;#

    - Lookup/Recherche (a selection multiple) : valeurs possibles A (id=1), B (id=2), C(id=3)
    La customproperty Excel prendra pour valeur une chaine de caracteres avec le format suivant: [[ID1];#[V1]];#[[ID2];#[V2];]
    Les values V1,V2 sont facultatives, seul l'Id est important.
    Exemple -> 2;#B;#3;#C;#1;#A
    Equivaut a -> 2;#;#3;#;#1;#


    Pour valider, faites le test contraire.
    Partez d'un fichier qui existe deja dans la bibliotheque, modifiez ses proprietes (Codes_Pays) puis telechargez le fichier en local pour voir de quelle facon SharePoint a modifie les custom properties du fichier Excel.

    Citation Envoyé par Air1_16 Voir le message
    * Si tel n'est pas le cas, y'a-t-il une solution plus rapide et efficace avec VBA que ma 2ème solution ?
    L'utilisation du mecanisme de property promotion/demotion de SharePoint avec les proprietes Excel est quand meme assez hasardeux.
    Avec VBA ? Non pas vraiment. L'utilisation des webservices SharePoint (avec un client MSXML2.XMLHTTP) peut vous permettre de modifier les proprietes du document mais niveau rapidite je ne sais pas si le gain sera a la hauteur de vos esperances, sans compter l'effort a fournir pour ecrire un code maintenable.

    Un changement de techno et surtout de paradigme pourrait vous offrir plus de possibilites (ex.: script powershell, developpement d'un addin Excel C#).

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Assistant intégration et restitution
    Inscrit en
    juillet 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Assistant intégration et restitution

    Informations forums :
    Inscription : juillet 2017
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Bonjour,


    Je vais tester, mais je ne suis pas sûr que ces 2 formats de propriétés personnalisées marchent. Mais ça ne coûte rien de tester.


    Ensuite, au niveau du test contraire évoqué, que j'ai fait dès le départ. Le SharePoint n'utilise pas de propriétés personnalisées quand on utilise la voie "classique", c'est-à-dire d'uploader le fichier et de le taguer manuellement. Si on télécharge ce fichier, on se rend compte qu'Excel a ajouté des ContentTypeProperties ayant pour noms les noms des variables du SharePoint avec les diverses valeurs taguées.

    La solution des CustomDocumentProperties est en fait une solution détournée qui me faisait gagner du temps. Car, comme je l'ai dit, c'est bien plus rapide d'insérer des propriétés personnalisées avec leurs valeurs et de copier-coller le fichier, enregistré sur mon disque, sur le lecteur réseau associé à l'URL du SharePoint. Ca prend 2 secondes par fichier. Alors que le fait d'enregistrer 2 fois un fichier sur le lecteur réseau associé à l'URL du SharePoint (la 1ère fois pour faire apparaître les ContentTypeProperties) prend 7-8 secondes. Comme j'ai 900 fichiers à mettre en lignes sur le SharePoint, la différence est très importante.


    Pour finir, l'utilisation du script PowerShell a été évoquée de mon côté. Mais l'idée est d'abord de voir ce qu'il est possible de faire avec VBA.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Assistant intégration et restitution
    Inscrit en
    juillet 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Assistant intégration et restitution

    Informations forums :
    Inscription : juillet 2017
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par nonoxp Voir le message
    - Lookup/Recherche (a selection multiple) : valeurs possibles A (id=1), B (id=2), C(id=3)
    La customproperty Excel prendra pour valeur une chaine de caracteres avec le format suivant: [[ID1];#[V1]];#[[ID2];#[V2];]
    Les values V1,V2 sont facultatives, seul l'Id est important.
    Exemple -> 2;#B;#3;#C;#1;#A
    Equivaut a -> 2;#;#3;#;#1;#
    Je n'ai pas compris "Lookup/Recherche".

    Si déjà je comprends bien, "1", "2" et "3" sont les 3 identifiants des variables et "A", "B" et "C" en sont les valeurs respectives ? Et donc dans le 1er format donnée, "ID1" et "ID2" sont les identifiants des 2 variables et "V1" et "V2" les 2 valeurs respectives ?

    Si c'est bien le cas, je ne comprends pas pourquoi "V1" et "V2" seraient facultatifs vu que la valeur de la variable est le coeur du problème.

    Et pourquoi dans l'exemple mettre "1" et "A" à la fin ?

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    mai 2004
    Messages
    1 486
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : mai 2004
    Messages : 1 486
    Points : 2 082
    Points
    2 082
    Par défaut
    Citation Envoyé par Air1_16 Voir le message
    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...
    De quel type est la colonne Codes_Pays (colonne de liste SharePoint) ?
    Selon le type une seule des deux solutions s'applique.

    Citation Envoyé par Air1_16 Voir le message
    Et pourquoi dans l'exemple mettre "1" et "A" à la fin ?
    Dans les exemples proposes il s'agit de 3 valeurs selectionnees. Le 1;A mis a la fin signifie pas grand chose en soi, c'est la troisieme valeur selectionnee.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Assistant intégration et restitution
    Inscrit en
    juillet 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Assistant intégration et restitution

    Informations forums :
    Inscription : juillet 2017
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par nonoxp Voir le message
    De quel type est la colonne Codes_Pays (colonne de liste SharePoint) ?
    Selon le type une seule des deux solutions s'applique.
    C'est là que je ne saisis pas bien, car les 2 solutions données sont des choix multiples. Dans le SharePoint, la variable "Countries" et de type "Choice", avec au choix une centaine de codes pays. Chaque fichier est codé par un couple de pays : "Code_Pays_1" et "Code_Pays_2".


    Citation Envoyé par nonoxp Voir le message
    Dans les exemples proposes il s'agit de 3 valeurs selectionnees. Le 1;A mis a la fin signifie pas grand chose en soi, c'est la troisieme valeur selectionnee.
    OK. je ne comprenais pas trop. C'est juste que, pour l'exemple, j'aurais mis dans l'ordre avec "1;A" au début.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Assistant intégration et restitution
    Inscrit en
    juillet 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Assistant intégration et restitution

    Informations forums :
    Inscription : juillet 2017
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Bonjour,



    La solution donnée 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.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2016] VBA - Tag d'une variable bidimensionnelle sur une librairie SharePoint pour un fichier
    Par Air1_16 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 02/08/2017, 14h22
  2. Réponses: 9
    Dernier message: 23/06/2009, 11h54
  3. Réponses: 1
    Dernier message: 20/04/2007, 10h12
  4. [PHP-JS] mettre une variable javascript dans une variable php
    Par Mounr dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 20/04/2007, 10h09
  5. récupérer une variable javascript dans une variable java
    Par tx dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 06/07/2006, 18h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo