Comparer date dans fichier fermé

cathodique

XLDnaute Barbatruc
Bonsoir:),

J'ai un code qui me permet d'importer un fichier csv. Ce fichier csv à une ligne d'entete, en colonne A des dates.

Je voudrais vérifier que l'année en colonne A du fichier csv est égale à l'année en B1 de la feuille nommée date.

Si cette condition est remplie, l'import s'effectue sinon on arrête l'import et on prévient l'utilisateur.

En vous remerciant.

Bonne soirée.

NB: fichier csv non autorisé sur XLD.:D
 

Pièces jointes

  • Import csv.xlsm
    21.9 KB · Affichages: 22

job75

XLDnaute Barbatruc
Bonjour cathodique, le forum,

Il est tellement simple d'ouvrir le fichier CSV :
Code:
Sub ChoixFichier()
Dim fichier As Variant
fichier = Application.GetOpenFilename("Tous les fichiers (*.csv),*.csv")
If fichier = False Then Exit Sub
Application.ScreenUpdating = False
On Error Resume Next 'sécurité
With Workbooks.Open(fichier).Sheets(1)
    If Year(.[A2]) <> Year(ThisWorkbook.Sheets("date").[B1]) Then 'test à adapter éventuellement
        MsgBox "Ce fichier ne correspond pas à l'année en date!B1..."
    Else
        Feuil1.Cells.Clear
        .UsedRange.Copy Feuil1.[A5]
    End If
    .Parent.Close
End With
End Sub
Bonne journée.
 

cathodique

XLDnaute Barbatruc
Bonjour Job75:),

Je te remercie pour ton code. Hélas, ne fonctionne pas.

Il ouvre bien le fichier csv, mais je me suis aperçu que les données sont en 1ère colonne et séparées par de ";".

edit: Alors qu'en ouvrant moi-même le fichier csv, les données sont dans des colonnes distinctes. Pas compris pourquoi.

Donc la comparaison est toujours fausse. Du coup, le code s'arrête alors que l'année en B1 est la même que sur le fichier csv de A2 à la dernière ligne.

pour info: Le code que j'ai utilisé, je l'ai repris d'un tuto il y a de cela un moment (je ne retrouve pas le lien).
J'en suis satisfait, il me manque juste cette vérification de l'année.

Merci beaucoup.

Bonne journée;)
 
Dernière édition:

job75

XLDnaute Barbatruc
Re,

J'ai corrigé ma macro en ajoutant la commande Convertir :
Code:
Sub ChoixFichier()
Dim fichier As Variant
fichier = Application.GetOpenFilename("Tous les fichiers (*.csv),*.csv")
If fichier = False Then Exit Sub
Application.ScreenUpdating = False
Application.DisplayAlerts = False
On Error Resume Next 'sécurité
With Workbooks.Open(fichier).Sheets(1)
    .Columns(1).TextToColumns .[A1], xlDelimited, Semicolon:=True 'commande Convertir
    If Year(.[A2]) <> Year(ThisWorkbook.Sheets("date").[B1]) Then 'test à adapter éventuellement
        MsgBox "Ce fichier ne correspond pas à l'année en date!B1..."
    Else
        Feuil1.Cells.Clear
        .UsedRange.Copy Feuil1.[A5]
    End If
    .Parent.Close False
End With
End Sub
Fichiers joints (2 CSV).

A+
 

Pièces jointes

  • Import csv(1).zip
    23.5 KB · Affichages: 16

job75

XLDnaute Barbatruc
Re,

Maintenant si vous tenez absolument à utiliser la macro Lecture le plus simple est que l'année soit dans le nom du fichier CSV :
Code:
Sub ChoixFichier()
   Dim fichier As Variant
   fichier = Application.GetOpenFilename("Tous les fichiers (*.csv),*.csv")
   If fichier = False Then Exit Sub
   If Val(Right(fichier, 8)) <> Year(Sheets("date").[B1]) Then MsgBox "Ce fichier ne correspond pas à l'année en date!B1...": Exit Sub
   ligne_debut = 5: colonne_debut = 1
   ligne_enCours = ligne_debut: colonne_enCours = colonne_debut
   Feuil1.Cells.Clear
   Lecture (fichier)
End Sub
Fichiers (2).

A+
 

Pièces jointes

  • Import csv(2).zip
    24.1 KB · Affichages: 18

cathodique

XLDnaute Barbatruc
Job75 toujours aussi efficace. C'est parfait.:)

J'espère pouvoir adapter à mon véritable fichier.

J'aurai bien aimé apprendre à effectuer cette opération sur un fichier fermé.

Je me contenterai de ta solution pour poursuivre mon travail.:D

Merci beaucoup, très gentil de ta part.

edit @job75 : nos messages se sont croisés. Merci beaucoup très sympa ta dernière proposition que je n'ai encore consulté. Je me suis empressé à répondre au message.
 

cathodique

XLDnaute Barbatruc
Re,

Maintenant si vous tenez absolument à utiliser la macro Lecture le plus simple est que l'année soit dans le nom du fichier CSV :
Code:
Sub ChoixFichier()
   Dim fichier As Variant
   fichier = Application.GetOpenFilename("Tous les fichiers (*.csv),*.csv")
   If fichier = False Then Exit Sub
   If Val(Right(fichier, 8)) <> Year(Sheets("date").[B1]) Then MsgBox "Ce fichier ne correspond pas à l'année en date!B1...": Exit Sub
   ligne_debut = 5: colonne_debut = 1
   ligne_enCours = ligne_debut: colonne_enCours = colonne_debut
   Feuil1.Cells.Clear
   Lecture (fichier)
