Bon de commande / VBA
- Messages
- 4'199
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
Bonjour,
La modification devrait être a priori la suivante (non testée)
Sub SaveAsTextFile()
Dim Tb_export As Object
Dim Ligne As Variant
Dim fFilename As String
Dim a As Integer, b As Integer
Dim tmP As String
Dim Separateur, Repère, ligne_export As String
Dim ligne_modèle()
'On sépare avec les tabulations pour l'ERP
Separateur = vbTab
nomfichier = "Export_Ficom" & "_" & Range("I6").Value & "_" & Range("X1").Value
'assignation de l'application Excel
Set xl = Application
'Stockage des lignes de Tableau2 dans le tableau tb_export
Set Tb_export = CreateObject("System.Collections.ArrayList")
For Each Ligne In [Tableau2].Columns("B:T").Rows
If Not IsEmpty(Ligne.Offset(, -1).Columns("A")) Then Repère = Ligne.Offset(, -1).Columns("A")
' transformation données de la ligne en chaîne délimitée par séparateur
ligne_export = Join(xl.Transpose(xl.Transpose(Ligne.Value)), Separateur)
Tb_export.Add (ligne_export)
Next
'ajout ligne modèle
ligne_modèle = Array(0, 0, 0, "C", "C", 0, "", "" & Repère & "", 0, 0, "", 0, "", "", 0, 0, 0, 0)
ligne_export = Join(ligne_modèle, Separateur)
Tb_export.Add (ligne_export)
'Exportation dans un fichier Texte à partir du tableau Tbexport
fFilename = Application.GetSaveAsFilename(InitialFileName:=nomfichier, Filefilter:="Text Files (*.txt), *.txt")
Open fFilename For Output As #1
For Each Ligne In Tb_export
Print #1, Ligne
Next
Close #1
End SubMerci Thev.
Je viens de faire le test et cela ne m'exporte que le répère de la dernière ligne.
Lionel
- Messages
- 4'199
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
Je viens de tester et le fichier obtenu me semble correct
Thev,
Dans le fichier que tu as mis en pièce jointe, seule le répère de la dernière ligne se met à la fin alors qu'il devrait y avoir autant de ligne qu'il y a de répère en colonne A.
- Messages
- 4'199
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
J'ai regardé trop rapidement. Ceci devrait convenir.
Sub SaveAsTextFile()
Dim Tb_export As Object
Dim Ligne As Variant
Dim fFilename As String
Dim a As Integer, b As Integer
Dim tmP As String
Dim Separateur, Repère, ligne_export As String
Dim ligne_modèle()
'On sépare avec les tabulations pour l'ERP
Separateur = vbTab
nomfichier = "Export_Ficom" & "_" & Range("I6").Value & "_" & Range("X1").Value
'assignation de l'application Excel
Set xl = Application
'Stockage des lignes de Tableau2 dans le tableau tb_export
Set Tb_export = CreateObject("System.Collections.ArrayList")
For Each Ligne In [Tableau2].Columns("B:T").Rows
' transformation données de la ligne en chaîne délimitée par séparateur
ligne_export = Join(xl.Transpose(xl.Transpose(Ligne.Value)), Separateur)
Tb_export.Add (ligne_export)
'ajout ligne modèle
If Not IsEmpty(Ligne.Offset(, -1).Columns("A")) Then
Repère = Ligne.Offset(, -1).Columns("A")
ligne_modèle = Array(0, 0, 0, "C", "C", 0, "", "" & Repère & "", 0, 0, "", 0, "", "", 0, 0, 0, 0)
ligne_export = Join(ligne_modèle, Separateur)
Tb_export.Add (ligne_export)
End If
Next
'Exportation dans un fichier Texte à partir du tableau Tbexport
fFilename = Application.GetSaveAsFilename(InitialFileName:=nomfichier, Filefilter:="Text Files (*.txt), *.txt")
Open fFilename For Output As #1
For Each Ligne In Tb_export
Print #1, Ligne
Next
Close #1
End SubMerci Thev. Ca marche parfaitement.
Bonjour Thev,
Excuses moi de te déranger encore une fois.
Pour l'export txt, je voudrais pour les lignes articles faire un modèle d'export et supprimer les colonnes masquées dans lesquelles je mettais les infos redondantes (les 0, A et D)
Dim ligne_article()
Code = Ligne.Offset(, -1).Columns("B")
Libellé1= Ligne.Offset(, -1).Columns("C")
Libellé2= Ligne.Offset(, -1).Columns("D")
Quantité = Ligne.Offset(, -1).Columns("F")
Unité = Ligne.Offset(, -1).Columns("G")
Puv = Ligne.Offset(, -1).Columns("H")
Descriptif = Ligne.Offset(, -1).Columns("E")
ligne_article = Array(0, 0, 0, "A", "D", 0, "", "" & Code & "", "" & Libellé1 & "", "" & Libellé2 & "", "" & Quantité & "", "" & Unité & "", "" & quantité & "", "" & unité & "", "" & Puv & "", 0, 0, 0, 0, "" & Descriptif & "")Peux tu me dire comment je dois faire pour ajouter ce code dans l'export car je n'y arrive pas?
Merci pour ton aide !
- Messages
- 4'199
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
D'après ce que je pense avoir compris
Dim ligne_modèle(), ligne_article()
'On sépare avec les tabulations pour l'ERP
Separateur = vbTab
'Nom fichier Export
nomfichier = "Export_Ficom" & "_" & Range("I6").Value & "_" & Range("X1").Value
'Stockage des lignes de Tableau2 dans le tableau tb_export
Set Tb_export = CreateObject("System.Collections.ArrayList")
Repère = Empty
For Each Ligne In [Tableau2].Columns("A:T").Rows
Code = Ligne.Columns("H")
Libellé1 = Ligne.Columns("I")
Libellé2 = Ligne.Columns("J")
quantité = Ligne.Columns("U")
unité = Ligne.Columns("V")
PUV = Ligne.Columns("W")
descriptif = Ligne.Columns("T")
ligne_article = Array(0, 0, 0, "A", "D", 0, "", Code, Libellé1, Libellé2, quantité, unité, quantité, unité, PUV, 0, 0, 0, 0, descriptif)
ligne_export = Join(ligne_article, Separateur)
Tb_export.Add (ligne_export)
'ajout ligne modèle
If Not IsEmpty(Ligne.Columns("A")) Then
Repère = Ligne.Columns("A")
Else
ligne_modèle = Array(0, 0, 0, "C", "C", 0, "", "" & Repère & "", 0, 0, "", 0, "", "", 0, 0, 0, 0)
ligne_export = Join(ligne_modèle, Separateur)
Tb_export.Add (ligne_export)
End If
NextMerci Thev, J'ai modifié des choses pour que ca fonctionne lors de l'import dans l'erp.
Par contre, j'ai un soucis pour les répères. Il s'intègre plusieurs fois. Je t'ai mis en pièce jointe une capture de l'excel et le txt final. Le repère test s'intègre plusieurs fois.
Pourrais tu me dire également comment faire pour mettre le repère au-dessous ou au-dessus de la ligne (juste me préciser la ligne de code)? Je vais une checkbox sur le userform qui va permettre de faire le choix.
Sub SaveAsTextFile()
Dim ligne_modèle(), ligne_article()
'On sépare avec les tabulations pour l'ERP
Separateur = vbTab
'Nom fichier Export
nomfichier = "Export_Ficom" & "_" & Range("I6").Value & "_" & Range("X1").Value
'Stockage des lignes de Tableau2 dans le tableau tb_export
Set Tb_export = CreateObject("System.Collections.ArrayList")
Repère = Empty
For Each Ligne In [Tableau2].Columns("A:I").Rows
Code = Ligne.Columns("B")
Libellé1 = Ligne.Columns("C")
Libellé2 = Ligne.Columns("D")
quantité = Ligne.Columns("F")
unité = Ligne.Columns("G")
PUV = Ligne.Columns("H")
descriptif = Ligne.Columns("E")
ligne_article = Array(0, 0, 0, "A", "D", 0, Code, Libellé1, Libellé2, quantité, unité, quantité, unité, PUV, 0, 0, 0, 0, descriptif)
ligne_export = Join(ligne_article, Separateur)
Tb_export.Add (ligne_export)
'ajout ligne modèle
If Not IsEmpty(Ligne.Columns("A")) Then
Repère = Ligne.Columns("A")
Else
ligne_modèle = Array(0, 0, 0, "C", "C", 0, "", "" & Repère & "", 0, 0, "", 0, "", "", 0, 0, 0, 0)
ligne_export = Join(ligne_modèle, Separateur)
Tb_export.Add (ligne_export)
End If
Next
'Exportation dans un fichier Texte à partir du tableau_objet Tbexport
fFilename = Application.GetSaveAsFilename(InitialFileName:="export-ficom", fileFilter:="Text Files (*.txt), *.txt")
Open fFilename For Output As #1
For Each Ligne In Tb_export
Print #1, Ligne
Next
Close #1
End Sub
- Messages
- 4'199
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
ci-dessous code modifié
Sub SaveAsTextFile()
Dim Tb_export As Object
Dim Ligne As Variant
Dim fFilename As String
Dim a As Integer, b As Integer
Dim tmP As String
Dim Separateur, Repère, ligne_export As String
Dim ligne_modèle(), ligne_article()
Dim repère_dessus As Boolean, repère_dessous As Boolean
'Nom fichier Export
nomfichier = "Export_Ficom" & "_" & Range("I6").Value & "_" & Range("X1").Value
'On sépare avec les tabulations pour l'ERP
Separateur = vbTab
'On positionne le repère
If checkbox1.Value = True Then repère_dessous = True _
Else repère_dessus = True
'Stockage des lignes de Tableau2 dans le tableau tb_export
Set Tb_export = CreateObject("System.Collections.ArrayList")
Repère = Empty
dernière_ligne = [Tableau2].Row + [Tableau2].Rows.Count - 1
For Each Ligne In [Tableau2].Columns("A:T").Rows
Code = Ligne.Columns("H")
Libellé1 = Ligne.Columns("I")
Libellé2 = Ligne.Columns("J")
quantité = Ligne.Columns("U")
unité = Ligne.Columns("V")
PUV = Ligne.Columns("W")
descriptif = Ligne.Columns("T")
ligne_article = Array(0, 0, 0, "A", "D", 0, "", Code, Libellé1, Libellé2, quantité, unité, quantité, unité, PUV, 0, 0, 0, 0, descriptif)
'repère dessus
If repère_dessus Then
'ajout ligne modèle
If Not IsEmpty(Ligne.Columns("A")) Then
Repère = Ligne.Columns("A")
ligne_modèle = Array(0, 0, 0, "C", "C", 0, "", "" & Repère & "", 0, 0, "", 0, "", "", 0, 0, 0, 0)
ligne_export = Join(ligne_modèle, Separateur)
Tb_export.Add (ligne_export)
End If
'ajout ligne article
ligne_export = Join(ligne_article, Separateur)
Tb_export.Add (ligne_export)
End If
'repère dessous
If repère_dessous Then
'ajout ligne article
ligne_export = Join(ligne_article, Separateur)
Tb_export.Add (ligne_export)
'ajout ligne modèle
If Not IsEmpty(Ligne.Columns("A")) Then
Repère = Ligne.Columns("A")
ligne_modèle = Array(0, 0, 0, "C", "C", 0, "", "" & Repère & "", 0, 0, "", 0, "", "", 0, 0, 0, 0)
Else
If Not IsEmpty(Ligne.Columns("A").Offset(1)) _
Or Ligne.Row = dernière_ligne Then
ligne_export = Join(ligne_modèle, Separateur)
Tb_export.Add (ligne_export)
End If
End If
End If
Next