Exporter un CSV à partir de certaines lignes d'une plage

PAPA WALKER

XLDnaute Junior
Bonjour à tous,
Je cherche à exporter certaines données d'une plage.

En résumé, je mets à jour des données sur une première feuille "BASE"
Ces mises à jour se traduisent par l'ajour d'un Flag en colonne A (M+Row) et en colonne H par une date.
ensuite, je cherche à produire un CSV correspondant au modèle de la feuille "CSV attendu"

Dans le fichier joint, j'ai mis une feuille "Test CSV" dans laquelle la mise à jour de la cellule B2 déclenche une macro que j'ai récupérée dans un fichier sur ce site. (Malheureusement je ne me souviens plus dans quelle discussion :-(

L'auteur du code voulait bien m'aider ais comme je ne retrouve pas la discussion, j'en crée une autre..

je mets un fichier qui illustrera un peu mieux mes propos

Cordialement et merci à ceux qui me répondront
 

Pièces jointes

  • Prepacsv.xlsm
    37.3 KB · Affichages: 57

ROGER2327

XLDnaute Barbatruc
Re : Exporter un CSV à partir de certaines lignes d'une plage

Bonsoir PAPA WALKER,


Essayez ce code :​
VB:
Sub Tableau_Csv()
Dim i&, k&, l&
Dim oTxt$, oDat(), sDat(), oCol()

'Au choix, l'une des deux lignes suivantes :

    oCol = Array("F", "G", "H", "I", "L", "O", "R", "J", "M", "P", "S", "K", "N", "Q", "T")
'    oCol = Array(6, 7, 8, 9, 12, 15, 18, 10, 13, 16, 19, 11, 14, 17, 20)

    oDat = Feuil1.[A10].CurrentRegion.Value
    With Feuil2
        oTxt = .[B1].Value
        ReDim sDat(1 To UBound(oCol) + 1, 1 To 1)
        If oTxt <> "" Then
            For i = 2 To UBound(oDat, 1)
                If oDat(i, 1) Like "*" & oTxt & "*" Then
                    l = l + 1
                    ReDim Preserve sDat(1 To UBound(sDat, 1), 1 To l)
                    For k = 0 To UBound(oCol)
                        sDat(k + 1, l) = oDat(i, Columns(oCol(k)).Column)
                    Next k
                End If
            Next i
        End If
        .[A1].CurrentRegion.Offset(1, 0).ClearContents
        .[A2].Resize(l - (l = 0), UBound(sDat, 1)).Value = WorksheetFunction.Transpose(sDat)
    End With
End Sub


ROGER2327
#6443


Lundi 23 Gueules 140 (Occultation de Saint J Torma, euphoriste - fête Suprême Quarte)
29 Pluviôse An CCXXI, 8,2985h - chélidoine
2013-W07-7T19:54:59Z
 

PAPA WALKER

XLDnaute Junior
Re : Exporter un CSV à partir de certaines lignes d'une plage

Bonjour Roger 2327,
Merci de ta réponse que je viens de tester à l'instant.
Elle répond bien à une partie de ma problématique :)
J'ai modifié le code pour m'approcher un peu plus de ce que j'essaie d'obtenir et je joins le fichier.
BASE 1 sert à générer les données dans la feuille TABLEAU1 avec le code présent dans le module1
BASE 2 comprend du code suplémetaire (dans la feuille) et servirait à alimenter le tableau de la Feuille TABLEAU2 (si ça marchait :) car j'ai tenté de modifier le code pour faire fonctionner la création du tabeau2 mais ça plante pour le moment

J'ai voulu créer des données dans les colonnes U à AR pour toutes les lignes qui seraient modifiées dans la plage nommée PALGE_TARIF. Ceci afin de le mettre en forme dans le tableau en vue de creéer le CSV attendu.

D'ailleurs, j'attends une réponse d'un interlocuteur sur la structure exacte du CSV que je dois produire. Ce matin en lisant mes mails j'avais un document qui me donnait une autre structure que celle évoquée la semaine dernière.... ça agace.
Mais ça n'empêche pas d'avancer ente temps.

Penses-tu que ce que j'ai fait pour l'ajout de ces données soit une bonne solution?
Cordialement
 

Pièces jointes

  • Test_CSV.xlsm
    67.8 KB · Affichages: 57

PAPA WALKER

XLDnaute Junior
Re : Exporter un CSV à partir de certaines lignes d'une plage

Bonjour Roger,

Je touche au but à force de tâtonnements, mais j’ai encore quelques questions :

Dans le fichier joint, j’ai deux feuilles. « Saisie » et « CSV »
Dans la fonction : Sub Prepa_Tableau_Csv()
J’ai du mal à maîtriser le code et je ne comprends pas pourquoi le tableau généré en feuille CSV me met une valeur dans la cellule A2 ?
Cette valeur correspond à celle de la cellule F1 de la Feuille « Saisie » ?
J’attends en fait d’avoir l’entête en ligne 1 et le corps du tableau qui démarre en ligne 2
Du coup, certaines mises en forme ne marche pas par la suite car il y a cette ligne intermédiaire qui gêne..
Je pourrais contourner en supprimant la ligne 2, mais bon ça ne le fait pas top.

Sub MAJ_TARIF_XL()
Je pense que le code pourrait être optimisé
En ne répétant pas tous les next C et en trainant les colonne I à T sous forme de variable, mais je ne suis pas arrivé à écrire que
Pour la plage I6 à T6
Aller en I 6 copier
Puis sélectionner les cellules visibles de la même colonne entre I10 et la valeur row Range("B65536").End(xlUp).Row
Et ensuite d’enchainer toutes les colonnes en adaptant la plage à la colonne traitée
De plus, j’aimerais ne traiter la colonne que si la valeur de sa ligne 6 <>0
Sub Fct_Export_CSV()
Enfin, dans la génération du CSV, j’ai laissé de côté la création d’un CSV vide Origine.csv si celui-ci n’existe pas ?

Alors si pour tout ça tu peux m’aider (toi ou une bonne âme), Merci infiniment

PS j’aimerais bien comprendre pourquoi cette ligne 2 se crée dans la feuille CSV ?
J’ai hâte de comprendre… (très hâte même)

Cordialement
 

Pièces jointes

  • MAJ_TARIF_CSV.xlsm
    140.5 KB · Affichages: 68

Discussions similaires

Statistiques des forums

Discussions
312 895
Messages
2 093 385
Membres
105 715
dernier inscrit
Yoenai