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 :

Comment appeler cette fonction?


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 184
    Par défaut Comment appeler cette fonction?
    Bonjour à tous,

    J'ai été donné une fonction pour extraire des données via un site. Mais je ne sais pas comment appeler cette fonction. Je voulais ouvrir le fichier téléchargé, recopier des données dans ma feuille "Data" puis fermer le fichier.

    Merci d'avance.

    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
    Sub gop() 
        Dim oWsBDR As Excel.Worksheet 
     
        On Error Resume Next 
     
        Set oWsBDR = WbBDR.Worksheets(CS_SHEET) 'Erreur : subscript out of range
     
        Worksheets("downloadFile").Cells.Copy 
        Workbooks("Task2").Sheets("Data").Paste 
        Application.CutCopyMode = False 
        Workbooks("Task2").Worksheets("Data") = "OPERATING GROUP MNEMONIC" 
        With Worksheets("Data").Cells 
            .HorizontalAlignment = xlCenter 
            .VerticalAlignment = xlCenter 
            .WrapText = False 
            .Orientation = 0 
            .AddIndent = False 
            .IndentLevel = 0 
            .ShrinkToFit = False 
            .ReadingOrder = xlContext 
            .MergeCells = False 
            .ColumnWidth = 30 
        End With 
        Set oWsBDR = Nothing 
        Application.DisplayAlerts = False 
        Windows("downloadFile.ln").Activate 
        ActiveWindow.Close 
    End Sub 
    Public Function WbBDR() As Excel.Workbook 
        Dim bOk As Boolean 
        Dim m_oME As Excel.Workbook 
        Dim m_oBDR As Excel.Workbook 
     
        If m_oBDR Is Nothing Then 
            bOk = False 
            Err.Clear 
            On Error Resume Next 
            Do Until bOk 
                Workbooks.OpenText Filename:="<a href="https://.../downloadFile.ln?fileName=..." target="_blank">https://.../downloadFile.ln?fileName=...</a>", _ 
                Origin:=xlMSDOS, _ 
                StartRow:=1, _ 
                DataType:=xlDelimited, _ 
                TextQualifier:=xlDoubleQuote, _ 
                ConsecutiveDelimiter:=False, _ 
                Tab:=False, _ 
                Semicolon:=True, _ 
                Comma:=False, _ 
                Space:=False, _ 
                Other:=False, _ 
                FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), _ 
                Array(7, 1), Array(8, 1), Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 1), _ 
                Array(13, 1), Array(14, 1), Array(15, 1), Array(16, 1), Array(17, 1), Array(18, 1), _ 
                Array(19, 1), Array(20, 1), Array(21, 1), Array(22, 1), Array(23, 1), Array(24, 1), _ 
                Array(25, 1), Array(26, 1), Array(27, 1), Array(28, 1), Array(29, 1), Array(30, 1), _ 
                Array(31, 1), Array(32, 1), Array(33, 1), Array(34, 1), Array(35, 1), Array(36, 1), _ 
                Array(37, 1), Array(38, 1), Array(39, 1), Array(40, 1), Array(41, 1), Array(42, 1), _ 
                Array(43, 1), Array(44, 1), Array(45, 1), Array(46, 1), Array(47, 1), Array(48, 1), _ 
                Array(49, 1), Array(50, 1), Array(51, 1), Array(52, 1), Array(53, 1), Array(54, 1), _ 
                Array(55, 1), Array(56, 1), Array(57, 1), Array(58, 1), Array(59, 1), Array(60, 1), _ 
                Array(61, 1), Array(62, 1), Array(63, 1), Array(64, 1), Array(65, 1)), _ 
                TrailingMinusNumbers:=True 
                If Err.Number = 0 Then bOk = True 
                Err.Clear 
            Loop 
            On Error GoTo 0 
            Set m_oBDR = Application.Workbooks("downloadFile.ln") 
        End If 
        Set WbBDR = m_oBDR 
    End Function

  2. #2
    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,

    tu as brûlé les étapes car tu utilises le résultat de ta fonction (qui doit renvoyer un objet ou nothing) directement dans l'affectation d'une feuille à une variable Worksheet
    ainsi, si ta fonction ne renvoie pas de fichier, ta procédure appelante en l'état ne le gère pas et part du principe que de toute façon, il existe obligatoirement

    tu dois placer le retour de la fonction dans une variable objet et tester si elle vaut nothing avant de vouloir toucher à ses objets enfants.

    je vais pas plus loin, sinon je serai amené à te dire que la conception est mal faite, et qu'il faut sous-découper ta fonction en plusieurs fonctions chargées chacune de faire l'une de tâches de ta fonction actuelle (trouver un fichier texte - le traiter etc...)

    PS : je manipule rarement des fichiers textes, je ne saurai dire s'il est valide de renvoyer un objet workbook dans ta fonction.

  3. #3
    Expert éminent
    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
    Par défaut
    Bonjour !

    De toute manière pour importer directement un fichier texte dans une feuille de calculs c'est via l'objet QueryTable.

    En dehors de l'aide VBA interne et des exemples dans les discussions de ce forum,
    le débutant peut activer l'Enregistreur de macro et opérer manuellement via le menu
    Données, à partir d'un fichier texte délivrant ainsi une base de code sur un plateau …

    A noter aussi : si le fichier est directement téléchargeable depuis un site (URL directe dédiée),
        cet objet peut aussi le charger directement dans une feuille de calculs !

    _________________________________________________________________________________________________________
    Je suis Paris, Istanbul, Berlin, Nice, Bruxelles, Charlie, …

  4. #4
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 184
    Par défaut
    Bonjour,

    tu dois placer le retour de la fonction dans une variable objet et tester si elle vaut nothing avant de vouloir toucher à ses objets enfants
    Commet je peux faire cela ?

  5. #5
    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
    tel que je l'ai indiqué dans la phrase que tu as cité

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Set MaVariableObjet = MonAppelDeFonction
    If MaVariableObjet Is Nothing Then
        ' J'arrête le traitement
    Else
        MonTraitement
        Set MaVariableFeuille = MaVariableObjet.Worksheets("MaFeuille")
    End If
    bien sûr, en tenant compte des mes remarques sur l'utilisation d'un retour de fonction sur une variable Workbook en manipulant un fichier texte

    et après avoir analysé la proposition de Marc-L et de l'avoir écarté pour une raison valable ... car il a été encore plus loin que moins dans l'application d'une certaine "raison de bien faire la chose"

  6. #6
    Expert éminent
    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
    Par défaut



    Oui ayant pourtant déjà indiqué tout le nécessaire pour QueryTable
    à savoir l'aide VBA, les discussions de ce forum et l'Enregistreur de macro …

  7. #7
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 184
    Par défaut
    Bonjour,

    D'accord. J'ai donc modifié le code, il donne une erreur : paste method of worksheet class failed.

    Sauriez-vous pourquoi elle s'est produite?

    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
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    Sub gop()
     
        Dim oWsBDR As Excel.Workbook
     
     
     
        'On Error Resume Next
     
     
     
        Set oWsBDR = WbBDR()
     
        If oWsBDR Is Nothing Then
     
            MsgBox "Le fichier n'a pas été extrait."
     
        Else
     
            'Set Workbooks("Task2").Worksheets("Data") = oWsBDR.Sheets("downloadFile")
     
            oWsBDR.Worksheets("downloadFile").Cells.Copy
     
            'Windows("Task2.xlsm").Cells(1, 1).Paste
     
            Windows("Task2.xlsm").Cells(1, 1).PasteSpecial xlPasteValues
     
            Application.CutCopyMode = False
     
            With Worksheets("Data").Cells
     
                .HorizontalAlignment = xlCenter
     
                .VerticalAlignment = xlCenter
     
                .WrapText = False
     
                .Orientation = 0
     
                .AddIndent = False
     
                .IndentLevel = 0
     
                .ShrinkToFit = False
     
                .ReadingOrder = xlContext
     
                .MergeCells = False
     
                .ColumnWidth = 30
     
            End With
     
            Set oWsBDR = Nothing
     
        End If
     
     
     
        Application.DisplayAlerts = False
     
        Windows("downloadFile.ln").Close
     
     
     
    End Sub
     
     
     
    Public Function WbBDR() As Excel.Workbook
     
        Dim bOk As Boolean
     
        Dim m_oME As Excel.Workbook
     
        Dim m_oBDR As Excel.Workbook
     
     
     
        If m_oBDR Is Nothing Then
     
            bOk = False
     
            Err.Clear
     
            On Error Resume Next
     
            Do Until bOk
     
                Workbooks.OpenText Filename:="https://.../downloadFile.ln?fileName=bdr_ast_gop", _
     
                    Origin:=xlMSDOS, _
     
                    StartRow:=1, _
     
                    DataType:=xlDelimited, _
     
                    TextQualifier:=xlDoubleQuote, _
     
                    ConsecutiveDelimiter:=False, _
     
                    Tab:=False, _
     
                    Semicolon:=True, _
     
                    Comma:=False, _
     
                    Space:=False, _
     
                    Other:=False, _
     
                    FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), _
     
                         Array(7, 1), Array(8, 1), Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 1), _
     
                         Array(13, 1), Array(14, 1), Array(15, 1), Array(16, 1), Array(17, 1), Array(18, 1), _
     
                         Array(19, 1), Array(20, 1), Array(21, 1), Array(22, 1), Array(23, 1), Array(24, 1), _
     
                         Array(25, 1), Array(26, 1), Array(27, 1), Array(28, 1), Array(29, 1), Array(30, 1), _
     
                         Array(31, 1), Array(32, 1), Array(33, 1), Array(34, 1), Array(35, 1), Array(36, 1), _
     
                         Array(37, 1), Array(38, 1), Array(39, 1), Array(40, 1), Array(41, 1), Array(42, 1), _
     
                         Array(43, 1), Array(44, 1), Array(45, 1), Array(46, 1), Array(47, 1), Array(48, 1), _
     
                         Array(49, 1), Array(50, 1), Array(51, 1), Array(52, 1), Array(53, 1), Array(54, 1), _
     
                         Array(55, 1), Array(56, 1), Array(57, 1), Array(58, 1), Array(59, 1), Array(60, 1), _
     
                         Array(61, 1), Array(62, 1), Array(63, 1), Array(64, 1), Array(65, 1)), _
     
                         TrailingMinusNumbers:=True
     
                If Err.Number = 0 Then bOk = True
     
                Err.Clear
     
            Loop
     
            On Error GoTo 0
     
            Set m_oBDR = Application.Workbooks("downloadFile.ln")
     
        End If
     
        Set WbBDR = m_oBDR
     
    End Function

  8. #8
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 184
    Par défaut
    De toute manière pour importer directement un fichier texte dans une feuille de calculs c'est via l'objet QueryTable.
    Y a t-il un moyen pour faire le travail avec cette fonction ? Parce que je pense que je suis obligé d'utiliser ce qui a été créé par les anciens...

Discussions similaires

  1. comment appeler cette fonction array
    Par doogy64 dans le forum C++Builder
    Réponses: 1
    Dernier message: 18/07/2012, 10h34
  2. Réponses: 6
    Dernier message: 30/09/2005, 00h53
  3. comment appeler une fonction JAVA en JAVASCRIPT ?
    Par heleneh dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 13/09/2005, 12h21
  4. comment appeler une fonction JAVA en JAVASCRIPT ?
    Par heleneh dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 13/09/2005, 12h04
  5. Comment appeler une fonction JavaScript depuis Delphi ?
    Par Alfred12 dans le forum Web & réseau
    Réponses: 4
    Dernier message: 17/06/2005, 18h15

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