[VBS] Concaténation variable [Résolu]

Signaler
-
NHenry
Messages postés
14647
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
16 février 2020
-
Bonjour ,

Une petite question toute simple mais je n'y arrive pas .

Voilà, j'ai une variable strBody (string
pour HTML) dont la valeur se trouve dans une boucle.
Je rentre x fois dans cette boucle et j'aimerai récupérer toutes les valeurs en les concaténant.

J'ai essayé
If ... Then ...
strBody = ...
End If
strBody = "
" & strBody


Mais sans résultat.

Un peu d'aide ?

Merci.

agaa162.

7 réponses

Messages postés
14647
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
16 février 2020
139
Bonjour,

A chaque tour de
Do Until Fichier.AtEndOfStream

Tu fais dans tes tests un :
strBody = "..."

Donc, tu RAZ à chaque fois la valeur, il faut que tu fasse aussi la concaténation à ces endroits.

v----Signature--------v----------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Mon site
Messages postés
14647
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
16 février 2020
139
Bonjour,

Quel est vraiment le code ?
Pourquoi tu ne fais pas la concaténation partout ?

v----Signature--------v----------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Mon site
Bonjour,

Qu'entends-tu par concaténation partout ?

If (qteXML > seuilConf) Then	

  strBody = ""
  strBody = strBody & ""
  strBody = strBody & "\"
