IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Discussion :

Enregistrer une image unique dans une fenêtre Chrome et fermer la fenêtre


Sujet :

VBA

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Janvier 2018
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Philippines

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Janvier 2018
    Messages : 73
    Par défaut Enregistrer une image unique dans une fenêtre Chrome et fermer la fenêtre
    bonjour à toutes et à tous

    Toujours dans mon catalogue perso,
    Dans le fichier CSV je recois plusieurs Url par ligne de produits et qui pointe sur une URL internet qui va afficher une image unique et rien d'autre.

    j'arrive parfaitement a ouvrir en serie les urls par une boucle mais
    1- je n'arrive pas enregister cette image unique
    2- je n'arrive pas à fermer la fenetre

    J'ai fouillé le forum et d'autres, mais la plus part des explication me semblent soit fumeuses soit dépasse très largement mes compétences.

    Voici ou en est mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    Option Explicit
    Sub Img_select(sRacine)
        Dim RetVal
        Dim sRacine As String
        Dim Photo As String
        Dim Ind_image As Integer
        Dim Fic_image As String
    ' boucle chargement images
        For Ind_image = 1 To 8
    ' ------------------------------------------------ récuperation url
            Range("A" & Ind_image).Select
            Photo = Range("A" & Ind_image).Value
    ' Lancement du navigateur Chrome sur l'URL
            RetVal = _
            Shell("C:\Program Files (x86)\Google\Chrome\Application\chrome.exe " & Photo, 1)
    ' Engregistrement de l'image dans le répertoire specifié
            Fic_image = sRacine & "\images\" & Photo
     
     
    ' fermeture de la fenetre Chrome
     
        Next
    End Sub
    Toutes suggestion sera la bienvenue
    D'avance merci

  2. #2
    Membre éprouvé
    Homme Profil pro
    Comptable
    Inscrit en
    Novembre 2018
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Comptable

    Informations forums :
    Inscription : Novembre 2018
    Messages : 100
    Par défaut
    Bonjour,

    Pour répondre à ta problématique, je te propose d'utiliser un graphique pour importer la photo et ensuite utiliser sa fonction export pour l'enregistrer. Je l'ai testé sous windows avec Excel 2010 mais je pense que les objets sont nativement utilisé par la version MAC 2016.

    N'hésite pas si tu as je n'ai pas bien saisie la problématique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
     
    Option Explicit
    '*******************************************************************************************************
    ' NAME : LoadPicture (PROCESS)
    '*******************************************************************************************************
    Sub LoadPicture()
     
        Dim sRacinePath  As String          ' Chemin de destination
        Dim sPictureName As String          ' Nom de la photo (ex : Photo1.png)
        Dim sPicturePath As String          ' Nom complet de la photo
        Dim sPictureUrl  As String          ' Url de la photo
        Dim sMessage     As String          ' Message de complétude
        Dim iRow         As Integer         ' Compteur
        Dim iFirstRow    As Integer         ' Première ligne de la boucle
        Dim iLastRow     As Integer         ' Dernière ligne de la boucle
        Dim iColumn      As Integer         ' Colonne contenant les Url (A=1, B=2, ...)
        Dim oWorksheet   As Excel.Worksheet ' Feuille Excel où se trouve les Url
     
        ' Paramètrage des constantes
        sRacinePath = "C:\Users\McEvee\Pictures\" '-- A Modifier avec ton chemin
        Set oWorksheet = Feuil1 ' -- Selectionner la feuille avec les Url
        iColumn = 1
        iFirstRow = 1
        iLastRow = oWorksheet.Cells(iFirstRow, iColumn).End(xlDown).Row
     
        If VBA.Right$(sRacinePath, 1) <> "\" Then 'Vérification du format du chemin
            sRacinePath = sRacinePath & "\"
        End If
     
        ' Vérification de l'existance du chemin
        If VBA.Len(VBA.Dir(sRacinePath, VBA.vbDirectory)) < 0 Then
            VBA.MsgBox "Le chemin " & sRacinePath & " n'existe pas"
            Exit Sub
        End If
     
        ' Boucle de chargement des images
        For iRow = iFirstRow To iLastRow
     
            sPictureUrl = CStr(oWorksheet.Cells(iRow, iColumn).Value)
     
            ' Pour récupérer uniquement le nom de l'image avec
            ' son extension à partir de l'Url
            sPictureName = VBA.Mid$(sPictureUrl, VBA.InStrRev(sPictureUrl, "/") + 1, _
                           VBA.Len(sPictureUrl))
     
            ' Sinon
            ' sPictureName = sPictureUrl
            sPicturePath = sRacinePath & sPictureName
     
            ' Export de l'image
            sMessage = ExportPicture(oWorksheet, sPictureUrl, sPicturePath)
     
            If Not sMessage = "Export OK" Then
                VBA.MsgBox "Ligne " & iRow & " : " & sMessage
                Exit Sub
            End If
     
        Next iRow
     
    End Sub
     
    '*******************************************************************************************************
    ' NAME : ExportPicture (FUNCTION)
    ' INPUT : oWorksheet, sPictureUrl, sRacinePath
    ' OUTPUT : String
    ' DESCRIPTION : Le chemin de destination (sPicturePath) doit contenir le chemin complet de l'image a
    ' exporter (ex : "C:/Username/Image/Photo1.png"). La fonction teste sa valeur au moment de la méthode
    ' Export de l'objet Chart qui est de type boolean (par défaut valeur True)
    '*******************************************************************************************************
    Public Function ExportPicture(oWorksheet As Excel.Worksheet, sPictureUrl As String, _
                                                                 sPicturePath As String) As String
     
     
        Dim oPicture As Object
        Dim oChart   As Object
     
        ExportPicture = VBA.vbNullString
     
        If VBA.Len(sPicturePath) > 256 Then 'Vérification de la longueur du chemin
            ExportPicture = "Le nom de l'image dépasse les capacités (Max 256)"
            Exit Function
        End If
     
        ' Insertion de l'image url dans la feuille (oWorksheet)
        Set oPicture = oWorksheet.Pictures.Insert(sPictureUrl)
     
        If oPicture Is Nothing Then 'Vérification du chargement
            ExportPicture = "Le chargement de l'image n'a pas abouti"
            Exit Function
        End If
     
        oPicture.CopyPicture 'On copie en mémoire
     
        ' On créer un graphique pour avoir accès à la méthode Export
        ' Le graphique est dimensioné en fonction de la photo
        Set oChart = oWorksheet.ChartObjects.Add(oPicture.Left, oPicture.Top, _
                                                 oPicture.Width, oPicture.Height).Chart
     
        oPicture.Delete ' On supprime la photo Url
        Set oPicture = Nothing 'Vidange
     
        ' On Copie l'image et on l'export avec son nom complet
        ' La méthode export possède deux paramètres optionnels (voir l'aide Chart.Export)
        With oChart
            .Paste
     
            If .Export(sPicturePath) Then
                ExportPicture = "Export OK"
            Else
                ExportPicture = "Un problème est survenu lors de l'export"
            End If
     
        End With
        Set oChart = Nothing
     
        'Suppression du chart
        For Each oChart In oWorksheet.ChartObjects
            oChart.Delete
        Next oChart
    End Function
    A+

  3. #3
    Membre confirmé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Janvier 2018
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Philippines

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Janvier 2018
    Messages : 73
    Par défaut
    Merci je regarde cela, mais je me suis complétement planté ce n'est pas Mac mais windows ;(

  4. #4
    Membre confirmé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Janvier 2018
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Philippines

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Janvier 2018
    Messages : 73
    Par défaut mes excuses pour mettre initialement trompe de place pour mon problème

    et oui initialement posté dans à la mauvaise place, je vais m'acheter de nouvelles

  5. #5
    Membre confirmé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Janvier 2018
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Philippines

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Janvier 2018
    Messages : 73
    Par défaut j'ai finalement eu le temps de le faire et...Miracle ça Marche je peux télécharger mes images et les enregistr
    MERCI John !!! un peu long a te revenir mais ton code marche comme un charme.
    je l'ai un peu simplifier et modifier pour s'ajuster à mes variables déjà utilisées dans mon code et le fait que mes images sont en ligne et non pas en colonne et commence à un emplacement bien spécifique.
    mais l'essentiel est resté
    et si cela peut aider quelqu'un et donné des idées...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
     
    Sub LoadPicture()
    '   l'essentiel des variable utilisé dans d'autres procedures
    '    Public Photo_Nom        As String          ' Nom de la photo (ex : Photo1.png)
    '    Public Photo_Chemin     As String          ' Nom complet de la photo
    '    Public Photo_Url      As String          ' Url de la photo
    '    Public sMessage         As String          ' Message de complétude
    '    Public Ind_Col          As Integer         ' Compteur
    '    Public Ind_first_Col    As Integer         ' Colonne contenant les Url (A=1, B=2, ...)
    '    Public Ind_der_Col      As Integer         ' Dernière ligne de la boucle
    '    Public Ind_Cat_lig      As Integer         ' Première ligne de la boucle
    '    public Photo_num        as integer         ' pour différencier les photos sous la même référence de produit
    '       sRacine = ActiveWorkbook.Path  est renseigné dès le debut de l'app
    '
    '                                               Paramètrage des constantes et des variables
    '
        Ind_first_Col = 113                         ' 1er colonne des url
        Ind_der_Col = 120                           ' derniere colonne des url
        Ind_Cat_lig = Catalogue_ajout_lig           ' ligne de la table contenant les image à traité venant de la boucle d'appel
        Photo_num = 0
    '                                               Boucle de chargement des images
        For Ind_Col = Ind_first_Col To Ind_der_Col
            Photo_Url = CStr(Catalogue.Cells(Ind_Cat_lig, Ind_first_Col).Value) ' Pour récupérer uniquement le nom de l'image avec
                                                                            ' son extension à partir de l'Url
            Photo_num = Ind_Col - Ind_first_Col + 1                         ' calcul du numero de l'image
                                                                            ' création du nom de l'image avec la référence produit
            Photo_Nom = Catalogue.Cells.Range("H" & Catalogue_ajout_lig).Value & _
                        "-" & Photo_num & ".jpg"
            Photo_Chemin = sRacine & " \Photo\" & Photo_Nom                             ' Photo_Nom = Photo_Url
            sMessage = ExportPicture(Catalogue, Photo_Url, Photo_Chemin)                ' Export de l'image
            If Not sMessage = "Export OK" Then
                VBA.MsgBox "Ligne " & Ind_Col & " : " & sMessage
                Exit Sub
            End If
        Next Ind_Col
     
    End Sub
     
    '*******************************************************************************************************
    ' NAME : ExportPicture (FUNCTION)
    ' INPUT : Catalogue, Photo_Url, sRacine
    ' OUTPUT : String
    ' DESCRIPTION : Le chemin de destination (Photo_Chemin) doit contenir le chemin complet de l'image a
    ' exporter (ex : "C:/Username/Image/Photo1.png"). La fonction teste sa valeur au moment de la méthode
    ' Export de l'objet Chart qui est de type boolean (par défaut valeur True)
    '*******************************************************************************************************
    Public Function ExportPicture(Catalogue As Excel.Worksheet, Photo_Url As String, _
                                                                 Photo_Chemin As String) As String
        Dim oPicture As Object
        Dim oChart   As Object
        ExportPicture = VBA.vbNullString
        If VBA.Len(Photo_Chemin) > 256 Then 'Vérification de la longueur du chemin
            ExportPicture = "Le nom de l'image dépasse les capacités (Max 256)"
            Exit Function
        End If
        ' Insertion de l'image url dans la feuille (Catalogue)
        Set oPicture = Photo_Prod.Pictures.Insert(Photo_Url)
        If oPicture Is Nothing Then 'Vérification du chargement
            ExportPicture = "Le chargement de l'image n'a pas abouti"
            Exit Function
        End If
        oPicture.CopyPicture 'On copie en mémoire
        ' On créer un graphique pour avoir accès à la méthode Export
        ' Le graphique est dimensioné en fonction de la photo
        Set oChart = Catalogue.ChartObjects.Add(oPicture.Left, oPicture.Top, _
                                                 oPicture.Width, oPicture.Height).Chart
        oPicture.Delete ' On supprime la photo Url
        Set oPicture = Nothing 'Vidange
        ' On Copie l'image et on l'export avec son nom complet
        ' La méthode export possède deux paramètres optionnels (voir l'aide Chart.Export)
        With oChart
            .Paste
            If .Export(Photo_Chemin) Then
                ExportPicture = "Export OK"
            Else
                ExportPicture = "Un problème est survenu lors de l'export"
            End If
        End With
        Set oChart = Nothing
        'Suppression du chart
        For Each oChart In Catalogue.ChartObjects
            oChart.Delete
        Next oChart
    End Function

  6. #6
    Membre confirmé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Janvier 2018
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Philippines

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Janvier 2018
    Messages : 73
    Par défaut Fonctionnement Aleatoire ! Ca marche sauf que pas à tout les coups ???????
    Bonjour à toutes et à tous.

    D'abord mes excuses aux administrateurs car il va y avoir 2 post sur le même sujet ne sachant pas comment classifier
    1 - sujet finalement pas résolut
    2 - Fonctionnement semblant aléatoire de VBA
    ???????

    Le code de John fonctionne sauf que..... le résultat est aléatoire !!!!!!!!!!!!!!! Voir screenshot du dossier ci-dessous.
    Lors du premier test avec 2 photos tout etait correcte, je passe à autre chose, et je fais un test intégré et je constate quelques photo VIDE.
    Donc j'analyse :
    • Je refais un test pas à pas en surveillant sur le 2eme ecran le résultat sur le repertoire, pour 4 photos ==> c'est OK
    • je mets une pose après l'exécution de la procédure pour 3 cycles ==> photo vide
    • Je refais un pas à pas pour 4 photos ==> 2 OK et ...............2 vides
    • je finis le cycle et toutes les photos sont vides


    Nom : SnapShot.png
