VBA userform renommer photo

Résolu
kevina -  
cs_Le Pivert Messages postés 8437 Statut Contributeur -
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. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    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. kevina
       
      Bonjour, merci beaucoup ca fonctionne à merveille !
      0
    2. kevina
       
      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
  2. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    Le plus simple c'est de mettre un message avant la macro de renommage, demandant à l'utilisateur de fermer l'application.
    0
    1. kevina
       
      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
  3. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    Avec ceci tu fermes l'userForm:

    Unload Alarm_not_ok 
    

    0