strBody = strBody & \"----
Genzyme Lyon , \"
strBody = strBody & \"----
Alerte MES, \"
strBody = strBody & \"----
Écart(s) de stock detecte(s), \"
strBody = strBody & \"----
" & Now & ", \"
strBody = strBody & \"----
Matiere/Lot :,  " & codeMatiereXML & "/" & lotXML & "(" & descMatiere & ")" & ",  \"
strBody = strBody & \"----
Quantite ajustee :,  " & qteXML & unitMatiere & " (Seuil d'alerte : " & seuilConf & unitMatiere & "), \"
strBody = strBody & \"----
Quantite standard U.Stk :,  " & quantiteStd & unitMatiere & ", \"
strBody = strBody & \"----
Zone :,  " & locationXML & ", \"
  strBody = strBody & "
"
  strBody = strBody & ""
End If	
strBody = "
" & strBody

Messages postés
14647
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
16 février 2020
139
Bonjour,

Tu ne donnes qu'un test (un seul If), mais je pense que tu en a plusieurs et le pb viendrait du fait que au début de ton if tu RAZ strBody.

v----Signature--------v----------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Mon site
Mon imbrication est longue et j'utilise strBody uniquement ici.
Mais si tu veux tout le code, je peux le mettre
Voici le code :
Set oFl = fso.GetFile(Path_ListeXML)
If (oFl.Size <> "0") Then
Do Until Fichier.AtEndOfStream
MsgBox("Parcours des fichiers non déjà scannés")
Fichier_Line = Fichier.ReadLine
xmlDoc.load(Dossier & Fichier_Line) 
Set oElement = xmlDoc.documentElement

' Si le fichier n'est pas vide
If Not oElement Is Nothing Then
Set XmlAttrib = oElement.getElementsByTagName("rmks")
'MsgBox("OK")
For Each x In XmlAttrib
'MsgBox("OK 2")
'-------------------------------------------------------------------------------------------------------------------------------
'RECHERCHE DE WEIGHT ADJ
If x.Text="WEIGHT ADJ" Then	
MsgBox("Le fichier " & Fichier_Line & " contient WEIGHT ADJ")
'-------------------------------------------------------------------------------------------------------------------------------
'RECHERCHE DES VALEURS CLÉS FICHIERS XML			
For Each inventory In xmlDoc.selectNodes("/soapenv:Envelope/soapenv:Body/receiveInventory/inventoryReceipt")

MsgBox("Récupération des valeurs du fichier XML")
'** Code de la Matière **
codeMatiereXML = inventory.selectSingleNode("ptPart").Text

'** Quantité XML **
quantiteXML = inventory.selectSingleNode("lotserialQty").Text
qXML = Replace(quantiteXML,".",",")

'** Zone **
locationXML =  inventory.selectSingleNode("location").Text
'MsgBox(locationXML)

'** Numéro de lot **
lotXML =  inventory.selectSingleNode("lotserial").Text
'--------------------------------------------------------------------------------------------------------------------------------
'RECHERCHE VALEURS MATIÈRE A PARTIR DU FICHIER DE CONFIGURATION

Set FileConfig = fso.OpenTextFile("P:\Detection Ajustement Stock\FichierConfiguration.txt",ForReading,True)
FileConfig_data = FileConfig.ReadAll
FileConfig.Close 
arrLines = Split(FileConfig_data,vbCrLf)

'** Recherche Seuil d'alerte **
Set a = New RegExp
a.Pattern = "seuil_" & codeMatiereXML
a.IgnoreCase = True 
a.Global = False 'Renvoyer seulement la première occurrence

For i = 0 To UBound(arrLines) 						
occurrence = a.Test(arrLines(i))

If (occurrence = True) Then
tab = Split(arrLines(i),"=")
seuilAjustement = tab(1)
sAjust = Replace(seuilAjustement,".",",")
seuilConf = Csng(sAjust)
qteXML = Csng(qXML)

'** Écart de stock **
If (qteXML > seuilConf) Then

MsgBox("Écart de stock dans le fichier " & Fichier_Line)

'** Récupération de l'intitulé matière **
tab1 = Split(arrLines(i+1),"=")
descM = tab1(1)
descMatiere = Replace(descM,".",",")

'** Récupération de la taille de l'unité de stock **
tab2 = Split(arrLines(i+2),"=")
qStd = tab2(1)
quantiteStd = Replace(qStd,".",",")

'** Récuperation unité de poids **
tab3 = Split(arrLines(i+3),"=")
unitMatiere = tab3(1)

'** Corps du mail **
strBody = ""
strBody = strBody & ""
strBody = strBody & "\"
strBody = strBody & \"----
Genzyme Lyon , \"
strBody = strBody & \"----
Alerte MES, \"
strBody = strBody & \"----
Écart(s) de stock detecte(s), \"
strBody = strBody & \"----
" & Now & ", \"
strBody = strBody & \"----
Matiere/Lot :,  " & codeMatiereXML & "/" & lotXML & "(" & descMatiere & ")" & ",  \"
strBody = strBody & \"----
Quantite ajustee :,  " & qteXML & unitMatiere & " (Seuil d'alerte : " & seuilConf & unitMatiere & "), \"
strBody = strBody & \"----
Quantite standard U.Stk :,  " & quantiteStd & unitMatiere & ", \"
strBody = strBody & \"----
Zone :,  " & locationXML & ", \"
strBody = strBody & "
"
strBody = strBody & ""

'** Appel fonction Mail **
Call SendMail("kevin.moine@genzyme.com", strBody, "Rapport Script")
MsgBox("Mail envoyé")

'** HISTORISATION => Écriture dans fichier Log.csv **
Set corps = fso.OpenTextFile("P:\Detection Ajustement Stock\Log.csv",ForAppending)
Message = Fichier_Line & ";" & codeMatiereXML & ";" & lotXML & ";" & descMatiere & ";" & qteXML & ";" & locationXML
corps.WriteLine Message 
corps.Close

Else 
MsgBox("Aucun nouveau écart de stock détecté. Base à jour")
End If	
    Else

'** Corps du mail **
strBody = ""
strBody = strBody & ""
strBody = strBody & "\"
strBody = strBody & \"----
Genzyme Lyon , \"
strBody = strBody & \"----
Alerte MES, \"
strBody = strBody & \"----
Écart(s) de stock detecte(s), \"
strBody = strBody & \"----
" & Now & ", \"
strBody = strBody & \"----
Problème,  Matiere non définie dans les valeurs d'ajustement : " & codeMatiereXML & ",  \"
strBody = strBody & "
"
strBody = strBody & ""

'** Appel fonction Mail **
Call SendMail("kevin.moine@genzyme.com", strBody, "Rapport Script")
MsgBox("Mail envoyé")
End If
Next

Next

End If

Next

End If

Loop
Else
MsgBox("Tous les fichiers ont déjà été traités précedemment")
End If
'strBody = "
" & strBody