Affichages : 293
Taille : 51,5 Ko



    J'ai refais plusieurs fois les tests avec différentes photos, en libérant le maximum de mémoire (fermeture de toutes les applis, skype, Chrome,....) en surveillant l'utilisation de la mémoire ..... et toujours des résultats aléatoires. Parfois toutes les photos sont VIDES parfois NON.
    J'ai également regardé la taille des fichiers et on constate que les fichiers vides on juste la taille de definition du fichier 11K mais pas le contenu de la photo
    Nom : SnapShot.png
Affichages : 272
Taille : 45,5 Ko

    AVEZ-VOUS UNE IDEE ?

  7. #7
    Membre éprouvé
    Homme Profil pro
    Comptable
    Inscrit en
    Novembre 2018
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Comptable

    Informations forums :
    Inscription : Novembre 2018
    Messages : 100
    Par défaut
    Salut,

    Le problème vient du fait que la macro n'a pas le temps de coller l'image (.paste) avant de l'exporter. Cela explique le fait que tu as des photos vides.

    Pour résoudre le problème il faut attendre que la copie se fasse avec la commande DoEvents. Rajoute cette ligne comme ci-dessous et dit moi si c'est moins aléatoire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    With oChart
          .Paste
          DoEvents '--- A rajouter pour laisser du temps pour la copie
          If .Export(Photo_Chemin) Then
              ExportPicture = "Export OK"
          Else
              ExportPicture = "Un problème est survenu lors de l'export"
          End If
     End With
    A+

  8. #8
    Membre confirmé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Janvier 2018
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Philippines

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Janvier 2018
    Messages : 73
    Par défaut
    Je viens de faire le test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    Public Function ExportPicture(Catalogue As Excel.Worksheet, Photo_Url As String, _
                                                                 Photo_Chemin As String) As String
        Dim oPicture As Object
        Dim oChart   As Object
        ExportPicture = VBA.vbNullString
        If VBA.Len(Photo_Chemin) > 256 Then                             'Vérification de la longueur du chemin
            ExportPicture = "Le nom de l'image dépasse les capacités (Max 256)"
            Exit Function
        End If
        '                                                               Insertion de l'image url dans la feuille (Photo_Prod)
        Set oPicture = Photo_Prod.Pictures.Insert(Photo_Url)
        If oPicture Is Nothing Then                                     'Vérification du chargement
            ExportPicture = "Le chargement de l'image n'a pas abouti"
            Exit Function
        End If
        oPicture.CopyPicture                                            'On copie en mémoire
                                                                        ' On créer un graphique pour avoir accès à la méthode Export
                                                                        ' Le graphique est dimensioné en fonction de la photo
        Set oChart = Catalogue.ChartObjects.Add(oPicture.Left, oPicture.Top, _
                                                 oPicture.Width, oPicture.Height).Chart
        oPicture.Delete
        Set oPicture = Nothing                                          ' Vidange
                                                                        ' On Copie l'image et on l'export avec son nom complet
                                                                        ' La méthode export possède deux paramètres optionnels (voir l'aide Chart.Export)
        With oChart
            .Paste
            DoEvents <================================= le DoEvents
            If .Export(Photo_Chemin) Then
                ExportPicture = "Export OK"
            Else
                ExportPicture = "Un problème est survenu lors de l'export"
            End If
        End With
        Set oChart = Nothing
                                                                        'Suppression du chart
        For Each oChart In Catalogue.ChartObjects
            oChart.Delete
        Next oChart
    Même sanction pas à pas j'ai l'image en automatique je n'ai pas l'image
    Ce ne pourrait pas être la place de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        oPicture.Delete
        Set oPicture = Nothing
    qui pose un problème ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 13/11/2009, 16h06
  2. Réponses: 0
    Dernier message: 07/06/2009, 12h31
  3. Réponses: 4
    Dernier message: 19/06/2008, 15h41
  4. position dans une image (selection dans une image)
    Par kaiseresis dans le forum Images
    Réponses: 3
    Dernier message: 31/05/2008, 13h30
  5. Réponses: 6
    Dernier message: 22/12/2004, 11h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo