Suite,
en fait j'ai ceci dans une macro :
Print #1, " " + RColonne
je voudrais faire un découpage d'une chaîne de caractères sur ce résultat
et aller chercher (l'élément découpé 1) dans une matrice A1:C6500;2;0 d'un
fichier valeurs.xls et renvoyer le résultat dans un fichier res.txt, id.
pour l'élément 2, etc.
Suite,
en fait j'ai ceci dans une macro :
Print #1, " " + RColonne
je voudrais faire un découpage d'une chaîne de caractères sur ce résultat
et aller chercher (l'élément découpé 1) dans une matrice A1:C6500;2;0 d'un
fichier valeurs.xls et renvoyer le résultat dans un fichier res.txt, id.
pour l'élément 2, etc.
Suite,
en fait j'ai ceci dans une macro :
Print #1, " " + RColonne
je voudrais faire un découpage d'une chaîne de caractères sur ce résultat
et aller chercher (l'élément découpé 1) dans une matrice A1:C6500;2;0 d'un
fichier valeurs.xls et renvoyer le résultat dans un fichier res.txt, id.
pour l'élément 2, etc.
For Each c In Range("E1", Range("E65536").End(xlUp))
For Each Item In Split(c)
Var = Application.VLookup(Item, Range("A1:C6500"), 2, 0)
If Not Application.IsNA(Var) Then
Print #1, Var
End If
Next Item
Next c
ensuite je ferme le tag
Cordialement.
Daniel
"Lionel" a écrit dans le message de news:Suite,
en fait j'ai ceci dans une macro :
Print #1, " " + RColonne
je voudrais faire un découpage d'une chaîne de caractères sur ce résultat
et aller chercher (l'élément découpé 1) dans une matrice A1:C6500;2;0 d'un
fichier valeurs.xls et renvoyer le résultat dans un fichier res.txt, id.
pour l'élément 2, etc.
For Each c In Range("E1", Range("E65536").End(xlUp))
For Each Item In Split(c)
Var = Application.VLookup(Item, Range("A1:C6500"), 2, 0)
If Not Application.IsNA(Var) Then
Print #1, Var
End If
Next Item
Next c
ensuite je ferme le tag
Cordialement.
Daniel
"Lionel" <lionel.barrand@gmail.com> a écrit dans le message de news:
u0Nt6FXnHHA.4872@TK2MSFTNGP03.phx.gbl...
Suite,
en fait j'ai ceci dans une macro :
Print #1, " " + RColonne
je voudrais faire un découpage d'une chaîne de caractères sur ce résultat
et aller chercher (l'élément découpé 1) dans une matrice A1:C6500;2;0 d'un
fichier valeurs.xls et renvoyer le résultat dans un fichier res.txt, id.
pour l'élément 2, etc.
For Each c In Range("E1", Range("E65536").End(xlUp))
For Each Item In Split(c)
Var = Application.VLookup(Item, Range("A1:C6500"), 2, 0)
If Not Application.IsNA(Var) Then
Print #1, Var
End If
Next Item
Next c
ensuite je ferme le tag
Cordialement.
Daniel
"Lionel" a écrit dans le message de news:Suite,
en fait j'ai ceci dans une macro :
Print #1, " " + RColonne
je voudrais faire un découpage d'une chaîne de caractères sur ce résultat
et aller chercher (l'élément découpé 1) dans une matrice A1:C6500;2;0 d'un
fichier valeurs.xls et renvoyer le résultat dans un fichier res.txt, id.
pour l'élément 2, etc.
c'est le résultat de cette insertion je souhaiterais spliter faire un
vlookup (sur uine matrice se trouvant dans un autre fichier)sur l'item et
renvoyer le résultat à écrire dans mon fichier xml.
c'est le résultat de cette insertion je souhaiterais spliter faire un
vlookup (sur uine matrice se trouvant dans un autre fichier)sur l'item et
renvoyer le résultat à écrire dans mon fichier xml.
c'est le résultat de cette insertion je souhaiterais spliter faire un
vlookup (sur uine matrice se trouvant dans un autre fichier)sur l'item et
renvoyer le résultat à écrire dans mon fichier xml.
c'est le résultat de cette insertion je souhaiterais spliter faire un
vlookup (sur uine matrice se trouvant dans un autre fichier)sur l'item et
renvoyer le résultat à écrire dans mon fichier xml.
J'ai du mal à comprendre ce que tu appelles "résultat de cette insertion".
Je me suis mal exprimé.
Pour le fichier externe, au lieu de :
Range("A1:C6500")
il faut coder :
Workbooks("toto.xls").sheets("Feuiln").Range("A1:C6500")
ok
Daniel
c'est le résultat de cette insertion je souhaiterais spliter faire un
vlookup (sur uine matrice se trouvant dans un autre fichier)sur l'item et
renvoyer le résultat à écrire dans mon fichier xml.
J'ai du mal à comprendre ce que tu appelles "résultat de cette insertion".
Je me suis mal exprimé.
Pour le fichier externe, au lieu de :
Range("A1:C6500")
il faut coder :
Workbooks("toto.xls").sheets("Feuiln").Range("A1:C6500")
ok
Daniel
c'est le résultat de cette insertion je souhaiterais spliter faire un
vlookup (sur uine matrice se trouvant dans un autre fichier)sur l'item et
renvoyer le résultat à écrire dans mon fichier xml.
J'ai du mal à comprendre ce que tu appelles "résultat de cette insertion".
Je me suis mal exprimé.
Pour le fichier externe, au lieu de :
Range("A1:C6500")
il faut coder :
Workbooks("toto.xls").sheets("Feuiln").Range("A1:C6500")
ok
Daniel
c'est le résultat de cette insertion je souhaiterais spliter faire un
vlookup (sur uine matrice se trouvant dans un autre fichier)sur l'item
et renvoyer le résultat à écrire dans mon fichier xml.
J'ai du mal à comprendre ce que tu appelles "résultat de cette
insertion".
Je me suis mal exprimé.
Print #1, " " + RColonne
m'écrit dans mon fichier ce qui se trouve dans la cellule pour l'instant.Pour le fichier externe, au lieu de :
Range("A1:C6500")
il faut coder :
Workbooks("toto.xls").sheets("Feuiln").Range("A1:C6500")
ok
Daniel
Si je m'explique mieux cela pourrait donner ça :
- pour l'ensemble des collones A, B, C de ma feuille
- conserver ça
For Each RColonne In Range(RLigne.Offset(0, 1),
RLigne.End(xlToRight))
' Si cellule vide, on ignore
If RColonne <> "" Then
' le nom de la balise est pris sur la premiere ligne
tagName = Intersect(RBase.EntireRow, RColonne.EntireColumn)
Print #1, " <attribute name="; Chr(34) & "" + tagName +
Chr(34) & " >"
If IsNumeric(RColonne) Then
Print #1, " " + Str(RColonne)
Else
Print #1, " " + RColonne
- pour une collone donnée D par exemple
- lire le contenu de la cellule D2
- si elle n'est pas vide découper le contenu
- item 1, 2, ... n (on l'appellera "item")
- je cherche dans toto.xls la matrice A:1C650;2;0 (on l'appellera "res")
- le résultat est écrit comme ceci <attribute
name="res1">item1</attribute>
- passer au suivant <attribute name="res2">item2</attribute>
- etc.
- passer à la cellule D3
- lorsque c'est fini continuer pour la colonne E comme pour les colonnes
A, B, C
Lionel
c'est le résultat de cette insertion je souhaiterais spliter faire un
vlookup (sur uine matrice se trouvant dans un autre fichier)sur l'item
et renvoyer le résultat à écrire dans mon fichier xml.
J'ai du mal à comprendre ce que tu appelles "résultat de cette
insertion".
Je me suis mal exprimé.
Print #1, " " + RColonne
m'écrit dans mon fichier ce qui se trouve dans la cellule pour l'instant.
Pour le fichier externe, au lieu de :
Range("A1:C6500")
il faut coder :
Workbooks("toto.xls").sheets("Feuiln").Range("A1:C6500")
ok
Daniel
Si je m'explique mieux cela pourrait donner ça :
- pour l'ensemble des collones A, B, C de ma feuille
- conserver ça
For Each RColonne In Range(RLigne.Offset(0, 1),
RLigne.End(xlToRight))
' Si cellule vide, on ignore
If RColonne <> "" Then
' le nom de la balise est pris sur la premiere ligne
tagName = Intersect(RBase.EntireRow, RColonne.EntireColumn)
Print #1, " <attribute name="; Chr(34) & "" + tagName +
Chr(34) & " >"
If IsNumeric(RColonne) Then
Print #1, " " + Str(RColonne)
Else
Print #1, " " + RColonne
- pour une collone donnée D par exemple
- lire le contenu de la cellule D2
- si elle n'est pas vide découper le contenu
- item 1, 2, ... n (on l'appellera "item")
- je cherche dans toto.xls la matrice A:1C650;2;0 (on l'appellera "res")
- le résultat est écrit comme ceci <attribute
name="res1">item1</attribute>
- passer au suivant <attribute name="res2">item2</attribute>
- etc.
- passer à la cellule D3
- lorsque c'est fini continuer pour la colonne E comme pour les colonnes
A, B, C
Lionel
c'est le résultat de cette insertion je souhaiterais spliter faire un
vlookup (sur uine matrice se trouvant dans un autre fichier)sur l'item
et renvoyer le résultat à écrire dans mon fichier xml.
J'ai du mal à comprendre ce que tu appelles "résultat de cette
insertion".
Je me suis mal exprimé.
Print #1, " " + RColonne
m'écrit dans mon fichier ce qui se trouve dans la cellule pour l'instant.Pour le fichier externe, au lieu de :
Range("A1:C6500")
il faut coder :
Workbooks("toto.xls").sheets("Feuiln").Range("A1:C6500")
ok
Daniel
Si je m'explique mieux cela pourrait donner ça :
- pour l'ensemble des collones A, B, C de ma feuille
- conserver ça
For Each RColonne In Range(RLigne.Offset(0, 1),
RLigne.End(xlToRight))
' Si cellule vide, on ignore
If RColonne <> "" Then
' le nom de la balise est pris sur la premiere ligne
tagName = Intersect(RBase.EntireRow, RColonne.EntireColumn)
Print #1, " <attribute name="; Chr(34) & "" + tagName +
Chr(34) & " >"
If IsNumeric(RColonne) Then
Print #1, " " + Str(RColonne)
Else
Print #1, " " + RColonne
- pour une collone donnée D par exemple
- lire le contenu de la cellule D2
- si elle n'est pas vide découper le contenu
- item 1, 2, ... n (on l'appellera "item")
- je cherche dans toto.xls la matrice A:1C650;2;0 (on l'appellera "res")
- le résultat est écrit comme ceci <attribute
name="res1">item1</attribute>
- passer au suivant <attribute name="res2">item2</attribute>
- etc.
- passer à la cellule D3
- lorsque c'est fini continuer pour la colonne E comme pour les colonnes
A, B, C
Lionel
Si j'ai compris, le traitement de la colonne D peut se voir comme suit :
Workbooks.Open "c:temptoto.xls"
ThisWorkbook.Activate
For Each c In Range("D2", Range("D65536").End(xlUp))
For Each Item In Split(c)
res = Application.VLookup(Item, _
Workbooks("toto.xls").Sheets("Feuil1").Range("res"), 2, 0)
If Not Application.IsNA(res) Then
Enrgt = "<attribute name=""" & res & """" & _
Item & "</attribute>"
Print #1, Enrgt
End If
Next Item
Next c
Workbooks("toto.xls").Close
(non testé)
Daniel
"L" a écrit dans le message de news:c'est le résultat de cette insertion je souhaiterais spliter faire un
vlookup (sur uine matrice se trouvant dans un autre fichier)sur l'item
et renvoyer le résultat à écrire dans mon fichier xml.
J'ai du mal à comprendre ce que tu appelles "résultat de cette
insertion".
Je me suis mal exprimé.
Print #1, " " + RColonne
m'écrit dans mon fichier ce qui se trouve dans la cellule pour l'instant.Pour le fichier externe, au lieu de :
Range("A1:C6500")
il faut coder :
Workbooks("toto.xls").sheets("Feuiln").Range("A1:C6500")
okDaniel
Si je m'explique mieux cela pourrait donner ça :
- pour l'ensemble des collones A, B, C de ma feuille
- conserver ça
For Each RColonne In Range(RLigne.Offset(0, 1),
RLigne.End(xlToRight))
' Si cellule vide, on ignore
If RColonne <> "" Then
' le nom de la balise est pris sur la premiere ligne
tagName = Intersect(RBase.EntireRow, RColonne.EntireColumn)
Print #1, " <attribute name="; Chr(34) & "" + tagName +
Chr(34) & " >"
If IsNumeric(RColonne) Then
Print #1, " " + Str(RColonne)
Else
Print #1, " " + RColonne
- pour une collone donnée D par exemple
- lire le contenu de la cellule D2
- si elle n'est pas vide découper le contenu
- item 1, 2, ... n (on l'appellera "item")
- je cherche dans toto.xls la matrice A:1C650;2;0 (on l'appellera "res")
- le résultat est écrit comme ceci <attribute
name="res1">item1</attribute>
- passer au suivant <attribute name="res2">item2</attribute>
- etc.
- passer à la cellule D3
- lorsque c'est fini continuer pour la colonne E comme pour les colonnes
A, B, C
Lionel
Si j'ai compris, le traitement de la colonne D peut se voir comme suit :
Workbooks.Open "c:temptoto.xls"
ThisWorkbook.Activate
For Each c In Range("D2", Range("D65536").End(xlUp))
For Each Item In Split(c)
res = Application.VLookup(Item, _
Workbooks("toto.xls").Sheets("Feuil1").Range("res"), 2, 0)
If Not Application.IsNA(res) Then
Enrgt = "<attribute name=""" & res & """" & _
Item & "</attribute>"
Print #1, Enrgt
End If
Next Item
Next c
Workbooks("toto.xls").Close
(non testé)
Daniel
"L" <lionel.barrand@gmail.com> a écrit dans le message de news:
eKELxxenHHA.1244@TK2MSFTNGP04.phx.gbl...
c'est le résultat de cette insertion je souhaiterais spliter faire un
vlookup (sur uine matrice se trouvant dans un autre fichier)sur l'item
et renvoyer le résultat à écrire dans mon fichier xml.
J'ai du mal à comprendre ce que tu appelles "résultat de cette
insertion".
Je me suis mal exprimé.
Print #1, " " + RColonne
m'écrit dans mon fichier ce qui se trouve dans la cellule pour l'instant.
Pour le fichier externe, au lieu de :
Range("A1:C6500")
il faut coder :
Workbooks("toto.xls").sheets("Feuiln").Range("A1:C6500")
ok
Daniel
Si je m'explique mieux cela pourrait donner ça :
- pour l'ensemble des collones A, B, C de ma feuille
- conserver ça
For Each RColonne In Range(RLigne.Offset(0, 1),
RLigne.End(xlToRight))
' Si cellule vide, on ignore
If RColonne <> "" Then
' le nom de la balise est pris sur la premiere ligne
tagName = Intersect(RBase.EntireRow, RColonne.EntireColumn)
Print #1, " <attribute name="; Chr(34) & "" + tagName +
Chr(34) & " >"
If IsNumeric(RColonne) Then
Print #1, " " + Str(RColonne)
Else
Print #1, " " + RColonne
- pour une collone donnée D par exemple
- lire le contenu de la cellule D2
- si elle n'est pas vide découper le contenu
- item 1, 2, ... n (on l'appellera "item")
- je cherche dans toto.xls la matrice A:1C650;2;0 (on l'appellera "res")
- le résultat est écrit comme ceci <attribute
name="res1">item1</attribute>
- passer au suivant <attribute name="res2">item2</attribute>
- etc.
- passer à la cellule D3
- lorsque c'est fini continuer pour la colonne E comme pour les colonnes
A, B, C
Lionel
Si j'ai compris, le traitement de la colonne D peut se voir comme suit :
Workbooks.Open "c:temptoto.xls"
ThisWorkbook.Activate
For Each c In Range("D2", Range("D65536").End(xlUp))
For Each Item In Split(c)
res = Application.VLookup(Item, _
Workbooks("toto.xls").Sheets("Feuil1").Range("res"), 2, 0)
If Not Application.IsNA(res) Then
Enrgt = "<attribute name=""" & res & """" & _
Item & "</attribute>"
Print #1, Enrgt
End If
Next Item
Next c
Workbooks("toto.xls").Close
(non testé)
Daniel
"L" a écrit dans le message de news:c'est le résultat de cette insertion je souhaiterais spliter faire un
vlookup (sur uine matrice se trouvant dans un autre fichier)sur l'item
et renvoyer le résultat à écrire dans mon fichier xml.
J'ai du mal à comprendre ce que tu appelles "résultat de cette
insertion".
Je me suis mal exprimé.
Print #1, " " + RColonne
m'écrit dans mon fichier ce qui se trouve dans la cellule pour l'instant.Pour le fichier externe, au lieu de :
Range("A1:C6500")
il faut coder :
Workbooks("toto.xls").sheets("Feuiln").Range("A1:C6500")
okDaniel
Si je m'explique mieux cela pourrait donner ça :
- pour l'ensemble des collones A, B, C de ma feuille
- conserver ça
For Each RColonne In Range(RLigne.Offset(0, 1),
RLigne.End(xlToRight))
' Si cellule vide, on ignore
If RColonne <> "" Then
' le nom de la balise est pris sur la premiere ligne
tagName = Intersect(RBase.EntireRow, RColonne.EntireColumn)
Print #1, " <attribute name="; Chr(34) & "" + tagName +
Chr(34) & " >"
If IsNumeric(RColonne) Then
Print #1, " " + Str(RColonne)
Else
Print #1, " " + RColonne
- pour une collone donnée D par exemple
- lire le contenu de la cellule D2
- si elle n'est pas vide découper le contenu
- item 1, 2, ... n (on l'appellera "item")
- je cherche dans toto.xls la matrice A:1C650;2;0 (on l'appellera "res")
- le résultat est écrit comme ceci <attribute
name="res1">item1</attribute>
- passer au suivant <attribute name="res2">item2</attribute>
- etc.
- passer à la cellule D3
- lorsque c'est fini continuer pour la colonne E comme pour les colonnes
A, B, C
Lionel
vraiment merci Daniel, mais j'ai bien du mal à le mettre en place vu que
je n'y connais pas grand chose en VBA. je suis un poil perdu là ! en même
temps j'essaie de mettre cela dans une macro existante (ceci explique
peut-être cela !?)
En bref, voici mon code :
Sub createXmlFile()
Dim RBase As Range, RLigne As Range, RColonne As Range
Dim tagName As String
Set RBase = Range("BaseTableau") ' nommer la première colonne du
tableau "BaseTableau"
Open "C:Documents and SettingsLionelBureau2xml.xml" For Output As 1
Print #1, "<mon_document>"
' balayer les lignes
For Each RLigne In Range(RBase.Offset(1), RBase.End(xlDown))
'nom du node
Print #1, "<sujet>"
' valeur du node
Print #1, " " + Mid(RLigne, 2)
' ecriture des childnodes
For Each RColonne In Range(RLigne.Offset(0, 1),
RLigne.End(xlToRight))
' Si cellule vide, on ignore
If RColonne <> "" Then
' le nom de la balise est pris sur la premiere ligne
tagName = Intersect(RBase.EntireRow, RColonne.EntireColumn)
Print #1, " <" + tagName + ">"
If IsNumeric(RColonne) Then
Print #1, " " + Str(RColonne)
Else
Print #1, " " + RColonne
End If
Print #1, " </" + tagName + ">"
End If
Next
Print #1, "</s>"
Next
Print #1, "</mon_document>"
Close 1
End Sub
cela fonctionne bien et me donne un truc du genre
<?xml version="1.0" encoding="ISO-8859-1"?>
<mon_document>
<s>
SB
<Pilote>
P
</Pilote>
<tour>
t
</tour>
<comptage>
compt
</comptage>
<trl>
ah ça a bougé c' est ça ?
</trl>
etc ...
</mon_document>
pour "s", "pilote, "tour", "comptage" et "trl" les étiquettes en A1, B1,
C1 et D1 de mes colonnes. Ce que j'aimerais faire maintenant c'est pour la
colonne D (et uniquement celle_là) qui donne le résultat
<trl>
ah ça a bougé c' est ça ?
</trl>
faire en plus un découpage de la chaîne, tel que :
ah - et aller chercher dans une matrice
ça - et aller chercher dans une matrice
a - et aller chercher dans une matrice
bougé - et aller chercher dans une matrice
c' - et aller chercher dans une matrice
ça - et aller chercher dans une matrice
? - et aller chercher dans une matrice
puis écrire à la fois l'item et le résultat de la recherche (vlookup())
pour un résultat attendu du genre :
<mot>
ah
<resultat>
interjection
</résultat>
</mot>
<mot>
ça
<resultat>
pronom_demonstratif
</résultat>
</mot>
ou bien :
<mot attribute="interjection">
ah
</mot>
<mot attribute="pronom_démonstratif">
ça
</mot>
etc ...
ensuite il continue à traiter les autres colonnes comme avant.
Je n'ai pas pu tester ta proposition puisque je n'arrive pas à
l'implémenter dans le bout de code que j'ai (c'est pourquoi il est plus
simple que je mette directement ce bout de code).
LionelSi j'ai compris, le traitement de la colonne D peut se voir comme suit :
Workbooks.Open "c:temptoto.xls"
ThisWorkbook.Activate
For Each c In Range("D2", Range("D65536").End(xlUp))
For Each Item In Split(c)
res = Application.VLookup(Item, _
Workbooks("toto.xls").Sheets("Feuil1").Range("res"), 2, 0)
If Not Application.IsNA(res) Then
Enrgt = "<attribute name=""" & res & """" & _
Item & "</attribute>"
Print #1, Enrgt
End If
Next Item
Next c
Workbooks("toto.xls").Close
(non testé)
Daniel
"L" a écrit dans le message de news:c'est le résultat de cette insertion je souhaiterais spliter faire un
vlookup (sur uine matrice se trouvant dans un autre fichier)sur l'item
et renvoyer le résultat à écrire dans mon fichier xml.
J'ai du mal à comprendre ce que tu appelles "résultat de cette
insertion".
Je me suis mal exprimé.
Print #1, " " + RColonne
m'écrit dans mon fichier ce qui se trouve dans la cellule pour
l'instant.Pour le fichier externe, au lieu de :
Range("A1:C6500")
il faut coder :
Workbooks("toto.xls").sheets("Feuiln").Range("A1:C6500")
okDaniel
Si je m'explique mieux cela pourrait donner ça :
- pour l'ensemble des collones A, B, C de ma feuille
- conserver ça
For Each RColonne In Range(RLigne.Offset(0, 1),
RLigne.End(xlToRight))
' Si cellule vide, on ignore
If RColonne <> "" Then
' le nom de la balise est pris sur la premiere ligne
tagName = Intersect(RBase.EntireRow,
RColonne.EntireColumn)
Print #1, " <attribute name="; Chr(34) & "" + tagName +
Chr(34) & " >"
If IsNumeric(RColonne) Then
Print #1, " " + Str(RColonne)
Else
Print #1, " " + RColonne
- pour une collone donnée D par exemple
- lire le contenu de la cellule D2
- si elle n'est pas vide découper le contenu
- item 1, 2, ... n (on l'appellera "item")
- je cherche dans toto.xls la matrice A:1C650;2;0 (on l'appellera "res")
- le résultat est écrit comme ceci <attribute
name="res1">item1</attribute>
- passer au suivant <attribute name="res2">item2</attribute>
- etc.
- passer à la cellule D3
- lorsque c'est fini continuer pour la colonne E comme pour les colonnes
A, B, C
Lionel
vraiment merci Daniel, mais j'ai bien du mal à le mettre en place vu que
je n'y connais pas grand chose en VBA. je suis un poil perdu là ! en même
temps j'essaie de mettre cela dans une macro existante (ceci explique
peut-être cela !?)
En bref, voici mon code :
Sub createXmlFile()
Dim RBase As Range, RLigne As Range, RColonne As Range
Dim tagName As String
Set RBase = Range("BaseTableau") ' nommer la première colonne du
tableau "BaseTableau"
Open "C:Documents and SettingsLionelBureau2xml.xml" For Output As 1
Print #1, "<mon_document>"
' balayer les lignes
For Each RLigne In Range(RBase.Offset(1), RBase.End(xlDown))
'nom du node
Print #1, "<sujet>"
' valeur du node
Print #1, " " + Mid(RLigne, 2)
' ecriture des childnodes
For Each RColonne In Range(RLigne.Offset(0, 1),
RLigne.End(xlToRight))
' Si cellule vide, on ignore
If RColonne <> "" Then
' le nom de la balise est pris sur la premiere ligne
tagName = Intersect(RBase.EntireRow, RColonne.EntireColumn)
Print #1, " <" + tagName + ">"
If IsNumeric(RColonne) Then
Print #1, " " + Str(RColonne)
Else
Print #1, " " + RColonne
End If
Print #1, " </" + tagName + ">"
End If
Next
Print #1, "</s>"
Next
Print #1, "</mon_document>"
Close 1
End Sub
cela fonctionne bien et me donne un truc du genre
<?xml version="1.0" encoding="ISO-8859-1"?>
<mon_document>
<s>
SB
<Pilote>
P
</Pilote>
<tour>
t
</tour>
<comptage>
compt
</comptage>
<trl>
ah ça a bougé c' est ça ?
</trl>
etc ...
</mon_document>
pour "s", "pilote, "tour", "comptage" et "trl" les étiquettes en A1, B1,
C1 et D1 de mes colonnes. Ce que j'aimerais faire maintenant c'est pour la
colonne D (et uniquement celle_là) qui donne le résultat
<trl>
ah ça a bougé c' est ça ?
</trl>
faire en plus un découpage de la chaîne, tel que :
ah - et aller chercher dans une matrice
ça - et aller chercher dans une matrice
a - et aller chercher dans une matrice
bougé - et aller chercher dans une matrice
c' - et aller chercher dans une matrice
ça - et aller chercher dans une matrice
? - et aller chercher dans une matrice
puis écrire à la fois l'item et le résultat de la recherche (vlookup())
pour un résultat attendu du genre :
<mot>
ah
<resultat>
interjection
</résultat>
</mot>
<mot>
ça
<resultat>
pronom_demonstratif
</résultat>
</mot>
ou bien :
<mot attribute="interjection">
ah
</mot>
<mot attribute="pronom_démonstratif">
ça
</mot>
etc ...
ensuite il continue à traiter les autres colonnes comme avant.
Je n'ai pas pu tester ta proposition puisque je n'arrive pas à
l'implémenter dans le bout de code que j'ai (c'est pourquoi il est plus
simple que je mette directement ce bout de code).
Lionel
Si j'ai compris, le traitement de la colonne D peut se voir comme suit :
Workbooks.Open "c:temptoto.xls"
ThisWorkbook.Activate
For Each c In Range("D2", Range("D65536").End(xlUp))
For Each Item In Split(c)
res = Application.VLookup(Item, _
Workbooks("toto.xls").Sheets("Feuil1").Range("res"), 2, 0)
If Not Application.IsNA(res) Then
Enrgt = "<attribute name=""" & res & """" & _
Item & "</attribute>"
Print #1, Enrgt
End If
Next Item
Next c
Workbooks("toto.xls").Close
(non testé)
Daniel
"L" <lionel.barrand@gmail.com> a écrit dans le message de news:
eKELxxenHHA.1244@TK2MSFTNGP04.phx.gbl...
c'est le résultat de cette insertion je souhaiterais spliter faire un
vlookup (sur uine matrice se trouvant dans un autre fichier)sur l'item
et renvoyer le résultat à écrire dans mon fichier xml.
J'ai du mal à comprendre ce que tu appelles "résultat de cette
insertion".
Je me suis mal exprimé.
Print #1, " " + RColonne
m'écrit dans mon fichier ce qui se trouve dans la cellule pour
l'instant.
Pour le fichier externe, au lieu de :
Range("A1:C6500")
il faut coder :
Workbooks("toto.xls").sheets("Feuiln").Range("A1:C6500")
ok
Daniel
Si je m'explique mieux cela pourrait donner ça :
- pour l'ensemble des collones A, B, C de ma feuille
- conserver ça
For Each RColonne In Range(RLigne.Offset(0, 1),
RLigne.End(xlToRight))
' Si cellule vide, on ignore
If RColonne <> "" Then
' le nom de la balise est pris sur la premiere ligne
tagName = Intersect(RBase.EntireRow,
RColonne.EntireColumn)
Print #1, " <attribute name="; Chr(34) & "" + tagName +
Chr(34) & " >"
If IsNumeric(RColonne) Then
Print #1, " " + Str(RColonne)
Else
Print #1, " " + RColonne
- pour une collone donnée D par exemple
- lire le contenu de la cellule D2
- si elle n'est pas vide découper le contenu
- item 1, 2, ... n (on l'appellera "item")
- je cherche dans toto.xls la matrice A:1C650;2;0 (on l'appellera "res")
- le résultat est écrit comme ceci <attribute
name="res1">item1</attribute>
- passer au suivant <attribute name="res2">item2</attribute>
- etc.
- passer à la cellule D3
- lorsque c'est fini continuer pour la colonne E comme pour les colonnes
A, B, C
Lionel
vraiment merci Daniel, mais j'ai bien du mal à le mettre en place vu que
je n'y connais pas grand chose en VBA. je suis un poil perdu là ! en même
temps j'essaie de mettre cela dans une macro existante (ceci explique
peut-être cela !?)
En bref, voici mon code :
Sub createXmlFile()
Dim RBase As Range, RLigne As Range, RColonne As Range
Dim tagName As String
Set RBase = Range("BaseTableau") ' nommer la première colonne du
tableau "BaseTableau"
Open "C:Documents and SettingsLionelBureau2xml.xml" For Output As 1
Print #1, "<mon_document>"
' balayer les lignes
For Each RLigne In Range(RBase.Offset(1), RBase.End(xlDown))
'nom du node
Print #1, "<sujet>"
' valeur du node
Print #1, " " + Mid(RLigne, 2)
' ecriture des childnodes
For Each RColonne In Range(RLigne.Offset(0, 1),
RLigne.End(xlToRight))
' Si cellule vide, on ignore
If RColonne <> "" Then
' le nom de la balise est pris sur la premiere ligne
tagName = Intersect(RBase.EntireRow, RColonne.EntireColumn)
Print #1, " <" + tagName + ">"
If IsNumeric(RColonne) Then
Print #1, " " + Str(RColonne)
Else
Print #1, " " + RColonne
End If
Print #1, " </" + tagName + ">"
End If
Next
Print #1, "</s>"
Next
Print #1, "</mon_document>"
Close 1
End Sub
cela fonctionne bien et me donne un truc du genre
<?xml version="1.0" encoding="ISO-8859-1"?>
<mon_document>
<s>
SB
<Pilote>
P
</Pilote>
<tour>
t
</tour>
<comptage>
compt
</comptage>
<trl>
ah ça a bougé c' est ça ?
</trl>
etc ...
</mon_document>
pour "s", "pilote, "tour", "comptage" et "trl" les étiquettes en A1, B1,
C1 et D1 de mes colonnes. Ce que j'aimerais faire maintenant c'est pour la
colonne D (et uniquement celle_là) qui donne le résultat
<trl>
ah ça a bougé c' est ça ?
</trl>
faire en plus un découpage de la chaîne, tel que :
ah - et aller chercher dans une matrice
ça - et aller chercher dans une matrice
a - et aller chercher dans une matrice
bougé - et aller chercher dans une matrice
c' - et aller chercher dans une matrice
ça - et aller chercher dans une matrice
? - et aller chercher dans une matrice
puis écrire à la fois l'item et le résultat de la recherche (vlookup())
pour un résultat attendu du genre :
<mot>
ah
<resultat>
interjection
</résultat>
</mot>
<mot>
ça
<resultat>
pronom_demonstratif
</résultat>
</mot>
ou bien :
<mot attribute="interjection">
ah
</mot>
<mot attribute="pronom_démonstratif">
ça
</mot>
etc ...
ensuite il continue à traiter les autres colonnes comme avant.
Je n'ai pas pu tester ta proposition puisque je n'arrive pas à
l'implémenter dans le bout de code que j'ai (c'est pourquoi il est plus
simple que je mette directement ce bout de code).
LionelSi j'ai compris, le traitement de la colonne D peut se voir comme suit :
Workbooks.Open "c:temptoto.xls"
ThisWorkbook.Activate
For Each c In Range("D2", Range("D65536").End(xlUp))
For Each Item In Split(c)
res = Application.VLookup(Item, _
Workbooks("toto.xls").Sheets("Feuil1").Range("res"), 2, 0)
If Not Application.IsNA(res) Then
Enrgt = "<attribute name=""" & res & """" & _
Item & "</attribute>"
Print #1, Enrgt
End If
Next Item
Next c
Workbooks("toto.xls").Close
(non testé)
Daniel
"L" a écrit dans le message de news:c'est le résultat de cette insertion je souhaiterais spliter faire un
vlookup (sur uine matrice se trouvant dans un autre fichier)sur l'item
et renvoyer le résultat à écrire dans mon fichier xml.
J'ai du mal à comprendre ce que tu appelles "résultat de cette
insertion".
Je me suis mal exprimé.
Print #1, " " + RColonne
m'écrit dans mon fichier ce qui se trouve dans la cellule pour
l'instant.Pour le fichier externe, au lieu de :
Range("A1:C6500")
il faut coder :
Workbooks("toto.xls").sheets("Feuiln").Range("A1:C6500")
okDaniel
Si je m'explique mieux cela pourrait donner ça :
- pour l'ensemble des collones A, B, C de ma feuille
- conserver ça
For Each RColonne In Range(RLigne.Offset(0, 1),
RLigne.End(xlToRight))
' Si cellule vide, on ignore
If RColonne <> "" Then
' le nom de la balise est pris sur la premiere ligne
tagName = Intersect(RBase.EntireRow,
RColonne.EntireColumn)
Print #1, " <attribute name="; Chr(34) & "" + tagName +
Chr(34) & " >"
If IsNumeric(RColonne) Then
Print #1, " " + Str(RColonne)
Else
Print #1, " " + RColonne
- pour une collone donnée D par exemple
- lire le contenu de la cellule D2
- si elle n'est pas vide découper le contenu
- item 1, 2, ... n (on l'appellera "item")
- je cherche dans toto.xls la matrice A:1C650;2;0 (on l'appellera "res")
- le résultat est écrit comme ceci <attribute
name="res1">item1</attribute>
- passer au suivant <attribute name="res2">item2</attribute>
- etc.
- passer à la cellule D3
- lorsque c'est fini continuer pour la colonne E comme pour les colonnes
A, B, C
Lionel
Ce n'est pas facile du tout pour apprécier quand tu commences à traiter la
colonne E. Le mieux serait que tu mettes ton classeur ou, au moins la
feuille active, sur www.cjoint.com en effaçant les données confidentielles,
s'il y en a.
Daniel
"L" a écrit dans le message de news:vraiment merci Daniel, mais j'ai bien du mal à le mettre en place vu que
je n'y connais pas grand chose en VBA. je suis un poil perdu là ! en même
temps j'essaie de mettre cela dans une macro existante (ceci explique
peut-être cela !?)
En bref, voici mon code :
Sub createXmlFile()
Dim RBase As Range, RLigne As Range, RColonne As Range
Dim tagName As String
Set RBase = Range("BaseTableau") ' nommer la première colonne du
tableau "BaseTableau"
Open "C:Documents and SettingsLionelBureau2xml.xml" For Output As 1
Print #1, "<mon_document>"
' balayer les lignes
For Each RLigne In Range(RBase.Offset(1), RBase.End(xlDown))
'nom du node
Print #1, "<sujet>"
' valeur du node
Print #1, " " + Mid(RLigne, 2)
' ecriture des childnodes
For Each RColonne In Range(RLigne.Offset(0, 1),
RLigne.End(xlToRight))
' Si cellule vide, on ignore
If RColonne <> "" Then
' le nom de la balise est pris sur la premiere ligne
tagName = Intersect(RBase.EntireRow, RColonne.EntireColumn)
Print #1, " <" + tagName + ">"
If IsNumeric(RColonne) Then
Print #1, " " + Str(RColonne)
Else
Print #1, " " + RColonne
End If
Print #1, " </" + tagName + ">"
End If
Next
Print #1, "</s>"
Next
Print #1, "</mon_document>"
Close 1
End Sub
cela fonctionne bien et me donne un truc du genre
<?xml version="1.0" encoding="ISO-8859-1"?>
<mon_document>
<s>
SB
<Pilote>
P
</Pilote>
<tour>
t
</tour>
<comptage>
compt
</comptage>
<trl>
ah ça a bougé c' est ça ?
</trl>
etc ...
</mon_document>
pour "s", "pilote, "tour", "comptage" et "trl" les étiquettes en A1, B1,
C1 et D1 de mes colonnes. Ce que j'aimerais faire maintenant c'est pour la
colonne D (et uniquement celle_là) qui donne le résultat
<trl>
ah ça a bougé c' est ça ?
</trl>
faire en plus un découpage de la chaîne, tel que :
ah - et aller chercher dans une matrice
ça - et aller chercher dans une matrice
a - et aller chercher dans une matrice
bougé - et aller chercher dans une matrice
c' - et aller chercher dans une matrice
ça - et aller chercher dans une matrice
? - et aller chercher dans une matrice
puis écrire à la fois l'item et le résultat de la recherche (vlookup())
pour un résultat attendu du genre :
<mot>
ah
<resultat>
interjection
</résultat>
</mot>
<mot>
ça
<resultat>
pronom_demonstratif
</résultat>
</mot>
ou bien :
<mot attribute="interjection">
ah
</mot>
<mot attribute="pronom_démonstratif">
ça
</mot>
etc ...
ensuite il continue à traiter les autres colonnes comme avant.
Je n'ai pas pu tester ta proposition puisque je n'arrive pas à
l'implémenter dans le bout de code que j'ai (c'est pourquoi il est plus
simple que je mette directement ce bout de code).
LionelSi j'ai compris, le traitement de la colonne D peut se voir comme suit :
Workbooks.Open "c:temptoto.xls"
ThisWorkbook.Activate
For Each c In Range("D2", Range("D65536").End(xlUp))
For Each Item In Split(c)
res = Application.VLookup(Item, _
Workbooks("toto.xls").Sheets("Feuil1").Range("res"), 2, 0)
If Not Application.IsNA(res) Then
Enrgt = "<attribute name=""" & res & """" & _
Item & "</attribute>"
Print #1, Enrgt
End If
Next Item
Next c
Workbooks("toto.xls").Close
(non testé)
Daniel
"L" a écrit dans le message de news:c'est le résultat de cette insertion je souhaiterais spliter faire un
vlookup (sur uine matrice se trouvant dans un autre fichier)sur l'item
et renvoyer le résultat à écrire dans mon fichier xml.
J'ai du mal à comprendre ce que tu appelles "résultat de cette
insertion".
Je me suis mal exprimé.
Print #1, " " + RColonne
m'écrit dans mon fichier ce qui se trouve dans la cellule pour
l'instant.Pour le fichier externe, au lieu de :
Range("A1:C6500")
il faut coder :
Workbooks("toto.xls").sheets("Feuiln").Range("A1:C6500")
okDaniel
Si je m'explique mieux cela pourrait donner ça :
- pour l'ensemble des collones A, B, C de ma feuille
- conserver ça
For Each RColonne In Range(RLigne.Offset(0, 1),
RLigne.End(xlToRight))
' Si cellule vide, on ignore
If RColonne <> "" Then
' le nom de la balise est pris sur la premiere ligne
tagName = Intersect(RBase.EntireRow,
RColonne.EntireColumn)
Print #1, " <attribute name="; Chr(34) & "" + tagName +
Chr(34) & " >"
If IsNumeric(RColonne) Then
Print #1, " " + Str(RColonne)
Else
Print #1, " " + RColonne
- pour une collone donnée D par exemple
- lire le contenu de la cellule D2
- si elle n'est pas vide découper le contenu
- item 1, 2, ... n (on l'appellera "item")
- je cherche dans toto.xls la matrice A:1C650;2;0 (on l'appellera "res")
- le résultat est écrit comme ceci <attribute
name="res1">item1</attribute>
- passer au suivant <attribute name="res2">item2</attribute>
- etc.
- passer à la cellule D3
- lorsque c'est fini continuer pour la colonne E comme pour les colonnes
A, B, C
Lionel
Ce n'est pas facile du tout pour apprécier quand tu commences à traiter la
colonne E. Le mieux serait que tu mettes ton classeur ou, au moins la
feuille active, sur www.cjoint.com en effaçant les données confidentielles,
s'il y en a.
Daniel
"L" <lionel.barrand@gmail.com> a écrit dans le message de news:
465593B1.8060005@gmail.com...
vraiment merci Daniel, mais j'ai bien du mal à le mettre en place vu que
je n'y connais pas grand chose en VBA. je suis un poil perdu là ! en même
temps j'essaie de mettre cela dans une macro existante (ceci explique
peut-être cela !?)
En bref, voici mon code :
Sub createXmlFile()
Dim RBase As Range, RLigne As Range, RColonne As Range
Dim tagName As String
Set RBase = Range("BaseTableau") ' nommer la première colonne du
tableau "BaseTableau"
Open "C:Documents and SettingsLionelBureau2xml.xml" For Output As 1
Print #1, "<mon_document>"
' balayer les lignes
For Each RLigne In Range(RBase.Offset(1), RBase.End(xlDown))
'nom du node
Print #1, "<sujet>"
' valeur du node
Print #1, " " + Mid(RLigne, 2)
' ecriture des childnodes
For Each RColonne In Range(RLigne.Offset(0, 1),
RLigne.End(xlToRight))
' Si cellule vide, on ignore
If RColonne <> "" Then
' le nom de la balise est pris sur la premiere ligne
tagName = Intersect(RBase.EntireRow, RColonne.EntireColumn)
Print #1, " <" + tagName + ">"
If IsNumeric(RColonne) Then
Print #1, " " + Str(RColonne)
Else
Print #1, " " + RColonne
End If
Print #1, " </" + tagName + ">"
End If
Next
Print #1, "</s>"
Next
Print #1, "</mon_document>"
Close 1
End Sub
cela fonctionne bien et me donne un truc du genre
<?xml version="1.0" encoding="ISO-8859-1"?>
<mon_document>
<s>
SB
<Pilote>
P
</Pilote>
<tour>
t
</tour>
<comptage>
compt
</comptage>
<trl>
ah ça a bougé c' est ça ?
</trl>
etc ...
</mon_document>
pour "s", "pilote, "tour", "comptage" et "trl" les étiquettes en A1, B1,
C1 et D1 de mes colonnes. Ce que j'aimerais faire maintenant c'est pour la
colonne D (et uniquement celle_là) qui donne le résultat
<trl>
ah ça a bougé c' est ça ?
</trl>
faire en plus un découpage de la chaîne, tel que :
ah - et aller chercher dans une matrice
ça - et aller chercher dans une matrice
a - et aller chercher dans une matrice
bougé - et aller chercher dans une matrice
c' - et aller chercher dans une matrice
ça - et aller chercher dans une matrice
? - et aller chercher dans une matrice
puis écrire à la fois l'item et le résultat de la recherche (vlookup())
pour un résultat attendu du genre :
<mot>
ah
<resultat>
interjection
</résultat>
</mot>
<mot>
ça
<resultat>
pronom_demonstratif
</résultat>
</mot>
ou bien :
<mot attribute="interjection">
ah
</mot>
<mot attribute="pronom_démonstratif">
ça
</mot>
etc ...
ensuite il continue à traiter les autres colonnes comme avant.
Je n'ai pas pu tester ta proposition puisque je n'arrive pas à
l'implémenter dans le bout de code que j'ai (c'est pourquoi il est plus
simple que je mette directement ce bout de code).
Lionel
Si j'ai compris, le traitement de la colonne D peut se voir comme suit :
Workbooks.Open "c:temptoto.xls"
ThisWorkbook.Activate
For Each c In Range("D2", Range("D65536").End(xlUp))
For Each Item In Split(c)
res = Application.VLookup(Item, _
Workbooks("toto.xls").Sheets("Feuil1").Range("res"), 2, 0)
If Not Application.IsNA(res) Then
Enrgt = "<attribute name=""" & res & """" & _
Item & "</attribute>"
Print #1, Enrgt
End If
Next Item
Next c
Workbooks("toto.xls").Close
(non testé)
Daniel
"L" <lionel.barrand@gmail.com> a écrit dans le message de news:
eKELxxenHHA.1244@TK2MSFTNGP04.phx.gbl...
c'est le résultat de cette insertion je souhaiterais spliter faire un
vlookup (sur uine matrice se trouvant dans un autre fichier)sur l'item
et renvoyer le résultat à écrire dans mon fichier xml.
J'ai du mal à comprendre ce que tu appelles "résultat de cette
insertion".
Je me suis mal exprimé.
Print #1, " " + RColonne
m'écrit dans mon fichier ce qui se trouve dans la cellule pour
l'instant.
Pour le fichier externe, au lieu de :
Range("A1:C6500")
il faut coder :
Workbooks("toto.xls").sheets("Feuiln").Range("A1:C6500")
ok
Daniel
Si je m'explique mieux cela pourrait donner ça :
- pour l'ensemble des collones A, B, C de ma feuille
- conserver ça
For Each RColonne In Range(RLigne.Offset(0, 1),
RLigne.End(xlToRight))
' Si cellule vide, on ignore
If RColonne <> "" Then
' le nom de la balise est pris sur la premiere ligne
tagName = Intersect(RBase.EntireRow,
RColonne.EntireColumn)
Print #1, " <attribute name="; Chr(34) & "" + tagName +
Chr(34) & " >"
If IsNumeric(RColonne) Then
Print #1, " " + Str(RColonne)
Else
Print #1, " " + RColonne
- pour une collone donnée D par exemple
- lire le contenu de la cellule D2
- si elle n'est pas vide découper le contenu
- item 1, 2, ... n (on l'appellera "item")
- je cherche dans toto.xls la matrice A:1C650;2;0 (on l'appellera "res")
- le résultat est écrit comme ceci <attribute
name="res1">item1</attribute>
- passer au suivant <attribute name="res2">item2</attribute>
- etc.
- passer à la cellule D3
- lorsque c'est fini continuer pour la colonne E comme pour les colonnes
A, B, C
Lionel
Ce n'est pas facile du tout pour apprécier quand tu commences à traiter la
colonne E. Le mieux serait que tu mettes ton classeur ou, au moins la
feuille active, sur www.cjoint.com en effaçant les données confidentielles,
s'il y en a.
Daniel
"L" a écrit dans le message de news:vraiment merci Daniel, mais j'ai bien du mal à le mettre en place vu que
je n'y connais pas grand chose en VBA. je suis un poil perdu là ! en même
temps j'essaie de mettre cela dans une macro existante (ceci explique
peut-être cela !?)
En bref, voici mon code :
Sub createXmlFile()
Dim RBase As Range, RLigne As Range, RColonne As Range
Dim tagName As String
Set RBase = Range("BaseTableau") ' nommer la première colonne du
tableau "BaseTableau"
Open "C:Documents and SettingsLionelBureau2xml.xml" For Output As 1
Print #1, "<mon_document>"
' balayer les lignes
For Each RLigne In Range(RBase.Offset(1), RBase.End(xlDown))
'nom du node
Print #1, "<sujet>"
' valeur du node
Print #1, " " + Mid(RLigne, 2)
' ecriture des childnodes
For Each RColonne In Range(RLigne.Offset(0, 1),
RLigne.End(xlToRight))
' Si cellule vide, on ignore
If RColonne <> "" Then
' le nom de la balise est pris sur la premiere ligne
tagName = Intersect(RBase.EntireRow, RColonne.EntireColumn)
Print #1, " <" + tagName + ">"
If IsNumeric(RColonne) Then
Print #1, " " + Str(RColonne)
Else
Print #1, " " + RColonne
End If
Print #1, " </" + tagName + ">"
End If
Next
Print #1, "</s>"
Next
Print #1, "</mon_document>"
Close 1
End Sub
cela fonctionne bien et me donne un truc du genre
<?xml version="1.0" encoding="ISO-8859-1"?>
<mon_document>
<s>
SB
<Pilote>
P
</Pilote>
<tour>
t
</tour>
<comptage>
compt
</comptage>
<trl>
ah ça a bougé c' est ça ?
</trl>
etc ...
</mon_document>
pour "s", "pilote, "tour", "comptage" et "trl" les étiquettes en A1, B1,
C1 et D1 de mes colonnes. Ce que j'aimerais faire maintenant c'est pour la
colonne D (et uniquement celle_là) qui donne le résultat
<trl>
ah ça a bougé c' est ça ?
</trl>
faire en plus un découpage de la chaîne, tel que :
ah - et aller chercher dans une matrice
ça - et aller chercher dans une matrice
a - et aller chercher dans une matrice
bougé - et aller chercher dans une matrice
c' - et aller chercher dans une matrice
ça - et aller chercher dans une matrice
? - et aller chercher dans une matrice
puis écrire à la fois l'item et le résultat de la recherche (vlookup())
pour un résultat attendu du genre :
<mot>
ah
<resultat>
interjection
</résultat>
</mot>
<mot>
ça
<resultat>
pronom_demonstratif
</résultat>
</mot>
ou bien :
<mot attribute="interjection">
ah
</mot>
<mot attribute="pronom_démonstratif">
ça
</mot>
etc ...
ensuite il continue à traiter les autres colonnes comme avant.
Je n'ai pas pu tester ta proposition puisque je n'arrive pas à
l'implémenter dans le bout de code que j'ai (c'est pourquoi il est plus
simple que je mette directement ce bout de code).
LionelSi j'ai compris, le traitement de la colonne D peut se voir comme suit :
Workbooks.Open "c:temptoto.xls"
ThisWorkbook.Activate
For Each c In Range("D2", Range("D65536").End(xlUp))
For Each Item In Split(c)
res = Application.VLookup(Item, _
Workbooks("toto.xls").Sheets("Feuil1").Range("res"), 2, 0)
If Not Application.IsNA(res) Then
Enrgt = "<attribute name=""" & res & """" & _
Item & "</attribute>"
Print #1, Enrgt
End If
Next Item
Next c
Workbooks("toto.xls").Close
(non testé)
Daniel
"L" a écrit dans le message de news:c'est le résultat de cette insertion je souhaiterais spliter faire un
vlookup (sur uine matrice se trouvant dans un autre fichier)sur l'item
et renvoyer le résultat à écrire dans mon fichier xml.
J'ai du mal à comprendre ce que tu appelles "résultat de cette
insertion".
Je me suis mal exprimé.
Print #1, " " + RColonne
m'écrit dans mon fichier ce qui se trouve dans la cellule pour
l'instant.Pour le fichier externe, au lieu de :
Range("A1:C6500")
il faut coder :
Workbooks("toto.xls").sheets("Feuiln").Range("A1:C6500")
okDaniel
Si je m'explique mieux cela pourrait donner ça :
- pour l'ensemble des collones A, B, C de ma feuille
- conserver ça
For Each RColonne In Range(RLigne.Offset(0, 1),
RLigne.End(xlToRight))
' Si cellule vide, on ignore
If RColonne <> "" Then
' le nom de la balise est pris sur la premiere ligne
tagName = Intersect(RBase.EntireRow,
RColonne.EntireColumn)
Print #1, " <attribute name="; Chr(34) & "" + tagName +
Chr(34) & " >"
If IsNumeric(RColonne) Then
Print #1, " " + Str(RColonne)
Else
Print #1, " " + RColonne
- pour une collone donnée D par exemple
- lire le contenu de la cellule D2
- si elle n'est pas vide découper le contenu
- item 1, 2, ... n (on l'appellera "item")
- je cherche dans toto.xls la matrice A:1C650;2;0 (on l'appellera "res")
- le résultat est écrit comme ceci <attribute
name="res1">item1</attribute>
- passer au suivant <attribute name="res2">item2</attribute>
- etc.
- passer à la cellule D3
- lorsque c'est fini continuer pour la colonne E comme pour les colonnes
A, B, C
Lionel
OK, je mets le lien en MP,
merci
LionelCe n'est pas facile du tout pour apprécier quand tu commences à traiter
la colonne E. Le mieux serait que tu mettes ton classeur ou, au moins la
feuille active, sur www.cjoint.com en effaçant les données
confidentielles, s'il y en a.
Daniel
"L" a écrit dans le message de news:vraiment merci Daniel, mais j'ai bien du mal à le mettre en place vu que
je n'y connais pas grand chose en VBA. je suis un poil perdu là ! en
même temps j'essaie de mettre cela dans une macro existante (ceci
explique peut-être cela !?)
En bref, voici mon code :
Sub createXmlFile()
Dim RBase As Range, RLigne As Range, RColonne As Range
Dim tagName As String
Set RBase = Range("BaseTableau") ' nommer la première colonne du
tableau "BaseTableau"
Open "C:Documents and SettingsLionelBureau2xml.xml" For Output As
1
Print #1, "<mon_document>"
' balayer les lignes
For Each RLigne In Range(RBase.Offset(1), RBase.End(xlDown))
'nom du node
Print #1, "<sujet>"
' valeur du node
Print #1, " " + Mid(RLigne, 2)
' ecriture des childnodes
For Each RColonne In Range(RLigne.Offset(0, 1),
RLigne.End(xlToRight))
' Si cellule vide, on ignore
If RColonne <> "" Then
' le nom de la balise est pris sur la premiere ligne
tagName = Intersect(RBase.EntireRow,
RColonne.EntireColumn)
Print #1, " <" + tagName + ">"
If IsNumeric(RColonne) Then
Print #1, " " + Str(RColonne)
Else
Print #1, " " + RColonne
End If
Print #1, " </" + tagName + ">"
End If
Next
Print #1, "</s>"
Next
Print #1, "</mon_document>"
Close 1
End Sub
cela fonctionne bien et me donne un truc du genre
<?xml version="1.0" encoding="ISO-8859-1"?>
<mon_document>
<s>
SB
<Pilote>
P
</Pilote>
<tour>
t
</tour>
<comptage>
compt
</comptage>
<trl>
ah ça a bougé c' est ça ?
</trl>
etc ...
</mon_document>
pour "s", "pilote, "tour", "comptage" et "trl" les étiquettes en A1, B1,
C1 et D1 de mes colonnes. Ce que j'aimerais faire maintenant c'est pour
la colonne D (et uniquement celle_là) qui donne le résultat
<trl>
ah ça a bougé c' est ça ?
</trl>
faire en plus un découpage de la chaîne, tel que :
ah - et aller chercher dans une matrice
ça - et aller chercher dans une matrice
a - et aller chercher dans une matrice
bougé - et aller chercher dans une matrice
c' - et aller chercher dans une matrice
ça - et aller chercher dans une matrice
? - et aller chercher dans une matrice
puis écrire à la fois l'item et le résultat de la recherche (vlookup())
pour un résultat attendu du genre :
<mot>
ah
<resultat>
interjection
</résultat>
</mot>
<mot>
ça
<resultat>
pronom_demonstratif
</résultat>
</mot>
ou bien :
<mot attribute="interjection">
ah
</mot>
<mot attribute="pronom_démonstratif">
ça
</mot>
etc ...
ensuite il continue à traiter les autres colonnes comme avant.
Je n'ai pas pu tester ta proposition puisque je n'arrive pas à
l'implémenter dans le bout de code que j'ai (c'est pourquoi il est plus
simple que je mette directement ce bout de code).
LionelSi j'ai compris, le traitement de la colonne D peut se voir comme suit
:
Workbooks.Open "c:temptoto.xls"
ThisWorkbook.Activate
For Each c In Range("D2", Range("D65536").End(xlUp))
For Each Item In Split(c)
res = Application.VLookup(Item, _
Workbooks("toto.xls").Sheets("Feuil1").Range("res"), 2, 0)
If Not Application.IsNA(res) Then
Enrgt = "<attribute name=""" & res & """" & _
Item & "</attribute>"
Print #1, Enrgt
End If
Next Item
Next c
Workbooks("toto.xls").Close
(non testé)
Daniel
"L" a écrit dans le message de news:c'est le résultat de cette insertion je souhaiterais spliter faire
un vlookup (sur uine matrice se trouvant dans un autre fichier)sur
l'item et renvoyer le résultat à écrire dans mon fichier xml.
J'ai du mal à comprendre ce que tu appelles "résultat de cette
insertion".
Je me suis mal exprimé.
Print #1, " " + RColonne
m'écrit dans mon fichier ce qui se trouve dans la cellule pour
l'instant.Pour le fichier externe, au lieu de :
Range("A1:C6500")
il faut coder :
Workbooks("toto.xls").sheets("Feuiln").Range("A1:C6500")
okDaniel
Si je m'explique mieux cela pourrait donner ça :
- pour l'ensemble des collones A, B, C de ma feuille
- conserver ça
For Each RColonne In Range(RLigne.Offset(0, 1),
RLigne.End(xlToRight))
' Si cellule vide, on ignore
If RColonne <> "" Then
' le nom de la balise est pris sur la premiere ligne
tagName = Intersect(RBase.EntireRow,
RColonne.EntireColumn)
Print #1, " <attribute name="; Chr(34) & "" + tagName
+ Chr(34) & " >"
If IsNumeric(RColonne) Then
Print #1, " " + Str(RColonne)
Else
Print #1, " " + RColonne
- pour une collone donnée D par exemple
- lire le contenu de la cellule D2
- si elle n'est pas vide découper le contenu
- item 1, 2, ... n (on l'appellera "item")
- je cherche dans toto.xls la matrice A:1C650;2;0 (on l'appellera
"res")
- le résultat est écrit comme ceci <attribute
name="res1">item1</attribute>
- passer au suivant <attribute name="res2">item2</attribute>
- etc.
- passer à la cellule D3
- lorsque c'est fini continuer pour la colonne E comme pour les
colonnes A, B, C
Lionel
OK, je mets le lien en MP,
merci
Lionel
Ce n'est pas facile du tout pour apprécier quand tu commences à traiter
la colonne E. Le mieux serait que tu mettes ton classeur ou, au moins la
feuille active, sur www.cjoint.com en effaçant les données
confidentielles, s'il y en a.
Daniel
"L" <lionel.barrand@gmail.com> a écrit dans le message de news:
465593B1.8060005@gmail.com...
vraiment merci Daniel, mais j'ai bien du mal à le mettre en place vu que
je n'y connais pas grand chose en VBA. je suis un poil perdu là ! en
même temps j'essaie de mettre cela dans une macro existante (ceci
explique peut-être cela !?)
En bref, voici mon code :
Sub createXmlFile()
Dim RBase As Range, RLigne As Range, RColonne As Range
Dim tagName As String
Set RBase = Range("BaseTableau") ' nommer la première colonne du
tableau "BaseTableau"
Open "C:Documents and SettingsLionelBureau2xml.xml" For Output As
1
Print #1, "<mon_document>"
' balayer les lignes
For Each RLigne In Range(RBase.Offset(1), RBase.End(xlDown))
'nom du node
Print #1, "<sujet>"
' valeur du node
Print #1, " " + Mid(RLigne, 2)
' ecriture des childnodes
For Each RColonne In Range(RLigne.Offset(0, 1),
RLigne.End(xlToRight))
' Si cellule vide, on ignore
If RColonne <> "" Then
' le nom de la balise est pris sur la premiere ligne
tagName = Intersect(RBase.EntireRow,
RColonne.EntireColumn)
Print #1, " <" + tagName + ">"
If IsNumeric(RColonne) Then
Print #1, " " + Str(RColonne)
Else
Print #1, " " + RColonne
End If
Print #1, " </" + tagName + ">"
End If
Next
Print #1, "</s>"
Next
Print #1, "</mon_document>"
Close 1
End Sub
cela fonctionne bien et me donne un truc du genre
<?xml version="1.0" encoding="ISO-8859-1"?>
<mon_document>
<s>
SB
<Pilote>
P
</Pilote>
<tour>
t
</tour>
<comptage>
compt
</comptage>
<trl>
ah ça a bougé c' est ça ?
</trl>
etc ...
</mon_document>
pour "s", "pilote, "tour", "comptage" et "trl" les étiquettes en A1, B1,
C1 et D1 de mes colonnes. Ce que j'aimerais faire maintenant c'est pour
la colonne D (et uniquement celle_là) qui donne le résultat
<trl>
ah ça a bougé c' est ça ?
</trl>
faire en plus un découpage de la chaîne, tel que :
ah - et aller chercher dans une matrice
ça - et aller chercher dans une matrice
a - et aller chercher dans une matrice
bougé - et aller chercher dans une matrice
c' - et aller chercher dans une matrice
ça - et aller chercher dans une matrice
? - et aller chercher dans une matrice
puis écrire à la fois l'item et le résultat de la recherche (vlookup())
pour un résultat attendu du genre :
<mot>
ah
<resultat>
interjection
</résultat>
</mot>
<mot>
ça
<resultat>
pronom_demonstratif
</résultat>
</mot>
ou bien :
<mot attribute="interjection">
ah
</mot>
<mot attribute="pronom_démonstratif">
ça
</mot>
etc ...
ensuite il continue à traiter les autres colonnes comme avant.
Je n'ai pas pu tester ta proposition puisque je n'arrive pas à
l'implémenter dans le bout de code que j'ai (c'est pourquoi il est plus
simple que je mette directement ce bout de code).
Lionel
Si j'ai compris, le traitement de la colonne D peut se voir comme suit
:
Workbooks.Open "c:temptoto.xls"
ThisWorkbook.Activate
For Each c In Range("D2", Range("D65536").End(xlUp))
For Each Item In Split(c)
res = Application.VLookup(Item, _
Workbooks("toto.xls").Sheets("Feuil1").Range("res"), 2, 0)
If Not Application.IsNA(res) Then
Enrgt = "<attribute name=""" & res & """" & _
Item & "</attribute>"
Print #1, Enrgt
End If
Next Item
Next c
Workbooks("toto.xls").Close
(non testé)
Daniel
"L" <lionel.barrand@gmail.com> a écrit dans le message de news:
eKELxxenHHA.1244@TK2MSFTNGP04.phx.gbl...
c'est le résultat de cette insertion je souhaiterais spliter faire
un vlookup (sur uine matrice se trouvant dans un autre fichier)sur
l'item et renvoyer le résultat à écrire dans mon fichier xml.
J'ai du mal à comprendre ce que tu appelles "résultat de cette
insertion".
Je me suis mal exprimé.
Print #1, " " + RColonne
m'écrit dans mon fichier ce qui se trouve dans la cellule pour
l'instant.
Pour le fichier externe, au lieu de :
Range("A1:C6500")
il faut coder :
Workbooks("toto.xls").sheets("Feuiln").Range("A1:C6500")
ok
Daniel
Si je m'explique mieux cela pourrait donner ça :
- pour l'ensemble des collones A, B, C de ma feuille
- conserver ça
For Each RColonne In Range(RLigne.Offset(0, 1),
RLigne.End(xlToRight))
' Si cellule vide, on ignore
If RColonne <> "" Then
' le nom de la balise est pris sur la premiere ligne
tagName = Intersect(RBase.EntireRow,
RColonne.EntireColumn)
Print #1, " <attribute name="; Chr(34) & "" + tagName
+ Chr(34) & " >"
If IsNumeric(RColonne) Then
Print #1, " " + Str(RColonne)
Else
Print #1, " " + RColonne
- pour une collone donnée D par exemple
- lire le contenu de la cellule D2
- si elle n'est pas vide découper le contenu
- item 1, 2, ... n (on l'appellera "item")
- je cherche dans toto.xls la matrice A:1C650;2;0 (on l'appellera
"res")
- le résultat est écrit comme ceci <attribute
name="res1">item1</attribute>
- passer au suivant <attribute name="res2">item2</attribute>
- etc.
- passer à la cellule D3
- lorsque c'est fini continuer pour la colonne E comme pour les
colonnes A, B, C
Lionel
OK, je mets le lien en MP,
merci
LionelCe n'est pas facile du tout pour apprécier quand tu commences à traiter
la colonne E. Le mieux serait que tu mettes ton classeur ou, au moins la
feuille active, sur www.cjoint.com en effaçant les données
confidentielles, s'il y en a.
Daniel
"L" a écrit dans le message de news:vraiment merci Daniel, mais j'ai bien du mal à le mettre en place vu que
je n'y connais pas grand chose en VBA. je suis un poil perdu là ! en
même temps j'essaie de mettre cela dans une macro existante (ceci
explique peut-être cela !?)
En bref, voici mon code :
Sub createXmlFile()
Dim RBase As Range, RLigne As Range, RColonne As Range
Dim tagName As String
Set RBase = Range("BaseTableau") ' nommer la première colonne du
tableau "BaseTableau"
Open "C:Documents and SettingsLionelBureau2xml.xml" For Output As
1
Print #1, "<mon_document>"
' balayer les lignes
For Each RLigne In Range(RBase.Offset(1), RBase.End(xlDown))
'nom du node
Print #1, "<sujet>"
' valeur du node
Print #1, " " + Mid(RLigne, 2)
' ecriture des childnodes
For Each RColonne In Range(RLigne.Offset(0, 1),
RLigne.End(xlToRight))
' Si cellule vide, on ignore
If RColonne <> "" Then
' le nom de la balise est pris sur la premiere ligne
tagName = Intersect(RBase.EntireRow,
RColonne.EntireColumn)
Print #1, " <" + tagName + ">"
If IsNumeric(RColonne) Then
Print #1, " " + Str(RColonne)
Else
Print #1, " " + RColonne
End If
Print #1, " </" + tagName + ">"
End If
Next
Print #1, "</s>"
Next
Print #1, "</mon_document>"
Close 1
End Sub
cela fonctionne bien et me donne un truc du genre
<?xml version="1.0" encoding="ISO-8859-1"?>
<mon_document>
<s>
SB
<Pilote>
P
</Pilote>
<tour>
t
</tour>
<comptage>
compt
</comptage>
<trl>
ah ça a bougé c' est ça ?
</trl>
etc ...
</mon_document>
pour "s", "pilote, "tour", "comptage" et "trl" les étiquettes en A1, B1,
C1 et D1 de mes colonnes. Ce que j'aimerais faire maintenant c'est pour
la colonne D (et uniquement celle_là) qui donne le résultat
<trl>
ah ça a bougé c' est ça ?
</trl>
faire en plus un découpage de la chaîne, tel que :
ah - et aller chercher dans une matrice
ça - et aller chercher dans une matrice
a - et aller chercher dans une matrice
bougé - et aller chercher dans une matrice
c' - et aller chercher dans une matrice
ça - et aller chercher dans une matrice
? - et aller chercher dans une matrice
puis écrire à la fois l'item et le résultat de la recherche (vlookup())
pour un résultat attendu du genre :
<mot>
ah
<resultat>
interjection
</résultat>
</mot>
<mot>
ça
<resultat>
pronom_demonstratif
</résultat>
</mot>
ou bien :
<mot attribute="interjection">
ah
</mot>
<mot attribute="pronom_démonstratif">
ça
</mot>
etc ...
ensuite il continue à traiter les autres colonnes comme avant.
Je n'ai pas pu tester ta proposition puisque je n'arrive pas à
l'implémenter dans le bout de code que j'ai (c'est pourquoi il est plus
simple que je mette directement ce bout de code).
LionelSi j'ai compris, le traitement de la colonne D peut se voir comme suit
:
Workbooks.Open "c:temptoto.xls"
ThisWorkbook.Activate
For Each c In Range("D2", Range("D65536").End(xlUp))
For Each Item In Split(c)
res = Application.VLookup(Item, _
Workbooks("toto.xls").Sheets("Feuil1").Range("res"), 2, 0)
If Not Application.IsNA(res) Then
Enrgt = "<attribute name=""" & res & """" & _
Item & "</attribute>"
Print #1, Enrgt
End If
Next Item
Next c
Workbooks("toto.xls").Close
(non testé)
Daniel
"L" a écrit dans le message de news:c'est le résultat de cette insertion je souhaiterais spliter faire
un vlookup (sur uine matrice se trouvant dans un autre fichier)sur
l'item et renvoyer le résultat à écrire dans mon fichier xml.
J'ai du mal à comprendre ce que tu appelles "résultat de cette
insertion".
Je me suis mal exprimé.
Print #1, " " + RColonne
m'écrit dans mon fichier ce qui se trouve dans la cellule pour
l'instant.Pour le fichier externe, au lieu de :
Range("A1:C6500")
il faut coder :
Workbooks("toto.xls").sheets("Feuiln").Range("A1:C6500")
okDaniel
Si je m'explique mieux cela pourrait donner ça :
- pour l'ensemble des collones A, B, C de ma feuille
- conserver ça
For Each RColonne In Range(RLigne.Offset(0, 1),
RLigne.End(xlToRight))
' Si cellule vide, on ignore
If RColonne <> "" Then
' le nom de la balise est pris sur la premiere ligne
tagName = Intersect(RBase.EntireRow,
RColonne.EntireColumn)
Print #1, " <attribute name="; Chr(34) & "" + tagName
+ Chr(34) & " >"
If IsNumeric(RColonne) Then
Print #1, " " + Str(RColonne)
Else
Print #1, " " + RColonne
- pour une collone donnée D par exemple
- lire le contenu de la cellule D2
- si elle n'est pas vide découper le contenu
- item 1, 2, ... n (on l'appellera "item")
- je cherche dans toto.xls la matrice A:1C650;2;0 (on l'appellera
"res")
- le résultat est écrit comme ceci <attribute
name="res1">item1</attribute>
- passer au suivant <attribute name="res2">item2</attribute>
- etc.
- passer à la cellule D3
- lorsque c'est fini continuer pour la colonne E comme pour les
colonnes A, B, C
Lionel
Alors, il faut enlever les "Z" de l'adresse.
Daniel
"L" a écrit dans le message de news:OK, je mets le lien en MP,
merci
LionelCe n'est pas facile du tout pour apprécier quand tu commences à traiter
la colonne E. Le mieux serait que tu mettes ton classeur ou, au moins la
feuille active, sur www.cjoint.com en effaçant les données
confidentielles, s'il y en a.
Daniel
"L" a écrit dans le message de news:vraiment merci Daniel, mais j'ai bien du mal à le mettre en place vu que
je n'y connais pas grand chose en VBA. je suis un poil perdu là ! en
même temps j'essaie de mettre cela dans une macro existante (ceci
explique peut-être cela !?)
En bref, voici mon code :
Sub createXmlFile()
Dim RBase As Range, RLigne As Range, RColonne As Range
Dim tagName As String
Set RBase = Range("BaseTableau") ' nommer la première colonne du
tableau "BaseTableau"
Open "C:Documents and SettingsLionelBureau2xml.xml" For Output As
1
Print #1, "<mon_document>"
' balayer les lignes
For Each RLigne In Range(RBase.Offset(1), RBase.End(xlDown))
'nom du node
Print #1, "<sujet>"
' valeur du node
Print #1, " " + Mid(RLigne, 2)
' ecriture des childnodes
For Each RColonne In Range(RLigne.Offset(0, 1),
RLigne.End(xlToRight))
' Si cellule vide, on ignore
If RColonne <> "" Then
' le nom de la balise est pris sur la premiere ligne
tagName = Intersect(RBase.EntireRow,
RColonne.EntireColumn)
Print #1, " <" + tagName + ">"
If IsNumeric(RColonne) Then
Print #1, " " + Str(RColonne)
Else
Print #1, " " + RColonne
End If
Print #1, " </" + tagName + ">"
End If
Next
Print #1, "</s>"
Next
Print #1, "</mon_document>"
Close 1
End Sub
cela fonctionne bien et me donne un truc du genre
<?xml version="1.0" encoding="ISO-8859-1"?>
<mon_document>
<s>
SB
<Pilote>
P
</Pilote>
<tour>
t
</tour>
<comptage>
compt
</comptage>
<trl>
ah ça a bougé c' est ça ?
</trl>
etc ...
</mon_document>
pour "s", "pilote, "tour", "comptage" et "trl" les étiquettes en A1, B1,
C1 et D1 de mes colonnes. Ce que j'aimerais faire maintenant c'est pour
la colonne D (et uniquement celle_là) qui donne le résultat
<trl>
ah ça a bougé c' est ça ?
</trl>
faire en plus un découpage de la chaîne, tel que :
ah - et aller chercher dans une matrice
ça - et aller chercher dans une matrice
a - et aller chercher dans une matrice
bougé - et aller chercher dans une matrice
c' - et aller chercher dans une matrice
ça - et aller chercher dans une matrice
? - et aller chercher dans une matrice
puis écrire à la fois l'item et le résultat de la recherche (vlookup())
pour un résultat attendu du genre :
<mot>
ah
<resultat>
interjection
</résultat>
</mot>
<mot>
ça
<resultat>
pronom_demonstratif
</résultat>
</mot>
ou bien :
<mot attribute="interjection">
ah
</mot>
<mot attribute="pronom_démonstratif">
ça
</mot>
etc ...
ensuite il continue à traiter les autres colonnes comme avant.
Je n'ai pas pu tester ta proposition puisque je n'arrive pas à
l'implémenter dans le bout de code que j'ai (c'est pourquoi il est plus
simple que je mette directement ce bout de code).
LionelSi j'ai compris, le traitement de la colonne D peut se voir comme suit
:
Workbooks.Open "c:temptoto.xls"
ThisWorkbook.Activate
For Each c In Range("D2", Range("D65536").End(xlUp))
For Each Item In Split(c)
res = Application.VLookup(Item, _
Workbooks("toto.xls").Sheets("Feuil1").Range("res"), 2, 0)
If Not Application.IsNA(res) Then
Enrgt = "<attribute name=""" & res & """" & _
Item & "</attribute>"
Print #1, Enrgt
End If
Next Item
Next c
Workbooks("toto.xls").Close
(non testé)
Daniel
"L" a écrit dans le message de news:c'est le résultat de cette insertion je souhaiterais spliter faire
un vlookup (sur uine matrice se trouvant dans un autre fichier)sur
l'item et renvoyer le résultat à écrire dans mon fichier xml.
J'ai du mal à comprendre ce que tu appelles "résultat de cette
insertion".
Je me suis mal exprimé.
Print #1, " " + RColonne
m'écrit dans mon fichier ce qui se trouve dans la cellule pour
l'instant.Pour le fichier externe, au lieu de :
Range("A1:C6500")
il faut coder :
Workbooks("toto.xls").sheets("Feuiln").Range("A1:C6500")
okDaniel
Si je m'explique mieux cela pourrait donner ça :
- pour l'ensemble des collones A, B, C de ma feuille
- conserver ça
For Each RColonne In Range(RLigne.Offset(0, 1),
RLigne.End(xlToRight))
' Si cellule vide, on ignore
If RColonne <> "" Then
' le nom de la balise est pris sur la premiere ligne
tagName = Intersect(RBase.EntireRow,
RColonne.EntireColumn)
Print #1, " <attribute name="; Chr(34) & "" + tagName
+ Chr(34) & " >"
If IsNumeric(RColonne) Then
Print #1, " " + Str(RColonne)
Else
Print #1, " " + RColonne
- pour une collone donnée D par exemple
- lire le contenu de la cellule D2
- si elle n'est pas vide découper le contenu
- item 1, 2, ... n (on l'appellera "item")
- je cherche dans toto.xls la matrice A:1C650;2;0 (on l'appellera
"res")
- le résultat est écrit comme ceci <attribute
name="res1">item1</attribute>
- passer au suivant <attribute name="res2">item2</attribute>
- etc.
- passer à la cellule D3
- lorsque c'est fini continuer pour la colonne E comme pour les
colonnes A, B, C
Lionel
Alors, il faut enlever les "Z" de l'adresse.
Daniel
"L" <lionel.barrand@gmail.com> a écrit dans le message de news:
O4bhwthnHHA.4960@TK2MSFTNGP02.phx.gbl...
OK, je mets le lien en MP,
merci
Lionel
Ce n'est pas facile du tout pour apprécier quand tu commences à traiter
la colonne E. Le mieux serait que tu mettes ton classeur ou, au moins la
feuille active, sur www.cjoint.com en effaçant les données
confidentielles, s'il y en a.
Daniel
"L" <lionel.barrand@gmail.com> a écrit dans le message de news:
465593B1.8060005@gmail.com...
vraiment merci Daniel, mais j'ai bien du mal à le mettre en place vu que
je n'y connais pas grand chose en VBA. je suis un poil perdu là ! en
même temps j'essaie de mettre cela dans une macro existante (ceci
explique peut-être cela !?)
En bref, voici mon code :
Sub createXmlFile()
Dim RBase As Range, RLigne As Range, RColonne As Range
Dim tagName As String
Set RBase = Range("BaseTableau") ' nommer la première colonne du
tableau "BaseTableau"
Open "C:Documents and SettingsLionelBureau2xml.xml" For Output As
1
Print #1, "<mon_document>"
' balayer les lignes
For Each RLigne In Range(RBase.Offset(1), RBase.End(xlDown))
'nom du node
Print #1, "<sujet>"
' valeur du node
Print #1, " " + Mid(RLigne, 2)
' ecriture des childnodes
For Each RColonne In Range(RLigne.Offset(0, 1),
RLigne.End(xlToRight))
' Si cellule vide, on ignore
If RColonne <> "" Then
' le nom de la balise est pris sur la premiere ligne
tagName = Intersect(RBase.EntireRow,
RColonne.EntireColumn)
Print #1, " <" + tagName + ">"
If IsNumeric(RColonne) Then
Print #1, " " + Str(RColonne)
Else
Print #1, " " + RColonne
End If
Print #1, " </" + tagName + ">"
End If
Next
Print #1, "</s>"
Next
Print #1, "</mon_document>"
Close 1
End Sub
cela fonctionne bien et me donne un truc du genre
<?xml version="1.0" encoding="ISO-8859-1"?>
<mon_document>
<s>
SB
<Pilote>
P
</Pilote>
<tour>
t
</tour>
<comptage>
compt
</comptage>
<trl>
ah ça a bougé c' est ça ?
</trl>
etc ...
</mon_document>
pour "s", "pilote, "tour", "comptage" et "trl" les étiquettes en A1, B1,
C1 et D1 de mes colonnes. Ce que j'aimerais faire maintenant c'est pour
la colonne D (et uniquement celle_là) qui donne le résultat
<trl>
ah ça a bougé c' est ça ?
</trl>
faire en plus un découpage de la chaîne, tel que :
ah - et aller chercher dans une matrice
ça - et aller chercher dans une matrice
a - et aller chercher dans une matrice
bougé - et aller chercher dans une matrice
c' - et aller chercher dans une matrice
ça - et aller chercher dans une matrice
? - et aller chercher dans une matrice
puis écrire à la fois l'item et le résultat de la recherche (vlookup())
pour un résultat attendu du genre :
<mot>
ah
<resultat>
interjection
</résultat>
</mot>
<mot>
ça
<resultat>
pronom_demonstratif
</résultat>
</mot>
ou bien :
<mot attribute="interjection">
ah
</mot>
<mot attribute="pronom_démonstratif">
ça
</mot>
etc ...
ensuite il continue à traiter les autres colonnes comme avant.
Je n'ai pas pu tester ta proposition puisque je n'arrive pas à
l'implémenter dans le bout de code que j'ai (c'est pourquoi il est plus
simple que je mette directement ce bout de code).
Lionel
Si j'ai compris, le traitement de la colonne D peut se voir comme suit
:
Workbooks.Open "c:temptoto.xls"
ThisWorkbook.Activate
For Each c In Range("D2", Range("D65536").End(xlUp))
For Each Item In Split(c)
res = Application.VLookup(Item, _
Workbooks("toto.xls").Sheets("Feuil1").Range("res"), 2, 0)
If Not Application.IsNA(res) Then
Enrgt = "<attribute name=""" & res & """" & _
Item & "</attribute>"
Print #1, Enrgt
End If
Next Item
Next c
Workbooks("toto.xls").Close
(non testé)
Daniel
"L" <lionel.barrand@gmail.com> a écrit dans le message de news:
eKELxxenHHA.1244@TK2MSFTNGP04.phx.gbl...
c'est le résultat de cette insertion je souhaiterais spliter faire
un vlookup (sur uine matrice se trouvant dans un autre fichier)sur
l'item et renvoyer le résultat à écrire dans mon fichier xml.
J'ai du mal à comprendre ce que tu appelles "résultat de cette
insertion".
Je me suis mal exprimé.
Print #1, " " + RColonne
m'écrit dans mon fichier ce qui se trouve dans la cellule pour
l'instant.
Pour le fichier externe, au lieu de :
Range("A1:C6500")
il faut coder :
Workbooks("toto.xls").sheets("Feuiln").Range("A1:C6500")
ok
Daniel
Si je m'explique mieux cela pourrait donner ça :
- pour l'ensemble des collones A, B, C de ma feuille
- conserver ça
For Each RColonne In Range(RLigne.Offset(0, 1),
RLigne.End(xlToRight))
' Si cellule vide, on ignore
If RColonne <> "" Then
' le nom de la balise est pris sur la premiere ligne
tagName = Intersect(RBase.EntireRow,
RColonne.EntireColumn)
Print #1, " <attribute name="; Chr(34) & "" + tagName
+ Chr(34) & " >"
If IsNumeric(RColonne) Then
Print #1, " " + Str(RColonne)
Else
Print #1, " " + RColonne
- pour une collone donnée D par exemple
- lire le contenu de la cellule D2
- si elle n'est pas vide découper le contenu
- item 1, 2, ... n (on l'appellera "item")
- je cherche dans toto.xls la matrice A:1C650;2;0 (on l'appellera
"res")
- le résultat est écrit comme ceci <attribute
name="res1">item1</attribute>
- passer au suivant <attribute name="res2">item2</attribute>
- etc.
- passer à la cellule D3
- lorsque c'est fini continuer pour la colonne E comme pour les
colonnes A, B, C
Lionel
Alors, il faut enlever les "Z" de l'adresse.
Daniel
"L" a écrit dans le message de news:OK, je mets le lien en MP,
merci
LionelCe n'est pas facile du tout pour apprécier quand tu commences à traiter
la colonne E. Le mieux serait que tu mettes ton classeur ou, au moins la
feuille active, sur www.cjoint.com en effaçant les données
confidentielles, s'il y en a.
Daniel
"L" a écrit dans le message de news:vraiment merci Daniel, mais j'ai bien du mal à le mettre en place vu que
je n'y connais pas grand chose en VBA. je suis un poil perdu là ! en
même temps j'essaie de mettre cela dans une macro existante (ceci
explique peut-être cela !?)
En bref, voici mon code :
Sub createXmlFile()
Dim RBase As Range, RLigne As Range, RColonne As Range
Dim tagName As String
Set RBase = Range("BaseTableau") ' nommer la première colonne du
tableau "BaseTableau"
Open "C:Documents and SettingsLionelBureau2xml.xml" For Output As
1
Print #1, "<mon_document>"
' balayer les lignes
For Each RLigne In Range(RBase.Offset(1), RBase.End(xlDown))
'nom du node
Print #1, "<sujet>"
' valeur du node
Print #1, " " + Mid(RLigne, 2)
' ecriture des childnodes
For Each RColonne In Range(RLigne.Offset(0, 1),
RLigne.End(xlToRight))
' Si cellule vide, on ignore
If RColonne <> "" Then
' le nom de la balise est pris sur la premiere ligne
tagName = Intersect(RBase.EntireRow,
RColonne.EntireColumn)
Print #1, " <" + tagName + ">"
If IsNumeric(RColonne) Then
Print #1, " " + Str(RColonne)
Else
Print #1, " " + RColonne
End If
Print #1, " </" + tagName + ">"
End If
Next
Print #1, "</s>"
Next
Print #1, "</mon_document>"
Close 1
End Sub
cela fonctionne bien et me donne un truc du genre
<?xml version="1.0" encoding="ISO-8859-1"?>
<mon_document>
<s>
SB
<Pilote>
P
</Pilote>
<tour>
t
</tour>
<comptage>
compt
</comptage>
<trl>
ah ça a bougé c' est ça ?
</trl>
etc ...
</mon_document>
pour "s", "pilote, "tour", "comptage" et "trl" les étiquettes en A1, B1,
C1 et D1 de mes colonnes. Ce que j'aimerais faire maintenant c'est pour
la colonne D (et uniquement celle_là) qui donne le résultat
<trl>
ah ça a bougé c' est ça ?
</trl>
faire en plus un découpage de la chaîne, tel que :
ah - et aller chercher dans une matrice
ça - et aller chercher dans une matrice
a - et aller chercher dans une matrice
bougé - et aller chercher dans une matrice
c' - et aller chercher dans une matrice
ça - et aller chercher dans une matrice
? - et aller chercher dans une matrice
puis écrire à la fois l'item et le résultat de la recherche (vlookup())
pour un résultat attendu du genre :
<mot>
ah
<resultat>
interjection
</résultat>
</mot>
<mot>
ça
<resultat>
pronom_demonstratif
</résultat>
</mot>
ou bien :
<mot attribute="interjection">
ah
</mot>
<mot attribute="pronom_démonstratif">
ça
</mot>
etc ...
ensuite il continue à traiter les autres colonnes comme avant.
Je n'ai pas pu tester ta proposition puisque je n'arrive pas à
l'implémenter dans le bout de code que j'ai (c'est pourquoi il est plus
simple que je mette directement ce bout de code).
LionelSi j'ai compris, le traitement de la colonne D peut se voir comme suit
:
Workbooks.Open "c:temptoto.xls"
ThisWorkbook.Activate
For Each c In Range("D2", Range("D65536").End(xlUp))
For Each Item In Split(c)
res = Application.VLookup(Item, _
Workbooks("toto.xls").Sheets("Feuil1").Range("res"), 2, 0)
If Not Application.IsNA(res) Then
Enrgt = "<attribute name=""" & res & """" & _
Item & "</attribute>"
Print #1, Enrgt
End If
Next Item
Next c
Workbooks("toto.xls").Close
(non testé)
Daniel
"L" a écrit dans le message de news:c'est le résultat de cette insertion je souhaiterais spliter faire
un vlookup (sur uine matrice se trouvant dans un autre fichier)sur
l'item et renvoyer le résultat à écrire dans mon fichier xml.
J'ai du mal à comprendre ce que tu appelles "résultat de cette
insertion".
Je me suis mal exprimé.
Print #1, " " + RColonne
m'écrit dans mon fichier ce qui se trouve dans la cellule pour
l'instant.Pour le fichier externe, au lieu de :
Range("A1:C6500")
il faut coder :
Workbooks("toto.xls").sheets("Feuiln").Range("A1:C6500")
okDaniel
Si je m'explique mieux cela pourrait donner ça :
- pour l'ensemble des collones A, B, C de ma feuille
- conserver ça
For Each RColonne In Range(RLigne.Offset(0, 1),
RLigne.End(xlToRight))
' Si cellule vide, on ignore
If RColonne <> "" Then
' le nom de la balise est pris sur la premiere ligne
tagName = Intersect(RBase.EntireRow,
RColonne.EntireColumn)
Print #1, " <attribute name="; Chr(34) & "" + tagName
+ Chr(34) & " >"
If IsNumeric(RColonne) Then
Print #1, " " + Str(RColonne)
Else
Print #1, " " + RColonne
- pour une collone donnée D par exemple
- lire le contenu de la cellule D2
- si elle n'est pas vide découper le contenu
- item 1, 2, ... n (on l'appellera "item")
- je cherche dans toto.xls la matrice A:1C650;2;0 (on l'appellera
"res")
- le résultat est écrit comme ceci <attribute
name="res1">item1</attribute>
- passer au suivant <attribute name="res2">item2</attribute>
- etc.
- passer à la cellule D3
- lorsque c'est fini continuer pour la colonne E comme pour les
colonnes A, B, C
Lionel