VBA - Enregistrer formules avant export CSV

Bonjour à tous et à toutes,

J'aimerais réaliser une macro me permettant de copier (garder en mémoire) une plage de formules et de la recopier après un export CSV (également réalisé par macro).

Cet export CSV récupère les valeurs des cellules et les colle au même endroit avant d'exporter au CSV. Une fois le fichie .csv créé, toutes mes formules ont disparu, il ne me reste que les valeurs écrites en dur.

Voici la partie "copier" de ma macro, mais elle ne fonctionne pas :

Set Plage = Range("T1:AQ1" & Cells(Rows.Count, "T").End(xlUp).Row)
Selection.SpecialCells(xlCellTypeConstants, 23).Select
Plage.Select
Selection.Copy
(...) 'export csv
Selection.Paste

Bonjour Firstname...

Peux-tu en dire un peu plus? A quoi va servir le csv créé?

Ce csv sera importé dans le CRM utilisé par mon entreprise.

Il s'agit de l'unique format de fichier accepté par ce CRM.

Bonjour,

une piste ?

Public Sub Import_CSV()
Dim ws As Worksheet, n As Long, rng As Range
    n = Cells(Rows.Count, 20).End(xlUp).Row
    Set rng = Cells(20).Resize(n, 24)
    Set ws = Worksheets.Add
    rng.SpecialCells(2).Copy ws.Cells(1)
    'export csv...
    Application.DisplayAlerts = False
    ws.Delete
End Sub

Mea culpa !

Ca fonctionne parfaitement mais je ne comprends pas vraiment comment ça fonctionne, je pensais que je devais rajouter "coller". Je ne vois pas où ça se produit.

Donc, si j'ai bien compris, tu veux que le CSV reprenne les valeurs de la plage de cellules?

Re,

@ FirstnameLastname

A qui t’adresses-tu ?

Cdlt.

Re,

@ FirstnameLastname

A qui t’adresses-tu ?

Cdlt.

Je m'adresse à toi en disant que cela fonctionne parfaitement même si je ne vois pas trop comment.

Re,

La procédures est identique à la tienne, sinon que l'on crée une feuille temporaire pour récupérer les données à exporter.

Cette feuille est supprimée en fin de procédure.

Que ne comprends-tu pas ?

Cdlt.

Jean-Eric,

Je n'ai pas eu trop le temps de bosser dessus hier après-midi.

Après vérification, cela ne fonctionne pas. Une nouvelle feuille est bien créée puis supprimée mais les données restent en dur dans ma feuille principale et les fonctions sont supprimées.

Les formules que j'aimerais garder sont dans la plage T2:AQ2.

Je vais commenter ligne par ligne voir si j'ai bien compris ta macro :

Public Sub Import_CSV()
Dim ws As Worksheet, n As Long, rng As Range
   'On affecte à n une plage du nombre de lignes et de 20 colonnes
    n = Cells(Rows.Count, 20).End(xlUp).Row
    'Ici je ne comprends pas pourquoi Cells ne possède qu'une seule valeur et pourquoi il est nécessaire de redimensionner la plage
    Set rng = Cells(20).Resize(n, 24)
    'On créé une nouvelle feuille
    Set ws = Worksheets.Add
    'Et on copie la plage de la feuille principale à partir de la première cellule de la nouvelle feuille
    rng.SpecialCells(2).Copy ws.Cells(1)
    'export csv...
    'Pas de message d'avertissement
    Application.DisplayAlerts = False
    'On supprime la nouvelle feuille
    ws.Delete
End Sub

Donc, si j'ai bien compris, tu veux que le CSV reprenne les valeurs de la plage de cellules?

Pardon, je n'avais pas vu ta réponse !

Ma macro exportCSV récupère les valeurs de ma plage T2:AQ2 et créé un fichier CSV.

Suite à ce traitement, mon fichier n'est pas réutilisable (le xltm je veux dire), je dois le fermer sans enregistrer et l'ouvrir à nouveau.

J'aimerais qu'après cet export au format CSV les cellules de la plage T2:AQ2 conservent leurs fonctions.

Ainsi, si j'insère de nouvelles données ou fais des modifications dans la plage A2:S2, elles seront prises en compte dans la plage T2:AQ2 sans que j'aie à fermer le document puis le rouvrir et recommencer l'insertion de mes données.

