XL 2013 VBA erreur code 13 lors de l'ecriture des données

maspi69

XLDnaute Nouveau
Bonjour


Je souhaite enregistrer en CSV les données d'une feuille Excel

Pour cela j'ai ecrit quelques lignes qui sont censées gérer convenablement les dates (sinon je n'obtient pas les dates mais des 42 milles et des brouettes

Le problème, c'est que dans certaines cellules je n'ai pas de date (et c'est normal)

J'obtiens donc une erreur 13. Cela n'est pas forcement anormal

Mais je suis incapable de gérer l'erreur.


Le code SANS GESTION D'ERREUR:


Cells(1, 1).Select
Open "C:\temp\" & nomfichier & ".csv" For Output As #1


For i = 1 To dernierelignejlvtciel

For j = 1 To dernierecolonnejlvtciel '- 1

If i = 1 Then
Print #1, Cells(i, j).Formula + ";"; 'sépare les données par ; lors de l'criture de CSV
Else

Select Case j

Case Is = "1"
Print #1, CDate(CStr(Cells(i, j))) & ";"; ' traitement pour mettre les dates en texte lors de l'ecriture du CSV

Case Is = "2"
Print #1, CDate(CStr(Cells(i, j))) & ";"; ' traitement pour mettre les dates en texte lors de l'ecriture du CSV

Case Is = "38"
Print #1, CDate(CStr(Cells(i, j))) & ";"; ' traitement pour mettre les dates en texte lors de l'ecriture du CSV <==== C'EST ICI QUE CELA BLOQUE AVEC ERREUR 13. JE N'AI PAS TOUJOURS DE DATE DANS CES CELLULES. Elles sont soit vides soit avec une date

Case Else
Print #1, Cells(i, j).Formula + ";"; 'sépare les données par ; lors de l'criture de CSV


End Select


End If

Next j

Print #1, Cells(i, j + 1).Formula 'Fin de ligne

Next i

Close #1





Le code AVEC GESTION D'ERREUR (qui ne fonctionne pas. Excel se met en boucle et écrit du vide pendant des lustres)


Cells(1, 1).Select
Open "C:\temp\" & nomfichier & ".csv" For Output As #1


For i = 1 To dernierelignejlvtciel

For j = 1 To dernierecolonnejlvtciel '- 1

If i = 1 Then
Print #1, Cells(i, j).Formula + ";"; 'sépare les données par ; lors de l'criture de CSV
Else

Select Case j

Case Is = "1"
Print #1, CDate(CStr(Cells(i, j))) & ";"; ' traitement pour mettre les dates en texte lors de l'ecriture du CSV

Case Is = "2"
Print #1, CDate(CStr(Cells(i, j))) & ";"; ' traitement pour mettre les dates en texte lors de l'ecriture du CSV

Case Is = "38"
On Error GoTo erreurenregistrementfichier:
Print #1, CDate(CStr(Cells(i, j))) & ";"; ' traitement pour mettre les dates en texte lors de l'ecriture du CSV

Case Else
Print #1, Cells(i, j).Formula + ";"; 'sépare les données par ; lors de l'criture de CSV


End Select

Exit Sub

End If

Next j

Print #1, Cells(i, j + 1).Formula 'Fin de ligne

Next i

Close #1

erreurenregistrementfichier:

If Err.Number = 13 Then 'si la date est vide pour le lettrage, on fait un enregistrement "normal"
Print #1, Cells(i, j).Formula + ";"; 'sépare les données par ; lors de l'criture de CSV
Resume
End If



Si une âme charitable a une solution cela serait avec plaisir.

Merci d'avance
 

Discussions similaires