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

Macros et VBA Excel Discussion :

VBA téléchargement intranet + problème d' exécution [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2016
    Messages : 4
    Par défaut VBA téléchargement intranet + problème d' exécution
    Bonjour à tous,
    tout d'abord je suis novice en macro excel : je me l'approprie depuis 1 mois en stage, donc il est possible que je ne sois pas assez claire et dans ce cas là excusez moi d'avance, je vais essayer de faire au mieux.
    j'avais comme mission de refaire fonctionner un outil informatique utilisant excel en local, ça c'est fait. Maintenant j'essaie de le mettre à disposition de tous sur l'intranet et j'ai donc du modifier certaines parties du code, qui ont entrainé des erreurs inattendues.
    Mon soucis se trouve dans la partie du code où la macro télécharge un fichier excel sur l'intranet puis le lit afin d'afficher une liste de produits à sélectionner dans une boîte de dialogue.

    Voici le 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
    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
    Private Sub UserForm_Initialize()
    Call Init
    End Sub
    
    Private Sub Init()
    
    'Ouverture du fichier de sauvegarde
    Open "D:\toto" For Append As #1
    Close #1
    
    'Chargement du chemin de sortie
    Open "D:\toto" For Input As #1
    While Not EOF(1)
        Input #1, a
        If LenB(a) <> 0 Then
            Me.TextBox1.Text = a
        End If
    Wend
    Close #1
    
    'Par défaut on récupère le chemin du bureau de l'utilisateur
    'par le biais de la fonction contenue dans le module Special_Path
    If TextBox1.Text = vbNullString Then TextBox1.Text = GetSpecialfolder(CSIDL_DESKTOP)
    
    FlagE:
    On Error Resume Next
    
    'Fermeture du fichier s'il est ouvert
    'et ouverture de celui-ci en lecture seule
    
    Windows("fichier.xls").Close (False)
    On Error Resume Next
    
    
    
    ThisWorkbook.FollowHyperlink ("https://lien_vers_fichier"), , True
    If Err.Number <> 0 Then MsgBox "Adresse incorrecte"
    Err.Clear
    
    
    
    'bug : problème de chemin , de temps de chargement ?
    Windows("fichier.xls").Activate
    Windows("fichier.xls").Application.ScreenUpdating = False
    
    'Geston de l'erreur 1004 si le fichier est introuvable ou si le champ Input data est vide
    If Err.Number = 1004 Then
        MsgBox "Error: file not found.", vbExclamation
        UserForm1.MultiPage1.Value = 1
    End If
    Me.MultiPage1.Value = 0
    
     
    'Init de variable
    Ligne = Cells.Range("A2").End(xlDown).Row
    
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    'Code permettant l'affichage dans la listbox et le filtrage
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    
    
    With Worksheets(1)
        Me.ListBox1.Clear
        Me.vList.ColumnCount = 13
        Me.vList.List = Range("A2:M" & Ligne).Value '"A2:L" & Ligne
    With Me.ListBox1
        .ColumnWidths = 130
        .ColumnCount = 2
        .RowSource = "A2:B" & Ligne
    End With
    
    
        Call TextBox2_Change
        'On met le focus sur le champ de filtrage
        Me.MultiPage1.SetFocus
        Me.TextBox2.SetFocus
    End With
    ''''''''''''''''''''
    ''''''''''''''''''''
    
    'On minimise la fenêtre
    Windows("fichier.xls").Visible = False
    Windows("fichier.xls").Application.ScreenUpdating = True
    Me.TextBox2.SetFocus
    End Sub
    Private Sub TextBox2_Change()
    
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    'Update de l'affichage de la liste en fonction des valeurs tappées'
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    
    'Init de la variable contenant les caractères à filtrer
    strLetter = Me.TextBox2.Text
    
    'On efface la liste
    ListBox1.RowSource = vbNullString
    
    'Init correspondant à la ligne 2 de la source xls
    L = 1
    
    'Boucle permettant le rafraichissement de la listbox à chaque caractère tapé
    For L = 1 To vList.ListCount - 1
        If InStrRev(vList.List(L), strLetter, -1, vbTextCompare) <> 0 Then
        Li = ListBox1.ListCount
            If vList.List(L, 2) <> "N" Then
                With Me.ListBox1
                    .AddItem
                    .List(Li, 0) = Me.vList.List(L, 0)
                    .List(Li, 1) = Me.vList.List(L, 1)
                End With
            End If
        End If
    Next L
    
    'Init
    Ligne2 = Me.ListBox1.ListCount
    
    End Sub

    en exécutant la macro normalement la macro, rien de s'affiche dans la boite de dialogue.
    Si je met un point d'arrêt à la ligne "Ligne = Cells.Range("A2").End(xlDown).Row" et que je repars en continuer, pas à pas détaillé ou continuer jusqu'au curseur, la liste de produits s'affichent bien dans la boite de dialogue.
    Si je met un point d'arret à la ligne de code suivante, la boite de dialogue reste vide.

    J'ai essayé d'ajouter des fonctions wait, de changer le code de téléchargement de fichier met cela provoque des erreurs et le fichier excel de l'intranet ne s'ouvre plus..
    Si vous avez une idée, une piste je suis preneuse !


    Merci d'avance
    Aliénor.

  2. #2
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2016
    Messages : 4
    Par défaut
    Finalement, nous avons trouvé ce qu'était exactement le problème : Lorsque la macro télécharge le fichier sur l'intranet , elle ouvre en même temps une fenêtre IE mais ne reviens pas sur le fichier lui même. Avez vous une idée de comment forcer la macro à bien lire le fichier téléchargé ?

  3. #3
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    étant donné que c'est un fichier Excel ... pourquoi ne pas l'ouvrir avec la méthode WorkBooks.Open (Url complète du fichier) ?

    Ainsi, tu mets ça dans une variable Workbook et tu peux naviguer dedans sans devoir activer la fenêtre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim Wb as Workbook
     
    Set Wb = Workbooks.Open(Url)

  4. #4
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2016
    Messages : 4
    Par défaut
    Bonjour joe-levrai,
    merci pour ton idée mais malheureusement cela ne marche pas sûrement parce que l'intranet est sécurisé..
    Aurais-tu une idée pour forcer la macro à retourner sur le fichier téléchargé ?

  5. #5
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2016
    Messages : 4
    Par défaut
    Bonjour à tous,
    j'ai réussi à faire tourner la macro comme il fallait : il fallait mettre une boucle, un sleep ainsi que des DoEvents.
    Il semble que la macro perdait la main pendant l'exécution et que cette exécution était lente .. Etant novice je ne suis pas sûre de l'explication mais au moins cela marche !
    Voici le code qui marche :

    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
    Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    
    Sub test()
    Sleep 5000 'en millisecondes
    End Sub
    
    Private Sub Init()
    
    'Ouverture du fichier de sauvegarde
    Open "D:\toto" For Append As #1
    Close #1
    
    'Chargement du chemin de sortie
    Open "D:\toto" For Input As #1
    While Not EOF(1)
        Input #1, a
        If LenB(a) <> 0 Then
            Me.TextBox1.Text = a
        End If
    Wend
    Close #1
    
    'Par défaut on récupère le chemin du bureau de l'utilisateur
    'par le biais de la fonction contenue dans le module Special_Path
    If TextBox1.Text = vbNullString Then TextBox1.Text = GetSpecialfolder(CSIDL_DESKTOP)
    
    FlagE:
    On Error Resume Next
    
    'Fermeture du fichier de classement des fiches produits s'il est ouvert
    'et ouverture de celui-ci en lecture seule
    
    Windows("fichier.xls").Close (False)
    On Error Resume Next
    
    
    ActiveWorkbook.FollowHyperlink ("https://url-du-fichier"), , True
    If Err.Number <> 0 Then MsgBox "Adresse incorrecte"
    Err.Clear
    
    Windows("fichier.xls").Activate
    
    Do
    test
    Loop Until Windows("fichier.xls").Activate
    
    'on ferme les IE 
    SendKeys ("%{F4}")
    SendKeys ("{Enter}")
    
    
    Windows("fichier.xls").Application.ScreenUpdating = False
    DoEvents
    
    
    
    
    SendKeys ("{Enter}")
    SendKeys ("{Enter}")
    
    'Geston de l'erreur 1004 si le fichier est introuvable ou si le champ Input data est vide
    
    If Err.Number = 1004 Then
        MsgBox "Error: file not found.", vbExclamation
        UserForm1.MultiPage1.Value = 1
    End If
    Me.MultiPage1.Value = 0
    
    
    DoEvents
    
     ActiveSheet.Feuil1
    'Init de variable
    Ligne = Cells.Range("A2").End(xlDown).Row
       
    
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    'Code permettant l'affichage dans la listbox et le filtrage
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    
    With Worksheets(1)
    
        Me.ListBox1.Clear
        Me.vList.ColumnCount = 13
        Me.vList.List = Range("A2:M" & Ligne).Value '"A2:L" & Ligne
    
    
    
    With Me.ListBox1
        .ColumnWidths = 130
        .ColumnCount = 2
        .RowSource = "A2:B" & Ligne
    End With
    
    
        Call TextBox2_Change
        'On met le focus sur le champ de filtrage
        Me.MultiPage1.SetFocus
        Me.TextBox2.SetFocus
    End With
    ''''''''''''''''''''
    ''''''''''''''''''''
    
    'On minimise la fenêtre
    Windows("fichier.xls").Visible = False
    'Windows("fichier.xls").Application.ScreenUpdating = True
    Me.TextBox2.SetFocus
    End Sub

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

Discussions similaires

  1. Le code vba ne s'exécute pas.
    Par Halima91 dans le forum VBA Access
    Réponses: 3
    Dernier message: 20/03/2007, 10h45
  2. Réponses: 7
    Dernier message: 11/03/2007, 09h35
  3. VBA-E comment exécuter un code sur un classeur complet?
    Par djulegnome dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 13/06/2006, 12h29
  4. [VBA]Problème d'exécution de code
    Par cciocc dans le forum IHM
    Réponses: 1
    Dernier message: 08/06/2006, 11h00
  5. [VBA-E][Access] Exécuter un module Access dans Excel
    Par Amara dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 28/03/2006, 09h42

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