OK Firstname...,

Il semble que tu ais trouvé la solution à ton problème. Sinon dis-moi...

GVIALLES,

Jean-Eric m'a proposé une solution qui ne fonctionne pas tout à fait, je n'arrive toujours pas à garder ces satanés formules.

Je planche toujours sur le sujet, ton aide est la bienvenue.

Peux-tu indiquer les caractéristiques du CSV attendu par le CRM?

  • Le caractère délimiteur de champs (le ";" la plupart du temps mais peut être aussi "Tab" ou "," ou " " ou autre...)
  • Le caractère délimiteur de texte (la double-quote la plupart du temps mais peut être la simple-quote ou être absent).
Le plus simple, si tu le peux, c'est de joindre un exemple de fichier csv attendu par le CRM.

Le caractère de séparation doit être une virgule !

4test.csv (257.00 Octets)

Bonjour,

Joins un classeur à ta demande.

Cdlt.

Firstname,

Je propose le code suivant :

Option Explicit
Sub ExportCSV()
    Const cSep = ","
    Dim plage As Range
    Dim oRow As Range
    Dim oTS As Object, oFS As Object
    Dim sFilename As String
    Dim sBuffer As String
    Dim oSheet As Worksheet
    Dim lLastrow As Long
    Dim lFirstCol As Long, lLastCol As Long

    Set oSheet = ActiveSheet
    lLastrow = oSheet.UsedRange.Rows.Count
    lFirstCol = Letter2Number("T")
    lLastCol = Letter2Number("AQ")

    With oSheet
        Set plage = .Range(.Cells(1, lFirstCol), .Cells(lLastrow, lLastCol))
    End With

    sFilename = ThisWorkbook.Path & "\" & "ExportToCRM_" & Format(Now(), "yyyymmdd-HHMM") & ".csv"

    Set oFS = CreateObject("Scripting.FileSystemObject")
    Set oTS = oFS.CreateTextFile(sFilename, False)

    For Each oRow In plage.Rows
        sBuffer = Join(Application.Transpose(Application.Transpose(oRow)), cSep)
        oTS.WriteLine sBuffer
    Next

    oTS.Close

    Set oTS = Nothing
    Set oFS = Nothing

End Sub
Function Letter2Number(zLetter As String) As Long
'SOURCE: www.TheSpreadsheetGuru.com/the-code-vault

    Letter2Number = Range(zLetter & 1).Column

End Function

Je joins aussi mon EXCEL de test.

2test.xlsm (18.88 Ko)

Bonjour,

Joins un classeur à ta demande.

Cdlt.

En réalisant un classeur d'exemple j'ai compris mon erreur.

Je remplace toutes les cellules affichant 0 par "", ce qui me supprime les toutes les formules (même dans les cellules n'ayant pas de 0 bizarrement). Cela m'évite d'avoir ces 0 dans mon CSV.

Cependant, étant donné que les valeurs et formules sont copiées juste avant dans une autre feuille, je m'étonne qu'elles ne puissent être recollées par la suite.

Une idée ?

1exemple.xltm (17.72 Ko)

Firstname,

Je propose le code suivant :

J'ai déjà la macro pour exporter le CSV. La tienne étant meilleure, je vais pouvoir améliorer la mienne.

Le problème que je souhaite résoudre est que certaines cellules sont égales à 0 car la saisie utilisateur n'est pas nécessaire. Je remplace ces valeurs par "" mais j'efface également la formule s'y trouvant.

Voici la partie de ma macro posant problème :

For Each cellule In Plage.Cells
'Permet de remplacer toutes les cellules sans valeur (0) par des cellules vides
    cellule.Value = Replace(cellule.Value, ",", "")
    If cellule.Value = 0 Then
        cellule.Value = Replace(cellule.Value, "0", "")
    End If
Next cellule

J'aimerais pouvoir garder mes formules et valeurs intactes dans mon fichier .xltm après mon export CSV.

2exemple.xltm (17.72 Ko)

OK Firstname... j'améliore le code dans ce sens...

Rechercher des sujets similaires à "vba enregistrer formules export csv"