Récupérer la date de création d'une image sous VBA

Bonjour,

je suis nouveau sur le forum et sous VBA.

Je me suis lancé dans un projet pour une tablette professionnel Windows 7.

Le projet est composé de deux étapes majeurs.

1/ L'opérateur s'identifie dans Userform1. Si Nom et Matricule OK alors Userform2 se lance.

2/ L'opérateur fait des sélections dans 8 combobox. Une fois le formulaire remplie, il y a un bouton qui devient utilisable sur cet Userform1.Le Bouton doit lancer l'APN de la tablette. (Jusque là tout fonctionne correctement).

J'aimerai récupérer ensuite dans un tableau feuil3

  • Les données ComboBox sont bien récupérées au bon endroit.
  • un lien hypertexte de la dernière image crée en colonne I.
  • La date de création de cette image en colonne J.

Pour l'instant j'ai ça :

feuil3test1
  • j'ai tout les noms d'image du répertoire alors que je veux seulement la dernière.
  • Le nom doit être un lien hypertexte.
  • j'ai une date mais au format MM/JJ/AA. J'aimerai JJ/MM/AA
  • le tout n'est pas au bon endroit (Lien hypertexte doit être en colonne I et Date en colonne J)

avec ce code

Option Explicit
Option Base 1

Sub triDecroissant_Fichiers_DateDreation()
    Dim Fichier As String, Chemin As String
    '
    'Nécessite d'activer la référence "Microsoft Scripting RunTime"
    Dim Fso As Object
    Dim feuil3()
    Dim m As Integer, i As Integer
    Dim z As Byte, Valeur As Byte
    Dim Cible As Variant
    Dim FileItem As Object

    '---liste les fichiers du répertoire ---
    Chemin = "\\fichier-lh\users\n0563556\Documents\Mes fichiers reçus"
    Fichier = Dir(Chemin & "\*.jpg")
    'pour filtrer sur un type de fichiers (par exemple xls)
    'Fichier = Dir(Chemin & "\*.xls")

    'Boucle sur les fichiers
    Do

        m = m + 1
        ReDim Preserve feuil3(2, m)
        feuil3(1, m) = Fichier

        Set Fso = CreateObject("Scripting.FileSystemObject")
        Set FileItem = Fso.GetFile(Chemin & "\" & Fichier)

        'Récupère la date de création
        feuil3(2, m) = Left(FileItem.DateCreated, 10)
        '10 = le nombre de caractère date à afficher dans tableau
        'Pour récupérer la date de dernière modification
        'Tableau(2, m) = Left(FileItem.DateLastModified, 10)
        'Pour récupérer la taille du fichier
        'Tableau(2, m) = Left(FileItem.Size, 10)

        Fichier = Dir
    Loop Until Fichier = ""

    '---Trie les fichiers par ordre décroissant de création ---
    Do
        Valeur = 0
        For i = 1 To m - 1
            If CDate(feuil3(2, i)) < CDate(feuil3(2, i + 1)) Then
                For z = 1 To 2
                    Cible = feuil3(z, i)
                    feuil3(z, i) = feuil3(z, i + 1)
                    feuil3(z, i + 1) = Cible
                Next z

                Valeur = 1
            End If
        Next i
    Loop While Valeur = 1

    '--- Transfère les données dans la feuille de calcul ---
    For i = 1 To m
        Cells(i, 1) = feuil3(1, i)
        Cells(i, 2) = feuil3(2, i)
    Next i

End Sub

j'aimerai ça :

feuil3test2

Pouvez-vous m'aider s'il vous plait ?

Cordialement,

bonjour,

une proposition à tester

Option Explicit
Option Base 1

Sub dernierfichier()
    Dim Fichier As String, Chemin As String
    '
   'Nécessite d'activer la référence "Microsoft Scripting RunTime"
   Dim Fso As Object
    Dim feuil3(2, 1)
    Dim m As Integer, i As Integer
    Dim z As Byte, Valeur As Byte
    Dim Cible As Variant
    Dim FileItem As Object

    '---liste les fichiers du répertoire ---
   Chemin = "\\fichier-lh\users\n0563556\Documents\Mes fichiers reçus"
    Fichier = Dir(Chemin & "\*.jpg")
    'pour filtrer sur un type de fichiers (par exemple xls)
   'Fichier = Dir(Chemin & "\*.xls")

    'Boucle sur les fichiers

        Set Fso = CreateObject("Scripting.FileSystemObject")
   Do

        Set FileItem = Fso.GetFile(Chemin & "\" & Fichier)

        'Récupère la date de création et mémorise nom de fichier ayant date la plus récente
        If FileItem.datecreated > feuil3(2, 1) Then feuil3(2, 1) = FileItem.datecreated: feuil3(1, 1) = Fichier

        Fichier = Dir
    Loop Until Fichier = ""

    '--- Transfère les données dans la feuille de calcul ---
        ActiveSheet.Hyperlinks.Add Anchor:=Cells(2, 9), Address:=feuil3(1, 1), TextToDisplay:=feuil3(1, 1)
        Cells(2, 10) = Format(feuil3(2, 1), "dd/mm/yy")

End Sub

Bonjour h2so4,

Merci de ton aide.

Je viens de tester.

Ce qui fonctionne :

  • J'ai un lien hypertexte qui se crée de la dernière image du répertoire en colonne I.
  • J'ai bien la date en colonne J

Ce qui ne fonctionne pas :

- aucun lien quand je lance l'application depuis le début mais fonctionne quand je lance l'appli depuis le userform3

- Le lien Hypertexte " impossible d'ouvrir le fichier spécifié"

re-bonjour,

pour ton deuxième point qui ne fonctionne pas, j'ai oublié de mettre le chemin dans le lien. voici une correction.

Option Explicit
Option Base 1

Sub dernierfichier()
    Dim Fichier As String, Chemin As String
    '
  'Nécessite d'activer la référence "Microsoft Scripting RunTime"
  Dim Fso As Object
    Dim feuil3(2, 1)
    Dim m As Integer, i As Integer
    Dim z As Byte, Valeur As Byte
    Dim Cible As Variant
    Dim FileItem As Object

    '---liste les fichiers du répertoire ---
  Chemin = "\\fichier-lh\users\n0563556\Documents\Mes fichiers reçus"
    Fichier = Dir(Chemin & "\*.jpg")
    'pour filtrer sur un type de fichiers (par exemple xls)
  'Fichier = Dir(Chemin & "\*.xls")

    'Boucle sur les fichiers

        Set Fso = CreateObject("Scripting.FileSystemObject")
   Do

        Set FileItem = Fso.GetFile(Chemin & "\" & Fichier)

        'Récupère la date de création et mémorise nom de fichier ayant date la plus récente
       If FileItem.datecreated > feuil3(2, 1) Then feuil3(2, 1) = FileItem.datecreated: feuil3(1, 1) = Fichier

        Fichier = Dir
    Loop Until Fichier = ""

    '--- Transfère les données dans la feuille de calcul ---
       ActiveSheet.Hyperlinks.Add Anchor:=Cells(2, 9), Address:=chemin & "\" & feuil3(1, 1), TextToDisplay:=feuil3(1, 1)
        Cells(2, 10) = feuil3(2, 1)
        cells(2,10).numberformat="DD/MM/YY"

End Sub

 

Par contre la date est encore à l'anglaise 07/05/2016

Par contre le lien ne s'ouvre toujours pas ( j'ai une piste)

L'ensemble ne se lance pas quand fait un test.

Max1991 a écrit :

Par contre le lien ne s'ouvre toujours pas ( j'ai une piste)

il manquait un "\" dans le lien, corrigé dans le message précédent.

Merci le lien s'ouvre correctement !

En revanche l'ensemble de fonctionne pas quand je fais le test depuis le début.

Cette partie du code est dans module2

je pense que le programme n'appelle pas le module du coup il ne se passe rien.

Cela fonctionne seulement quand je suis dans le module, que j'enregistre puis je fais play.

Je vais essayer de trouver une solution pour appeler le module dans mon before close.

Le lien hypertexte écrase la ligne précédente au lieu de s'ajouter à la case vide suivante

re-bonjour,

Option Explicit
Option Base 1

Sub dernierfichier()
    Dim Fichier As String, Chemin As String
    '
    'Nécessite d'activer la référence "Microsoft Scripting RunTime"
    Dim Fso As Object
    Dim feuil3(2, 1)
    Dim m As Integer, i As Integer
    Dim z As Byte, Valeur As Byte
    Dim Cible As Variant
    Dim FileItem As Object

    '---liste les fichiers du répertoire ---
    Chemin = "\\fichier-lh\users\n0563556\Documents\Mes fichiers reçus"
    Fichier = Dir(Chemin & "\*.jpg")
    'pour filtrer sur un type de fichiers (par exemple xls)
    'Fichier = Dir(Chemin & "\*.xls")

    'Boucle sur les fichiers

    Set Fso = CreateObject("Scripting.FileSystemObject")
    Do

        Set FileItem = Fso.GetFile(Chemin & "\" & Fichier)

        'Récupère la date de création et mémorise nom de fichier ayant date la plus récente
        If FileItem.datecreated > feuil3(2, 1) Then feuil3(2, 1) = FileItem.datecreated: feuil3(1, 1) = Fichier

        Fichier = Dir
    Loop Until Fichier = ""

    '--- Transfère les données dans la feuille de calcul ---
    i = Cells(Rows.Count, 9).End(xlUp).Row + 1
    ActiveSheet.Hyperlinks.Add Anchor:=Cells(i, 9), Address:=Chemin & "\" & feuil3(1, 1), TextToDisplay:=feuil3(1, 1)
    Cells(i, 10) = feuil3(2, 1)
    Cells(i, 10).NumberFormat = "DD/MM/YY"

End Sub

Je ne suis pas certain que cela fonctionne. Tu sais comment executer le module2 à partir de mon userform3 ?

je ne suis pas un voyant extra lucide. je ne peux pas te donner un avis sur un code que tu ne fournis pas.

Excuse moi pour mon imprécision.

Quand je disais je ne pense pas que cela fonctionne, c'est une vérité ça ne fonctionne pas. Je ne sais simplement pas si ça vient du code en question où du fait qu'il soit dans module2.

Module 2 =

Option Explicit
Option Base 1

Sub dernierfichier()
    Dim Fichier As String, Chemin As String
    '
   'Nécessite d'activer la référence "Microsoft Scripting RunTime"
   Dim Fso As Object
    Dim feuil3(2, 1)
    Dim m As Integer, i As Integer
    Dim z As Byte, Valeur As Byte
    Dim Cible As Variant
    Dim FileItem As Object

    '---liste les fichiers du répertoire ---
   Chemin = "\\fichier-lh\users\n0563556\Documents\Mes fichiers reçus"
    Fichier = Dir(Chemin & "\*.jpg")
    'pour filtrer sur un type de fichiers (par exemple xls)
   'Fichier = Dir(Chemin & "\*.xls")

    'Boucle sur les fichiers

    Set Fso = CreateObject("Scripting.FileSystemObject")
    Do

        Set FileItem = Fso.GetFile(Chemin & "\" & Fichier)

        'Récupère la date de création et mémorise nom de fichier ayant date la plus récente
       If FileItem.datecreated > feuil3(2, 1) Then feuil3(2, 1) = FileItem.datecreated: feuil3(1, 1) = Fichier

        Fichier = Dir
    Loop Until Fichier = ""

    '--- Transfère les données dans la feuille de calcul ---
   i = Cells(Rows.Count, 9).End(xlUp).Row
    ActiveSheet.Hyperlinks.Add Anchor:=Cells(i, 9), Address:=Chemin & "\" & feuil3(1, 1), TextToDisplay:=feuil3(1, 1)
    Cells(i, 10) = feuil3(2, 1)
    Cells(i, 10).NumberFormat = "DD/MM/YY"

End Sub

j'aimerai que ce code s’exécute entre la sauvegarde et la fermeture ci-dessous :

Private Sub CommandButton1_Click()
ThisWorkbook.Save

ThisWorkbook.Close
End Sub

Private Sub CommandButton2_Click()
Quitter.Hide
Remplir.Show
End Sub

Private Sub Frame1_Click()

End Sub

Private Sub UserForm_Click()

End Sub

d'où ma question, doit-on appeler un module pour qu'il s’exécute à un moment précis?

re-bonjour,

si tu ne demandes pas d'exécuter une macro, elle ne s'exécutera pas.

mets

dernierfichier entre les deux instructions. mais sache que le résultat de la macro ne se retrouvera pas dans le fichier lorsque tu le rouvriras.

en effet

tu sauves

tu executes la macro qui fait des changements

tu fermes sans sauver les changements

ce qui à mon avis n'est pas ce que tu souhaites.

J'ai fait exactement ce que tu m'as écrit.

j'obtiens cela :

feuil3test3

J'ai fait exactement ce que tu m'as écrit.

et moi je t'ai donné les instructions pour faire ce que tu as demandé.

et je t'ai dit que cela ne sauverait pas les modifications dans ton fichier et donc que ces modifications ne seront pas présentes lorsque tu rouvriras ton fichier.

j'ai donc un doute quant au placement de cette instruction entre l'instruction save et l'instruction close.

Bonjour,

J'ai appelé la macro avant le save.

J'ai ajouté des +1 à I pour le décalage.

 i = Cells(Rows.Count, 9).End(xlUp).Row
    ActiveSheet.Hyperlinks.Add Anchor:=Cells(i+1, 9), Address:=Chemin & "\" & feuil3(1, 1), TextToDisplay:=feuil3(1, 1)
    Cells(i+1, 10) = feuil3(2, 1)
    Cells(i+1, 10).NumberFormat = "DD/MM/YY"

Je ferme et j'enregistre et ça fonctionne !!!! j'ai bien la saut de ligne à chaque fois.

Je suis super content ! et quand je suis content je vomis (LCDLP)

Un grand merci à toi pour ta patience et ton aide !

Rechercher des sujets similaires à "recuperer date creation image vba"