Bon de commande / VBA

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 Sub

Merci Thev.

Je viens de faire le test et cela ne m'exporte que le répère de la dernière ligne.

Lionel

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.

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 Sub

Merci 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 !

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
Next

Merci 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
capture
11export-ficom.txt (1.25 Ko)

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
Rechercher des sujets similaires à "bon commande vba"