VBA userform renommer photo

Résolu
Bonjour,

Je réalise un programme VBA dans le cadre de mon travail pour gérer des images sur une tablette portable. Je m'excuse d'avance mais je ne pourrai pas communiquer le programme entier. Voilà donc la partie concernant mon problème que je vais essayer de vous expliquer :

Sur un userform un bouton permet d'activer l'appareil photo de la tablette afin de prendre des photos. Les photos sont directement rapatriées vers :
C:\Users\...\Addons\take_picture". Ceci fonctionne.

Ensuite je veux renommer la dernière photo prise en fonction des caractères contenus dans une ligne du fichier excel.

J'arrive à détecter la dernière photo prise grâce à sa date. Mais ensuite je bloque pour renommer la photo, excel me dit que le chemin n'est pas bon ... Pouvez vous m'aider à identifier l'erreur ?

Je vous remercie.
Bonne journée,
Kévina

'Renommer la photo (PROBLEME)
Dim Last_way As String, New_way As String
Dim GestionFichier As New Scripting.FileSystemObject

I = Range("Q3")
PictureName = Range("F" & I)
Range("F" & I).Value = PictureName

Last_way = myDir & strFilename & t
New_way = PictureDir & PictureName & t

Name Last_way As New_way

End Sub

3 réponses

  1. Contributeur
    Avec ceci tu fermes l'userForm:

    Unload Alarm_not_ok 
    

    0
    1. Contributeur
      Le plus simple c'est de mettre un message avant la macro de renommage, demandant à l'utilisateur de fermer l'application.
      0
      1. Bonjour,

        Merci beaucoup pour votre aide ,j'ai essayé mais il restait des bugs des fois. Du coup j'ai trouvé la solution de diviser mon code en deux, c'est à dire la prise de photo s'effectue lorsque l'utilisateur clique sur le bouton "prendre une photo", et la dernière photo s'archive lorsqu'il clique sur "Next". Ca fonctionne bien mais le soucis vient ensuite, le bouton Next servait déjà pour changer d'userform et vérifier que l'utilisateur est bien écrit un commentaire (*). Maintenant lorsque que je clique sur Next, l'userform d'après ne répond plus du tout, je ne peux rien faire, ni cliquer ni rentrer des valeurs dans l'userform suivant... :/ J'ai l'erreur 91. Pensez vous qu'elle puisse venir de ma dernière manipulation?
        Je vous remercie,
        Kevina

        BOUTON "prendre une photo" :
        Private Sub CommandButton2_Click()
        Dim picture_number As Integer
        Dim FileSys As FileSystemObject
        Dim objFile As Object
        'Dim FileSys As Object
        Dim myFolder As Folder
        Dim strFilename As String
        Dim t As String
        Dim dteFile As Date
        Dim picture As String
        Dim newname As String
        Dim newnamedate As String
        Dim dDate As Date

        Dim myDir, myDirdestination, Dir As String
        I = Range("Q3")

        'set path for files - change for your folder
        myDir = "C:\Users\...l\Addons\camera\" 'using tablet
        myDirdestination = "C:\Users\..\Addons\new_picture" 'using tablet

        'to open Getac Camera (you need to click two times on button)
        'Shell "C:\Program Files (x86)\Getac\G-Camera\GetacCamera3.exe", vbMaximizedFocuse 'using tablet

        MsgBox "Please close the application"
        'to find the last picture taking click on Next button
        End Sub

        BOUTON NEXT :
        Private Sub CommandButton1_Click()

        Dim alarm_num As Integer
        Dim line As Integer
        Dim k As Integer
        Dim picture_number As Integer
        Dim FileSys As FileSystemObject
        Dim objFile As Object
        Dim FileSys As Object
        Dim myFolder As Folder
        Dim strFilename As String
        Dim t As String
        Dim dteFile As Date
        Dim picture As String
        Dim newname As String
        Dim newnamedate As String
        Dim dDate As Date
        Dim myDir, myDirdestination, Dir As String
        I = Range("Q3")

        'set path for files - change for your folder
        'Dir = "C:\Users\...\Addons\camera\" 'using tablet
        'myDirdestination = "C:\Users\...\Addons\new_picture\" 'using tablet

        'To find the last picture taking:
        ' set up filesys objects
        Set FileSys = New FileSystemObject
        Set myFolder = FileSys.GetFolder(myDir)

        'loop through each file and get date last modified. If largest date then store Filename
        dteFile = DateSerial(1900, 1, 1)
        For Each objFile In myFolder.Files
        If objFile.DateLastModified > dteFile Then
        dteFile = objFile.DateLastModified
        ' strFilename = objFile.Name
        End If
        Next objFile

        'move picture
        patrol = ActiveWorkbook.Name
        newname = patrol & Range("Q3").Value
        newnamedate = Day(Date) & "/" & Month(Date) & "/" & Year(Date) & Hour(Date) & Minute(Date) & Second(Date) & newname
        jour = Day(Date)
        mois = Month(Date)
        annee = Year(Date)
        newnamedate = jour & mois & annee & newname

        newname = Range("E" & I).Value
        Name myDir & strFilename As myDirdestination & newname & ".jpg"
        Range("H" & I).Value = newnamedate

        'Ancien programme non modifié (*)
        If TextBox1.Value = "" Then
        MsgBox "Please, add a comment"

        Else

        Sheets("sheet1").Select

        floor_name = name_usf.Caption

        Range("J" & step).Value = Alarm_not_ok.TextBox1

        Unload Alarm_not_ok

        End If

        End Sub
        0
    2. Contributeur
      Bonjour,

      comme ceci:

      Dim nouveaunom As String
      Dim chemin, chemindestination As String
      chemin = "C:\Users\....\Documents\azerty.jpg" ' a adapter
      chemindestination = "C:\Users\....\Documents\" ' a adapter
      nouveaunom = Range("Q3").Value
      Name chemin As chemindestination & nouveaunom & ".jpg"

      0
      1. Bonjour, merci beaucoup ca fonctionne à merveille !
        0
      2. Bonjour Le pivert,
        Après plusieurs tests je remarque qu'il y a encore un problème. En effet excel n'attend pas que les photos soient prises par l'utilisateur pour les déplacer. Je pense mettre une condition du genre : "pour continuer attend que utilisateur ferme l'application de l'appareil photo de la tablette".
        je pensais m'inspirer de ce genre de commande :
        Do While CurrentProject.AllForms(logiciel).Isloaded: DoEvents: Loop

        As tu une idée pour l'adapter à un logiciel externe ?
        Merci,
        0