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

Contribuez Discussion :

Automatiser l'ouverture d'un fichier compatible Excel depuis le Web (téléchargement)


Sujet :

Contribuez

  1. #81
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re

    sisi!!! mais ta bidouille ne fonctionne pas !!!!j'ai essayer au moins 10 fois
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  2. #82
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut

    Ce n'est pas une bidouille mais un contournement d'un dysfonctionnement coutumier de Seven !
    Et aucun souci de mon côté sur différents ordinateurs sous Seven en modifiant le répertoire courant
    via Enregistrer sous … : il suffit juste de pointer sur le dossier System32 de Windows puis Annuler

    As-tu au moins vérifié la présence de la dll indiquée dans les Références dans le répertoire System32 ?

    Sinon l'astuce est qu'une fois les dll activées puis le classeur enregistré
    et ce même sous Windows 8.1 (Edit : oui mais pas à vide, avec du code, pièce jointe corrigée …)
    c'est disponible pour un autre ordinateur sous Seven (un autre de mes tests) :
    Fichiers attachés Fichiers attachés
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  3. #83
    Expert éminent
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 087
    Points : 7 168
    Points
    7 168
    Billets dans le blog
    20
    Par défaut
    Bonjour Marc,

    J'ai testé ton code #76 , pour la dll ton contournement fonctionne très bien.

    Par contre je ne peux ouvrir directement le fichier CSV, j'ai d'abord un menu déroulant

    Nom : forum.gif
