900div
Nouveau membre
Bonjour
Dans une Sub VBA j'exporte en csv diverses feuilles du classeur (une 10zaine).
Ces feuilles sont le résultat de liaisons depuis une feuille de saisie.
Elles comportent donc des lignes dont les cellules sont des formules.
ex : (= si(FeuilSaisie!A1<>"";FeuilSaisie!A1;"")
Les formules sont "tirées" sur 500 lignes, mais les données qu'elles "récupèrent" depuis la feuille de saisie s'étalent entre 150 et 500 lignes suivant le cas.
J'utilise "not IsEmpy" pour trouver la dernière ligne "non-vide" Mais il semble que IsEmpty considère qu'une cellule avec une formule n'est pas "vide" même si la formule ramène "".
Les fichiers csv une fois créés comportent alors entre 0 et 350 lignes de ";" sans données.
Comment faire pour que les lignes sans données des feuilles excel, mais qui comportent des formules ne soient pas exportées.
Cette procédure s'inscrit dans un ensemble de processus que différents utilisateurs mettent en oeuvre. Il n'est pas possible de leur demander de faire un "copier-coller" pour des raisons fonctionnelles
J'ai simplifié le code présenté ici qui comporte des lignes en sus notamment des filtres sur le nom de la feuille pour en différencier les colonnes à exporter.
Merci pour toute idée technique.
SVP, pas d'idée fonctionnelle, si je fais ainsi c'est que je suis tributaire d'autres fonctionnements
Cordialement
CoolRider
Sub export(Feuilnote As String, chemin As String)
' export au format "csv"
' appelé par la form "nomdesfeuilles" paramètres reçus : le nom de la feuille à exporter et le chemin
'
Sep = ";"
NomFic = ThisWorkbook.Name
LonFic = Len(NomFic)
LonFic = LonFic - 5
NomFic = Left(NomFic, LonFic)
Sheets(Feuilnote).Select
Lig = 1 'première ligne à vérifier
Do While Not IsEmpty(Range("A" & Lig))
Lig = Lig + 1
Loop
' recherche de la dernière ligne non vide
Set Plage = ActiveSheet.Range("A1:F" & ActiveSheet.Range("A" & Lig).End(3).Row)
Open chemin & "\" & NomFic & "_" & Feuilnote & ".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
' exporte les feuilles au format "csv", "nom du fichier de travail_nom de la feuille"
' Gesterr::
End Sub
[/code]
Dans une Sub VBA j'exporte en csv diverses feuilles du classeur (une 10zaine).
Ces feuilles sont le résultat de liaisons depuis une feuille de saisie.
Elles comportent donc des lignes dont les cellules sont des formules.
ex : (= si(FeuilSaisie!A1<>"";FeuilSaisie!A1;"")
Les formules sont "tirées" sur 500 lignes, mais les données qu'elles "récupèrent" depuis la feuille de saisie s'étalent entre 150 et 500 lignes suivant le cas.
J'utilise "not IsEmpy" pour trouver la dernière ligne "non-vide" Mais il semble que IsEmpty considère qu'une cellule avec une formule n'est pas "vide" même si la formule ramène "".
Les fichiers csv une fois créés comportent alors entre 0 et 350 lignes de ";" sans données.
Comment faire pour que les lignes sans données des feuilles excel, mais qui comportent des formules ne soient pas exportées.
Cette procédure s'inscrit dans un ensemble de processus que différents utilisateurs mettent en oeuvre. Il n'est pas possible de leur demander de faire un "copier-coller" pour des raisons fonctionnelles
J'ai simplifié le code présenté ici qui comporte des lignes en sus notamment des filtres sur le nom de la feuille pour en différencier les colonnes à exporter.
Merci pour toute idée technique.
SVP, pas d'idée fonctionnelle, si je fais ainsi c'est que je suis tributaire d'autres fonctionnements
Cordialement
CoolRider
Code:
Sub export(Feuilnote As String, chemin As String)
' export au format "csv"
' appelé par la form "nomdesfeuilles" paramètres reçus : le nom de la feuille à exporter et le chemin
'
Sep = ";"
NomFic = ThisWorkbook.Name
LonFic = Len(NomFic)
LonFic = LonFic - 5
NomFic = Left(NomFic, LonFic)
Sheets(Feuilnote).Select
Lig = 1 'première ligne à vérifier
Do While Not IsEmpty(Range("A" & Lig))
Lig = Lig + 1
Loop
' recherche de la dernière ligne non vide
Set Plage = ActiveSheet.Range("A1:F" & ActiveSheet.Range("A" & Lig).End(3).Row)
Open chemin & "\" & NomFic & "_" & Feuilnote & ".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
' exporte les feuilles au format "csv", "nom du fichier de travail_nom de la feuille"
' Gesterr::
End Sub
[/code]