Bonjour,
Afin de communiquer avec un logiciel, je peux lui importer une liste d'éléments à traiter via un fichier xml.
Donc le logiciel lit du xml et j'obtiens mes données d'entrées ailleurs, depuis un fichier excel.
Actuellement, j'ai crée une feuille excel qui me permet d'extraire les données dont j'ai besoin, de les mettre au format lisible par le logiciel et d'exporter le tout en xml mais ça c'est de la programmation "bricolage", j'aimerai créer une macro VBA plus "propre". Mais vu que je débute en VBA, j'ai besoin de votre aide.
Donc en gros, le rôle de la macro est de récupérer des données depuis un fichier excel et les insérer dans un fichier xml. Je détaillerai la liste des opérations plus loin.
Voici la structure du fichier xml que je veux obtenir:
<?xml version="1.0" encoding="UTF-8"?>
<savedSearch name="Trouble_excel_list" objectTypeClassName="ext.airbus.dmutr.dmutrouble.DMUTroubleLight"><savedCriteria sortIndex="0" attribute="objectUid" relationalComparator="=" value="T000000000" /><savedCriteria sortIndex="1" booleanOperator="|" attribute="objectUid" relationalComparator="=" value="T000011524 "/><savedCriteria sortIndex="2" booleanOperator="|" attribute="objectUid" relationalComparator="=" value="T000053144 "/><savedCriteria sortIndex="3" booleanOperator="|" attribute="objectUid" relationalComparator="=" value="T000022876 "/>
Ceci est un exemple avec une liste de 3 éléments à traiter. Pour des raisons de lisibilité, je vais insérer des retours à la ligne:
<?xml version="1.0" encoding="UTF-8"?>
<savedSearch name="Trouble_excel_list" objectTypeClassName="ext.airbus.dmutr.dmutrouble.DMUTroubleLight">
<savedCriteria sortIndex="0" attribute="objectUid" relationalComparator="=" value="T000000000" />
<savedCriteria sortIndex="1" booleanOperator="|" attribute="objectUid" relationalComparator="=" value="T000011524 "/>
<savedCriteria sortIndex="2" booleanOperator="|" attribute="objectUid" relationalComparator="=" value="T000053144 "/>
<savedCriteria sortIndex="3" booleanOperator="|" attribute="objectUid" relationalComparator="=" value="T000022876 "/>
En bleu, c'est la partie du code xml qui sera toujours identique.
Si vous regardez les 3 dernières lignes, vous remarquez que mes variables sont un chiffre et une valeur d'élément. (En rouge. J'obtiens la valeur d'élément via un fichier excel.
Donc ce que j'aimerai c'est une macro qui une fois lancée par l'utilisateur depuis le fichier excel contenant les données d'entrées au aussi pleins d'autres données mais inutiles pour le fichier xml:
>demande à l'utilisateur de sélectionner une plage de donnée (avec la souris, comme quand excel demande une plage de donnée pour un graphe)
>pour chaque cellule de la sélection, crée la ligne de code correspondante
ex: le 1er élément de la sélection est T000011524, donc la ligne a créer est:
<savedCriteria sortIndex="1" booleanOperator="|" attribute="objectUid" relationalComparator="=" value="T000011524 "/>
>assembler toutes les lignes précédentes, les unes aux autres (sur la même ligne)
>rajouter ce qu'on pourrai appeler l'entête du fichier xml:
<?xml version="1.0" encoding="UTF-8"?>
<savedSearch name="Trouble_excel_list" objectTypeClassName="ext.airbus.dmutr.dmutrouble.DMUTroubleLight"><savedCriteria sortIndex="0" attribute="objectUid" relationalComparator="=" value="T000000000" />
(il y a bien un retour à la ligne après <?xml version="1.0" encoding="UTF-8"?>)
>écrit le tout dans un fichier xml et l'enregistrer (le must serait avec la pop up que l'on à lors d'un "enregistrer sous", comme ça l'utilisateur peut choisir le nom du fichier et l'emplacement; problème excel ne me propose pas le format xml, ce que je faisait c'est:
Dim Fichier As String
Fichier = "C:\mon_chemin\mon_nom_de_fichier.xml"
Open Fichier For Output As #1
Print #1, Range("C1").Value //cellule où était <?xml version="1.0" encoding="UTF-8"?>
Print #1, Range("C2").Value //cellule où était l'assemblage de toutes mes lignes
Close
Voila, si vous m'aidiez cela serai super, car je n'arrive pas à trouver toutes les "briques" VBA pour faire ceci (genre le pop up enregistrer sous ou la sélection de plage de données)
Merci d'avance
Afin de communiquer avec un logiciel, je peux lui importer une liste d'éléments à traiter via un fichier xml.
Donc le logiciel lit du xml et j'obtiens mes données d'entrées ailleurs, depuis un fichier excel.
Actuellement, j'ai crée une feuille excel qui me permet d'extraire les données dont j'ai besoin, de les mettre au format lisible par le logiciel et d'exporter le tout en xml mais ça c'est de la programmation "bricolage", j'aimerai créer une macro VBA plus "propre". Mais vu que je débute en VBA, j'ai besoin de votre aide.
Donc en gros, le rôle de la macro est de récupérer des données depuis un fichier excel et les insérer dans un fichier xml. Je détaillerai la liste des opérations plus loin.
Voici la structure du fichier xml que je veux obtenir:
<?xml version="1.0" encoding="UTF-8"?>
<savedSearch name="Trouble_excel_list" objectTypeClassName="ext.airbus.dmutr.dmutrouble.DMUTroubleLight"><savedCriteria sortIndex="0" attribute="objectUid" relationalComparator="=" value="T000000000" /><savedCriteria sortIndex="1" booleanOperator="|" attribute="objectUid" relationalComparator="=" value="T000011524 "/><savedCriteria sortIndex="2" booleanOperator="|" attribute="objectUid" relationalComparator="=" value="T000053144 "/><savedCriteria sortIndex="3" booleanOperator="|" attribute="objectUid" relationalComparator="=" value="T000022876 "/>
Ceci est un exemple avec une liste de 3 éléments à traiter. Pour des raisons de lisibilité, je vais insérer des retours à la ligne:
<?xml version="1.0" encoding="UTF-8"?>
<savedSearch name="Trouble_excel_list" objectTypeClassName="ext.airbus.dmutr.dmutrouble.DMUTroubleLight">
<savedCriteria sortIndex="0" attribute="objectUid" relationalComparator="=" value="T000000000" />
<savedCriteria sortIndex="1" booleanOperator="|" attribute="objectUid" relationalComparator="=" value="T000011524 "/>
<savedCriteria sortIndex="2" booleanOperator="|" attribute="objectUid" relationalComparator="=" value="T000053144 "/>
<savedCriteria sortIndex="3" booleanOperator="|" attribute="objectUid" relationalComparator="=" value="T000022876 "/>
En bleu, c'est la partie du code xml qui sera toujours identique.
Si vous regardez les 3 dernières lignes, vous remarquez que mes variables sont un chiffre et une valeur d'élément. (En rouge. J'obtiens la valeur d'élément via un fichier excel.
Donc ce que j'aimerai c'est une macro qui une fois lancée par l'utilisateur depuis le fichier excel contenant les données d'entrées au aussi pleins d'autres données mais inutiles pour le fichier xml:
>demande à l'utilisateur de sélectionner une plage de donnée (avec la souris, comme quand excel demande une plage de donnée pour un graphe)
>pour chaque cellule de la sélection, crée la ligne de code correspondante
ex: le 1er élément de la sélection est T000011524, donc la ligne a créer est:
<savedCriteria sortIndex="1" booleanOperator="|" attribute="objectUid" relationalComparator="=" value="T000011524 "/>
>assembler toutes les lignes précédentes, les unes aux autres (sur la même ligne)
>rajouter ce qu'on pourrai appeler l'entête du fichier xml:
<?xml version="1.0" encoding="UTF-8"?>
<savedSearch name="Trouble_excel_list" objectTypeClassName="ext.airbus.dmutr.dmutrouble.DMUTroubleLight"><savedCriteria sortIndex="0" attribute="objectUid" relationalComparator="=" value="T000000000" />
(il y a bien un retour à la ligne après <?xml version="1.0" encoding="UTF-8"?>)
>écrit le tout dans un fichier xml et l'enregistrer (le must serait avec la pop up que l'on à lors d'un "enregistrer sous", comme ça l'utilisateur peut choisir le nom du fichier et l'emplacement; problème excel ne me propose pas le format xml, ce que je faisait c'est:
Dim Fichier As String
Fichier = "C:\mon_chemin\mon_nom_de_fichier.xml"
Open Fichier For Output As #1
Print #1, Range("C1").Value //cellule où était <?xml version="1.0" encoding="UTF-8"?>
Print #1, Range("C2").Value //cellule où était l'assemblage de toutes mes lignes
Close
Voila, si vous m'aidiez cela serai super, car je n'arrive pas à trouver toutes les "briques" VBA pour faire ceci (genre le pop up enregistrer sous ou la sélection de plage de données)
Merci d'avance