End Sub
Fichiers (2).

A+
C'est la solution que j'espérais. Cependant, ce n'est pas ça. Je t'avais transmis un fichier ce nommant Exercice. Tu as rajouté l'année pour faire référence dans le code au nom du fichier. Merci mais ce n'est pas du tout ça.

Ce serait plutôt récupérer l'année de la cellule A2 du fichier csv.
ça me rendrait service car les fichiers que je reçois ne portent pas le même nom.
Voilà pourquoi, je veux récupérer la donnée dans le fichier csv lui-même, en l'occurence la cellule A2.

Merci quand, ne serait-ce que de m'avoir appris qu'on pouvait extraire un csv autrement.
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil, le forum

@job75
Tu vois que je soigne mon fanatisme ;)
VB:
Sub ChoixFichier()
Dim fichier As Variant
fichier = Application.GetOpenFilename("Tous les fichiers (*.csv),*.csv")
If fichier = False Then Exit Sub
Application.ScreenUpdating = False
Application.DisplayAlerts = False
On Error Resume Next 'sécurité
Workbooks.OpenText fichier, local:=True
With ActiveWorkbook.Sheets(1)
    If Year(.[A2]) <> Year(ThisWorkbook.Sheets("date").[B1]) Then 'test à adapter éventuellement
        MsgBox "Ce fichier ne correspond pas à l'année en date!B1..."
    Else
        Feuil1.Cells.Clear
        .UsedRange.Copy Feuil1.[A5]
    End If
    .Parent.Close False
End With
End Sub

NB: Post écrit sans savoir à quoi ressemble la macro Lecture.
 

cathodique

XLDnaute Barbatruc
Bonjour le fil, le forum

@job75
Tu vois que je soigne mon fanatisme ;)
VB:
Sub ChoixFichier()
Dim fichier As Variant
fichier = Application.GetOpenFilename("Tous les fichiers (*.csv),*.csv")
If fichier = False Then Exit Sub
Application.ScreenUpdating = False
Application.DisplayAlerts = False
On Error Resume Next 'sécurité
Workbooks.OpenText fichier, local:=True
With ActiveWorkbook.Sheets(1)
    If Year(.[A2]) <> Year(ThisWorkbook.Sheets("date").[B1]) Then 'test à adapter éventuellement
        MsgBox "Ce fichier ne correspond pas à l'année en date!B1..."
    Else
        Feuil1.Cells.Clear
        .UsedRange.Copy Feuil1.[A5]
    End If
    .Parent.Close False
End With
End Sub

NB: Post écrit sans savoir à quoi ressemble la macro Lecture.
:D:D:D:D:D:D:D:D:cool::cool::cool::cool::cool::cool::cool::cool:
Je savais que parmi les XLDien XLDienne, il y avait des pros.

Merci beaucoup Staple, c'est impeccable.

Et en plus, sans voir la macro lecture.:cool::cool::cool: trop fort.

Toute ma gratitude à toi et Job75 qui me démérite pas.

Très content de poursuivre, car c'est une aide gracieuse et charitable au profit d'une association de défense des animaux.

Merci beaucoup pour votre contribution. J'apprécie beaucoup.

Bon week-end à vous.
 

Staple1600

XLDnaute Barbatruc
Re

@cathodique
Euh, moi je n'ai fait qu'ajouter cette ligne
Workbooks.OpenText fichier, local:=True

NB1: Tant mieux pour les animaux, même si avant les animaux, on devrait peut être se focaliser sur l'humain (famine, guerre... etc)
Mais ceci est une autre histoire et Excel avec ou sans macros ne pourra pas faire grand chose.

NB2: J'utilise ce genre de syntaxe dans la plupart des posts qui traite de CSV
Est-ce à dire que tu n'as pas utilisé le moteur de recherche du forum avant de poser ta question ? ;)
Cela devrait pourtant être un réflexe basique pour un membre inscrit depuis 2012 ;)
 

job75

XLDnaute Barbatruc
Re, salut JM,

@ cathodique
pour info: Le code que j'ai utilisé, je l'ai repris d'un tuto il y a de cela un moment (je ne retrouve pas le lien).
J'en suis satisfait, il me manque juste cette vérification de l'année.
Vous en êtes sûr ? Chez moi les dates restituées en colonne A par la macro Lecture ne sont pas du tout correctes...

@ JM en effet ton code avec .OpenText évite la commande Convertir :D

cathodique n'a pas compris que le fichier est ouvert et qu'on n'utilise pas la macro Lecture...

A+
 

job75

XLDnaute Barbatruc
Re,

Dans ces fichiers (3) j'utilise - enfin - la macro Lecture comme le désire cathodique.

Mais bien sûr avec des modifications :

- pour pouvoir tester l'année de la date en A2 il faut faire 2 ouvertures (Input) du fichier

- pour restituer correctement les nombres ou les dates il faut convertir leurs textes et déclarer Variant la variable tampon.

A+
 

Pièces jointes

  • Import csv(3).zip
    24.8 KB · Affichages: 13

job75

XLDnaute Barbatruc
Re,

J'ai comparé les durées d'exécution (ouverture + copie + fermeture du fichier CSV) :

- macro du post #6 (avec la commande Convertir) => 0,43 seconde

- macro du post #10 (avec .OpenText) => 0,40 seconde

- macro Lecture du post #14 => 1,32 seconde.

La macro Lecture est lente parce que les données sont restituées une par une dans les cellules !

Avec un grand nombre de données ce sera très long.

A+
 

Discussions similaires

Statistiques des forums

Discussions
312 173
Messages
2 085 937
Membres
103 052
dernier inscrit
nizar0007