Affichages : 412
Taille : 56,2 Ko

    du coup j'ai fait cela et ça fonctionne

    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
    #If Win64 Then
        Private Declare PtrSafe Function FindWindowExA& Lib "user32" (ByVal hParent&, ByVal hChild&, ByVal ClassName$, ByVal WindowName$)
        Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal MilliSeconds&)
    #Else
        Private Declare Function FindWindowExA& Lib "user32" (ByVal hParent&, ByVal hChild&, ByVal ClassName$, ByVal WindowName$)
        Private Declare Sub Sleep Lib "kernel32" (ByVal MilliSeconds&)
    #End If
     
    Const MSG = "DemoEuroNextCsvIEAuto :", PROC = "ThisWorkbook.IEAuto"
     
    '##############ajout oliv
    Const PROCSave = "ThisWorkbook.IEAutoEnregistrer"
    '##############
     
    Dim IE As New InternetExplorer, D As Date, H&, T!
     
    Sub DemoEuroNextCsvIEAuto()
        Const EG = "edit-go"
        T = Timer
        IE.Navigate "https://www.euronext.com/fr/popup/data/download?ml=nyx_pd_stocks&cmd=default&formKey=nyx_pd_filter_values%3A1006ef55d4998cc0fad71db6a6f38530"
        While IE.Busy Or IE.ReadyState < READYSTATE_COMPLETE: DoEvents: Wend
        If Not IsObject(IE.Document.all(EG)) Then
            IE.Visible = True: T = 0: Beep: Set IE = Nothing
        Else
            With Application
                If IIf(.UseSystemSeparators, .International(xlDecimalSeparator), .DecimalSeparator) = "," Then _
                   IE.Document.all("edit-decimal-separator-2").Checked = True
            End With
            IE.Document.all("edit-format-2").Checked = True
            IE.Document.all(EG).Click
            Do: H = FindWindowExA(IE.Hwnd, 0&, "Frame Notification Bar", vbNullString): Loop Until H
            '        Sleep 700
            IE.Visible = True
    '##############modif oliv
            IEAutoEnregistrer
    '##############
        End If
    End Sub
     
    Private Sub IEAuto()
        Debug.Print "ieauto debut"
        Dim oIUIAIP As IUIAutomationInvokePattern, oCUIA As New CUIAutomation
        On Error Resume Next
     
        Set oIUIAIP = oCUIA.ElementFromHandle(ByVal H).FindFirst(TreeScope_Subtree, _
                                                                 oCUIA.CreatePropertyCondition(UIA_NamePropertyId, "Ouvrir")). _
                                                                 GetCurrentPattern(UIA_InvokePatternId)
        oIUIAIP.Invoke
        Set oIUIAIP = Nothing: Set oCUIA = Nothing
        If Err.Number Then
            Debug.Print MSG; Err.Number
            T = 0: Beep: Set IE = Nothing
        Else
            D = Now + 0.00002: Application.OnTime D, PROC
        End If
    End Sub
     
    '##############ajout oliv
    Private Sub IEAutoEnregistrer()
        Debug.Print "IEAutoEnregistrer debut"
        Dim oIUIAIP As IUIAutomationInvokePattern, oCUIA As New CUIAutomation
        On Error Resume Next
        Set oIUIAIP = oCUIA.ElementFromHandle(ByVal H).FindFirst(TreeScope_Subtree, _
                                                                 oCUIA.CreatePropertyCondition(UIA_NamePropertyId, "Enregistrer")). _
                                                                 GetCurrentPattern(UIA_InvokePatternId)
        If oIUIAIP Is Nothing Then D = Now + 0.00002: Application.OnTime D, PROC
        oIUIAIP.Invoke
        Set oIUIAIP = Nothing: Set oCUIA = Nothing
        If Err.Number Then
            Debug.Print "IEAutoEnregistrer"; Err.Number
            T = 0: Beep: Set IE = Nothing
        Else
            D = Now + 0.00002: Application.OnTime D, PROCSave
        End If
    End Sub
    '##############
     
    Private Sub Workbook_Deactivate()
        If ActiveWorkbook.Name Like "*_Equities_EU_*.csv" And T Then
            Debug.Print MSG; Format$(Timer - T, " 0.000s")
            On Error Resume Next
            Application.OnTime D, PROC, , False
            T = 0: IE.Quit: Set IE = Nothing
            On Error GoTo 0
            Application.ScreenUpdating = False
            With ActiveWorkbook.ActiveSheet.Cells(1).CurrentRegion
                Feuil1.Name = .Cells(2, 1).Value & " " & .Cells(3, 1).Text
                .Cells(4, 1).Clear: Feuil1.UsedRange.Clear
                .Cells(5, 1).CurrentRegion.Copy Feuil1.Cells(2, 2)
                With Feuil1.Cells(2, 2).CurrentRegion
                    Union(.Columns(5), .Columns(11)).HorizontalAlignment = xlCenter
                    Union(.Columns("F:I"), .Columns(13)).NumberFormat = "#,##0.000 "
                    .Columns(12).NumberFormat = "#,##0 "
                    .Columns("A:D").AutoFit: .Columns(10).AutoFit: .Columns(13).AutoFit
                End With
                .Rows(1).Copy Feuil1.Cells(2)
            End With
            ActiveWorkbook.Close False
            With Feuil1
                .[G1:N1].HorizontalAlignment = xlCenter
                .Cells(2).CurrentRegion.Columns(4).Replace "é", "é", xlPart
                .Activate: Cells(2, 1).Select: ActiveWindow.FreezePanes = True
            End With
            Application.ScreenUpdating = True
        End If
    End Sub
     
    ' • Temporisations : - ligne 27 : conditionne l'ouverture du premier coup (effet "flash")
    '                    - ligne 45 : délai du prochain IEAuto en cas de loupé (1 jour = 86400s * 0.00002 = 1.7s)
     
    ' • Ligne 37 : bouton à déclencher
    edit : sous W7 64BIT et IE11 et office 2010

  4. #84
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut

    Salut Oliv et merci de ton retour !

    Le contournement n'est pas compliqué s'agissant juste de changer le lecteur courant …

    Je viens de tester sur Windows 8.1 & IE11 & Office 2010 : le bandeau affiche directement le bouton Ouvrir,
    je n'ai pas comme toi la première partie avec le bouton Enregistrer, est-ce dû à un paramétrage ? …

    Au passage dans cette version de Windows la dll est par défaut dans SysWOW64 …
    J'ai ajouté mon code à la pièce jointe de mon précédent message avec les dll activées
    car sans code sur certains ordinateurs je n'ai pas toujours ces dll activées ! Microsoft, tout un poème !

    Sinon les deux boutons pourraient être inclus dans une seule procédure mais tu t'es bien débrouillé, félicitations !
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  5. #85
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    bonjour ok c'est bon ca fonctionne

    marc n'y aurait il pas moyen avec le dialog save as de le faire par macro ton astuce

    peut être devrions nous enregistrer la 32 bit elle se trouve dans les deux chez moi (syswow et system 32) "UiAutomationcore.dll"


    sinon ca fonctionne
    j'aimerais quelque explication sur le code de ieauto :que fait elle exactement elle clique ou elle shunt cette étape et envoie le message au bandeau comme si c'était le bouton qui l'avait fait ?????
    il faut maintenant que j'étudie cet api
    en tout ca nickel quand ca fonctionne après selon les PCS c'est plus ou moins long on dirait j'ai vérifier sur mes 3 pc en utilisation ils n'ont pas la même versions


    bravo!! depuis le temps que l'on cherchait ce purée de purée de click sur le bouton

    dans la macro ieauto h est bien le handle ????

    donc si tu arrive a envoyer le message je pense que les api post et sendmessage ne sont pas a la ramasse comme je croyais a étudier !!!!

    reste a trouver l'astuce pour gérer cette erreur de chargement de DLL celle que tu propose reste un truc perso il faut trouver le moyen de rendre cela universel
    ENCORE BRAVO !!! +3
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  6. #86
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut
    Je répète : m'étant déjà renseigné sur le sujet, c'est spécifique à Seven, aucun souci sous Windows 8.1 et
    ce n'est pas un problème d'enregistrement de dll car si j'ouvre un classeur sauvegardé avec les dll activées sous Windows 8.1
    sur un ordinateur sous Seven cela fonctionne sans souci, les dll restant bien activées, voir la pièce jointe de mon post #82 …

    Par contre, pour un Seven 64 bits autant pointer sur SysWOW64 comme le fait Windows 8.1.
    J'ai essayé sous Seven les dll de chaque dossier et je n'ai pas rencontré de souci …

    Et franchement ce n'est pas compliqué de changer le répertoire courant via Enregistrer sous !
    « C'est simple ! » comme il dit le p'tit gars de chez Renault.
    L'astuce habituelle du net étant de copier la dll dans le répertoire courant …
    Et maintenant avec ma pièce jointe il n'y a même pas à contourner !


    La procédure appelle le bouton, c'est comme un click.
    En consultant la documentation sur MSDN, Invoke active le contrôle et déclenche son action …

    La variable H globale au niveau module est bien le handle du bandeau, elle est initialisée par la ligne de code n°26 …

    Quant aux API post et sendmessage c'est bien plus usine à gaz qu'avec UIAutomation, j'y ai déjà laissé des plumes !

    Patrick de ton côté tu as le bandeau avec Ouvrir direct ou c'est comme pour Oliv ?
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  7. #87
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    ben en fait ca dépends des pages des fois j'ai simplement ouvrir des fois j'ai bien la combo a droite du bouton

    c'est ce qui explique que les sendkeys déraillaient quelquefois si ca tombait sur la combo le enter ne faisant que développer la combo

    attention quand même :hier a ma grande surprise j'ai notre bonne vielle fenêtre de téléchargement
    c'est pour cela quand dans mes dernière version dans la discutions d'abc bourse dans le do loop je mettait les deux recherche de handle

    je vais essayer de retrouver la page je t'envoie le lien si je la retrouve j'en visite tellement en ce moment j'apprend le JavaScript et jquery


    après pour ton astuce sur la dll :je reste persuadé qu'il y a quelque chose a faire
    imagine que tu distribue un code et que celui qui va l'utiliser ne pige pas une miette de ce que tu raconte (ca existe crois moi) et ben walouh!!!

    si la dll avec dans le dossier du classeur fonctionne pourquoi pas faire une copie dynamique puis un kill je dis ca juste comme ca je n'ai jamais essayé

    ps :attention marc la dll je l 'ai bien dans les deux dossier sur mes trois ordi en fonction
    donc ton astuce doit être portée en fonction de la version 64/32 bits) de excel

    sur mon seven ultimate c'est le syswow ultimate étant qu'en 64 bits et je tourne avec excel 2013 dedans j'ai testé!!!!
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  8. #88
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut




    Avec UIAutomation cela m'arrangerait de toujours avoir une fenêtre de téléchargement au lieu du bandeau
    (est-ce paramétrable dans IE ?) comme avec Firefox car cela permettrait aussi de
    détecter quand le téléchargement est vraiment disponible une fois le bouton OK non grisé,
    je n'aurais plus besoin de la temporisation de la ligne de code n°27 pour déclencher l'ouverture du premier coup …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  9. #89
    Expert éminent
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 087
    Points : 7 168
    Points
    7 168
    Billets dans le blog
    20
    Par défaut
    Je pense que c'est lié à la méthode qu'utilise le site pour envoyer le fichier excel.

  10. #90
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    un truc simple marc plus de manipulation a faire
    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
    Private Sub IEAuto()
        FileCopy "C:\Windows\System32\UIAutomationCore.dll", ThisWorkbook.Path & "\UIAutomationCore.dll"
        On Error Resume Next
        ThisWorkbook.VBProject.References.AddFromFile (ThisWorkbook.Path & "\UIAutomationCore.dll")
        Err.Clear
        Dim oIUIAIP As IUIAutomationInvokePattern, oCUIA As New CUIAutomation
        On Error Resume Next
        Set oIUIAIP = oCUIA.ElementFromHandle(ByVal H).FindFirst(TreeScope_Subtree, _
                                                                 oCUIA.CreatePropertyCondition(UIA_NamePropertyId, "Ouvrir")). _
                                                                 GetCurrentPattern(UIA_InvokePatternId)
        oIUIAIP.Invoke
        Set oIUIAIP = Nothing: Set oCUIA = Nothing
        If Err.Number Then
            Debug.Print MSG; Err.Number
            T = 0: Beep: Set IE = Nothing
        Else
            D = Now + 0.00002: Application.OnTime D, PROC
        End If
    Kill ThisWorkbook.Path & "\UIAutomationCore.dll"
    End Sub

    je ne suis même pas sur que le file copy soit nécessaire finalement lurl dur fichier d'origine pourrait suffire finalement (pas testé!!)
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  11. #91
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut Heu là ! …

    Patrick,

    cela sert strictement à rien dans la procédure IEAuto car si la dll n'est pas référencée
    cela bloque forcément à la compilation donc bien avant de pouvoir exécuter le code ‼

    De toute manière une référence s'active manuellement avant d'écrire le code (Intellisense)
    ou au plus tard lors de la première tentative d'exécution qui est forcément avortée
    avec le message d'erreur que tu as pourtant publié dans ton post #77 !

    Si au moins tu avais testé en copiant ton code dans un nouveau classeur en référençant juste Microsoft Internet Controls

    J'ai pourtant été clair : sous Seven, soit on modifie le répertoire courant pour activer la référence et une fois le classeur
    enregistré c'est fini, soit on télécharge mon classeur du post #82 ! Pas besoin d'aucune autre manipulation …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  12. #92
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    fait moi plaisir marc test ca dans un fichier vierge enregistré en xls ou xlm
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub test()
        FileCopy "C:\Windows\System32\UIAutomationCore.dll", ThisWorkbook.Path & "\UIAutomationCore.dll"
         On Error Resume Next
        ThisWorkbook.VBProject.References.AddFromFile (ThisWorkbook.Path & "\UIAutomationCore.dll")
        Err.Clear
    End Sub
    et regarde tes références

    en tout cas chez moi ca fonctionne !! je viens de faire le test 3 fois en reprenant ton code dans un fichier neuf a chaque fois

    pour certaines reference VBA ne les reconnaissant pas il faut avoir activé "microsft visual basic extentibility x.x"
    sans ca vbproject..... plante
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  13. #93
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut




    Une procédure dans un classeur séparé, oui …

    Mais franchement pour une manipulation de deux secondes ! Et comme c'est définitif une fois le classeur enregistré …
    Le gars qui n'arrive pas à simuler un Enregistrer sous ou encore à télécharger ma pièce jointe,
    il est bon pour sucrer les fraises ‼
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  14. #94
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut

    Voici une mise à jour de la procédure IEAuto du post #76 afin de déclencher d'abord le bouton Enregistrer
    en cas d'absence du bouton Ouvrir lors de l'ouverture du bandeau de téléchargement (cf post #83 d'Oliv) :

    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
    Private Sub IEAuto()
            Dim oELMT As IUIAutomationElement, oIPAT As IUIAutomationInvokePattern, oCUIA As New CUIAutomation
            On Error GoTo Fin
        Do
            Set oELMT = oCUIA.ElementFromHandle(ByVal H).FindFirst(TreeScope_Subtree, _
                        oCUIA.CreatePropertyCondition(UIA_NamePropertyId, "Ouvrir"))
             If oELMT Is Nothing Then
                Set oIPAT = oCUIA.ElementFromHandle(ByVal H).FindFirst(TreeScope_Subtree, _
                            oCUIA.CreatePropertyCondition(UIA_NamePropertyId, "Enregistrer")) _
                                       .GetCurrentPattern(UIA_InvokePatternId)
                    oIPAT.Invoke
                    Sleep 100
             End If
        Loop While oELMT Is Nothing
            Set oIPAT = oELMT.GetCurrentPattern(UIA_InvokePatternId)
                oIPAT.Invoke
            Set oIPAT = Nothing:  Set oELMT = Nothing:  Set oCUIA = Nothing
            D = Now + 0.00002:  Application.OnTime D, PROC
            Exit Sub
    Fin:
            Debug.Print MSG; Err.Number
            T = 0:  Beep:  Set IE = Nothing
            Set oIPAT = Nothing:  Set oELMT = Nothing:  Set oCUIA = Nothing
    End Sub
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  15. #95
    Membre confirmé
    Homme Profil pro
    conseiller
    Inscrit en
    Janvier 2013
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : conseiller
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 367
    Points : 649
    Points
    649
    Par défaut
    Marc,
    excellente idée de passer par UIAutomationClient...idée à creuser :

    Pour la déclaration des API en 64 bits :
    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
    #If Win64 Then    
        Private Declare PtrSafe Function FindWindowExA Lib "user32" _
        (ByVal hWnd1 As LongPtr, ByVal hWnd2 As LongPtr, _
        ByVal lpsz1 As String, ByVal lpsz2 As String) As LongPtr
     
        Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal MilliSeconds As Long)
     
        Dim h As LongLong
    #Else
        Private Declare Function FindWindowExA Lib "user32" _
        (ByVal hParent&, ByVal hChild&, ByVal ClassName$, ByVal WindowName$)
     
        Private Declare Sub Sleep Lib "kernel32" (ByVal MilliSeconds&)
     
        Dim h As Long
    #End If
    Il y a cependant un problème quand je teste ta procédure sur Excel 2010 64 bits : la procédure va au bout mais Excel cesse de fonctionner et je dois le redémarrer.
    C'est la Sub Workbook_Deactivate qui fait planter Excel.

    A+

  16. #96
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut




    Ah mince ! Je vais retarder alors ma version se configurant automatiquement pour le Sleep effet "flash" …

    Je suppose que tu as bien pointé sur le dossier SysWOW64 pour la dll …
    Sinon en mode pas à pas, à quel endroit cela plante-t-il ?

    La variable H en Long ne passe pas en 64 bits ?
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  17. #97
    Membre confirmé
    Homme Profil pro
    conseiller
    Inscrit en
    Janvier 2013
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : conseiller
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 367
    Points : 649
    Points
    649
    Par défaut
    Je suppose que tu as bien pointé sur le dossier SysWOW64 pour la dll …
    par défaut c'est le system32 qui est pointé...et même si je fais Outils>références>cocher UIAutomationClient>parcourir et que je vais sélectionner la chemin de dossier C:\Windows\SysWOW64\UIAutomationCore c'est celui placé dans System32 qui est pointé lorsque j'active UIAutomationClient.

    Sinon en mode pas à pas, à quel endroit cela plante-t-il ?
    Nulle part : la procédure va jusqu'à son terme puis Excel cesse de fonctionner.

    La variable H en Long ne passe pas en 64 bits ?
    Non cela engendre une erreur d'incompatibilité de type...logique car ie.Hwnd ramène un LongLong en 64 bits donc donc il est logique que h qui a besoin de la valeur de ie.Hwnd soit également un LongLong.
    D'ailleurs il me paraît a priori plus logique de déclarer FindWindowExA en 64 bits comme cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Declare PtrSafe Function FindWindowExA Lib "user32" _    
        (ByVal hWnd1 As LongLong, ByVal hWnd2 As LongLong, _
        ByVal lpsz1 As String, ByVal lpsz2 As String) As LongLong
    et non avec des LongPtr à la place des LongLong mais cela fonctionne dans les deux cas donc...

    A+

  18. #98
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut


    Sur Windows 8.1 64 bits c'est SysWOW64 qui est automatiquement pointé pour la dll et sans besoin d'une manip …
    (pièce jointe du post # 82)


    Pour le plantage avec ton Excel en 64 bits je ne vois pas …
    Tente en modifiant le code du post #76 ainsi :

    • ligne n°10 : Dim IE As InternetExplorer, D As Date, H&, T!

    • ajouter avant la ligne n°15 : Set IE = New InternetExplorer
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  19. #99
    Membre confirmé
    Homme Profil pro
    conseiller
    Inscrit en
    Janvier 2013
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : conseiller
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 367
    Points : 649
    Points
    649
    Par défaut
    Quand j'ouvre la PJ du post #82 c'est system32 qui est automatiquement pointé.
    Ce n'est pas un problème de déclaration et d'instanciation de l'objet IE...ce n'est pas la 1ère fois que l'un de tes codes plante chez moi lorsque l'événement Deactivate est utilisé, même si dans la plupart des cas cela fonctionne. Je n'ai pas d'explication pour l'instant.
    A+

  20. #100
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut



    Merci de ton retour;
    je n'ai jamais eu ce souci sur plusieurs ordinateurs mais il est vrai leurs différentes versions d'Excel sont en 32 bits …

    Sur l'autre discussion tu déclares IE avec SHDocVw.InternetExplorer, as-tu essayé ainsi ici ?
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

Discussions similaires

  1. Forcer l'ouverture d'un fichier avec Excel
    Par Cda01 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 12/12/2011, 15h47
  2. [XL-2003] Ouverture d'un fichier par excel en 3 exemplaires
    Par basto dans le forum Excel
    Réponses: 1
    Dernier message: 25/08/2009, 17h05
  3. ouverture d'un fichier avec excel sous vs.net 2003
    Par lesultan2007 dans le forum VB.NET
    Réponses: 2
    Dernier message: 29/07/2009, 15h46
  4. Telecharger un fichier excel depuis le web via PERL
    Par ptimos93800 dans le forum Web
    Réponses: 3
    Dernier message: 19/03/2009, 18h38
  5. [vbexcel]automatiser l'ouverture d'un fichier
    Par Mugette dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 12/12/2005, 17h33

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