XL 2019 Erreur mineure export donnée au format CSV

flod49

XLDnaute Nouveau
Bonjour à tous,
j'ai un soucis (je pense mineur) mais je ne vois où est mon erreur :p
J'ai un code VBA qui est censé exporté une partie de mon onglet au format csv.

VB:
Sub RegCSV()
Dim Plage As Object, oL As Object, oC As Object, Tmp As String, Sep$
Sep = ";"
Set Plage = ActiveSheet.Range("A42:L51" & ActiveSheet.Range("DonneeFactuelle2").End(3).Row)
Open "fiche_info_propriete.csv" For Output As #1
For Each oL In Plage.Rows
Tmp = ""
For Each oC In oL.Cells
Tmp = Tmp & CStr(oC.Text) & Sep
Next
Print #1, Tmp
Next
Close
End Sub

Lorsque je clique sur le bouton, rien ne se passe...
Je joins mon fichier excel au cas où.

Merci de votre aide/conseil.
Bien à vous.
 

Pièces jointes

  • FICHE INFORMATION PROPRIETEV5.xlsm
    134.3 KB · Affichages: 8

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Votre macro fonctionne chez moi et écrit bien le fichier dans le dossier 'documents'.
Il contient 9 lignes utiles et 5098 lignes " ;;;;;;;;;" en fin de fichier.
C'est la détermination de votre plage de cellules qui ne va pas.

ActiveSheet.Range("A42:L51" & ActiveSheet.Range("DonneeFactuelle2").End(3).Row)
donne la plage A42:$L5140 puisque vous concatainez 51 et le dernier numéro de ligne occupée par DonneeFactuelle2.

Pourquoi A42 alors que votre tableau commence en C
Quant aux colonne K et L elles semblent faire partie d'un autre tableau de données.

Ne serait-ce pas la plage correspondant à
Set Plage = Intersect(range("C42:J51"), Range("DonneeFactuelle2").CurrentRegion)
qui donne C42:J50 qui vous interresse ?

Difficile de savoir sur quelle colonne faire un choix de lignes dans votre fichier.

Ci-joint le fichier .csv (extension modifiée en .txt pour le faire accepter par le forum).


cordialement
 

Pièces jointes

  • FICHE_INFO_PROPRIETE.txt
    70.1 KB · Affichages: 4

flod49

XLDnaute Nouveau
Bonjour et merci de votre réponse.
En effet je souhaite extraire toutes les données présentes dans le tableau ci-dessous et correspondant à "Donneefactuelle2", je m'y perds un peu à la détermination de ce range dans le code VBA.
Merci
1629109401990.png
 

flod49

XLDnaute Nouveau
J'ai donc adapté en fonction de votre proposition je donc mis en ligne:
VB:
Set Plage = Intersect(Range("C42:O51"), Range("DonneeFactuelle2").CurrentRegion)
L'export fonctionne correctement. 👍

J'aurais une petite question: comment faire en sorte que le fichier csv crée porte le nom de l'onglet avec éventuellement la date et l'heure de création au lieu de ma proposition standard.
Code:
Open "FICHE_INFO_PROPRIETE.csv" For Output As #1

Merci et bonne semaine
Sincères salutations d'un expatrié canadien 🇨🇦☺️
 

Hasco

XLDnaute Barbatruc
Repose en paix
Re,

Et vous n'avez rien tenté ?
Dans la macro suivante et corrigée :

  1. j'ai mis un chemin au fichier. Sinon les fichiers seront écrit dans le répertoire courant du système, qui n'est pas toujours le même
  2. j'ai typé les variables, toujours préférable aux variables génériques object
  3. le nom du fichier comporte les minutes et secondes alors faites attention aux doublons (avec des noms différents )
  4. j'ai numéroté le fichier ouvert par un numéro libre, rien ne vous dit qu'à l'instant T un fichier #1 n'est pas déjà ouvert par un autre processus en mémoire.
.Range("DonnéeFactuelle2") pourrait très bien être remplacé par .Range("C40') car .CurrentRegion renvoie le tableau complet de C40. Pour démonstration, dans la feuille sélectionnez C40 et tapez >TRL+*
C'est cette sélection là que reproduit .CurrentRegion (Region d'une plage délimitées par des lignes et colonne vides)

Le ";" final (et uniquement le final) des lignes devrait être supprimé car il crée une colonne vide.
Je vous laisse trouver le truc.

VB:
Sub RegCSV()
    Dim Plage As Range, oL As Range, oC As Range
    Dim Tmp As String, FileName As String
    Dim NumFile As Integer
    With ActiveSheet
        FileName = ThisWorkbook.Path & "\" & Replace(.Name, " ", "_") & Format(Now, "\_yyyy-mm-dd_hh-nn-ss") & ".csv"
        Set Plage = Intersect(.Range("C42:O51"), .Range("DonneeFactuelle2").CurrentRegion)
    End With
    NumFile = FreeFile()
    Open FileName For Output As #NumFile
    For Each oL In Plage.Rows
        Tmp = ""
        For Each oC In oL.Cells
            Tmp = Tmp & CStr(oC.Text) & ";"
        Next
        Print #NumFile, Tmp
    Next
    Close #NumFile
End Sub

Cordialement
 

flod49

XLDnaute Nouveau
Bonjour, désolé mais avec le décalage horaire pour ma première réponse je n'avais pas eu le temps de tester votre proposition (-5H peut facilement reporter les conversations au lendemain ;-) ).

Dans la deuxième, j'ai pu adapté selon votre proposition et c'est parfait! Un grand merci.

Parfait pour le dernière message!

TOUT est OK pour moi. (c'est résolu!)
Bonne continuation
 

Statistiques des forums

Discussions
312 109
Messages
2 085 383
Membres
102 878
dernier inscrit
asmaa