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 :

copie tableau excel vers un document word [XL-2016]


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Juillet 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2015
    Messages : 13
    Points : 4
    Points
    4
    Par défaut copie tableau excel vers un document word
    Bonjour,

    Je souhaiterais copier un tableau ou une plage de données de excel vers word.
    Quelqu'un pourrait-il m'aider svp ?
    Fichiers attachés Fichiers attachés

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 767
    Points : 28 626
    Points
    28 626
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Comme beaucoup de contributeurs, je n'ouvre jamais les fichiers joints.
    Qu'as-tu déjà codé, pour ce projet ?
    Pour pouvoir t'aider, j'aimerais savoir
    • Pour Excel, sais-tu ce qu'est une cellule ou plage nommées ?
    • Pour Word, sais-tu ce qu'est un signet ?
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Comme Philippe Tulliez ( ), je n'ouvre pas les fichiers joints et comme tu ne donnes quasiment pas d'informations dans ta demande, ma réponse sera générique.

    Pour la copie dans Excel, utilise la méthode Copy de Range.
    https://msdn.microsoft.com/fr-fr/lib...0(v=office.15)

    Pour coller dans Word, méthode Paste (ou une de ses petites soeurs) appliqué au Range de l'emplacement souhaité.
    https://docs.microsoft.com/fr-fr/off...rd.range.paste
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  4. #4
    Candidat au Club
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Juillet 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2015
    Messages : 13
    Points : 4
    Points
    4
    Par défaut Copie excel vers wors
    Bonjour
    Pour l'instant j'arrive à ouvrir Word avec les signets mais pas à y insérer les données de mon tableau
    Voici ce que j'ai fait

    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
    Sub exportDonneesDansSignetsWord()
     
        Dim AppWord As Word.Application
        Dim WordDoc As Word.Document
        Dim i As Byte
     
        Set AppWord = CreateObject("word.application")                              'ouvre session word
        Set WordDoc = AppWord.Documents.Open("E:\Essai Excel vers Word.docm")       'ouvre document Word Attention au chemin!!
        AppWord.Visible = True 'word affiché pendant l'operation
        For i = 1 To 50
            Range("TABLEAU" & i).Copy
            'les signets du document Word sont nommés Tableau1, Tableau2
            WordDoc.Bookmarks("Tableau1" & i).Range.Select(B4:D9)
            AppWord.Selection.Paste
        Next i
     
        AppWord.Visible = True 'affiche le document Word
        WordDoc.Close False 'ferme le document word en sauvegardant les données
        'AppWord.Quit 'ferme la session Word
    End Sub

  5. #5
    Candidat au Club
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Juillet 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2015
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    Bonjour
    J'ai modifié mon code mais il me met une erreur 1004

    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 CommandButton1_Click()
     
        Dim AppWord As Word.Application
        Dim WordDoc As Word.Document
        Dim i As Byte
     
        Set AppWord = CreateObject("word.application")                              'ouvre session word
        Set WordDoc = AppWord.Documents.Open("E:\Essai Excel vers Word.docm")       'ouvre document Word Attention au chemin!!
        AppWord.Visible = True 'word affiché pendant l'operation
        For i = 1 To 50
            Range("TABLEAU" & i).Copy
            'les signets du document Word sont nommés Tableau1, Tableau2
            WordDoc.Bookmarks("Tableau" & i).Range.Select
            AppWord.Selection.Paste
        Next i
     
        AppWord.Visible = True 'affiche le document Word
        WordDoc.Close False 'ferme le document word en sauvegardant les données
        'AppWord.Quit 'ferme la session Word
    End Sub
    Je voudrais qu'à la fin du traitement le document word s'ouvre et reste visible

    Merci

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 767
    Points : 28 626
    Points
    28 626
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    La procédure que j'ai développée fonctionne avec côté Excel une cellule ou plage de cellules nommée (Gestionnaire des noms) et côté Word un signet
    Autrement dit, si tu as un signet qui se nomme Adresse dans le document qui te sert de modèle, tu dois avoir une cellule ou une plage (si tableau) nommée Adresse.
    Si le signet n'existe pas dans Word, la fonction renvoie False dans le cas contraire True

    Code de la procédure
    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
    Function CopyXls2Wrd(wrdDoc As Word.Document, oName As Name) As Boolean
      ' Philippe Tulliez www.magicoffice.be
      ' Copie la cellule ou plage de cellules définie par l'argument oName
      '   Renvoie True si la copie a bien eu lieu
      ' Arguments
      '   wrdDoc   ' Document qui contient le signet qui contiendra la ou les cellules copiées dans Excel
      '   oName    ' Nom de la cellule ou plage de cellules à copier (Le signet doit avoir le même nom)
      Dim oRng As Range
      Dim Place As Long
      Dim BookmarkName As String
      Dim appWrd As Word.Application
      Set appWrd = wrdDoc.Parent
      Set oRng = oName.RefersToRange ' Objet Range à copier
      ' Place = wrdDoc.Bookmarks(BookmarkName).Range.Start
      BookmarkName = oName.Name
      With wrdDoc
        If .Bookmarks.Exists(BookmarkName) Then
           If oRng.Count = 1 Then
              .Bookmarks(BookmarkName).Range.Text = oRng.Text
            Else
              oRng.Copy
              .Bookmarks(BookmarkName).Select
              appWrd.Selection.PasteSpecial DataType:=9, Placement:=0
              Application.CutCopyMode = False
           End If
           CopyXls2Wrd = True
        End If
      End With
      Set appWrd = Nothing: Set oRng = Nothing
    End Function
    Donc si je me réfère au code que tu as publié, voici la ligne de code pour invoquer cette procédure CopyXls2Wrd WordDoc, ThisWorkbook.Names("Contact") en copiant la cellule nommée Contact vers le signet de même nom.

    Voici ma procédure de test qui invoque la fonction CopyXls2Wrd. Le document Word, reste ouvert et n'est pas sauvé
    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
    Sub T()
      ' Nécessite de référencer Microsoft Word nn.n Object Library
      ' Déclaration
      Const SubFolder As String = "Template"          ' Sous-répertoire où se trouve le modèle
      Const TemplateName As String = "Courrier.Docx"  ' Nom du modèle
      Dim appWrd As Word.Application
      Dim wrdDoc As Word.Document
      Dim appPath As String, wrdFullName As String
      '
      appPath = ThisWorkbook.Path
      wrdFullName = appPath & "\" & SubFolder & "\" & TemplateName
      Set appWrd = CreateObject("Word.Application")
      Set wrdDoc = appWrd.Documents.Add(Template:=wrdFullName)
      '
      With appWrd
      .Visible = True:  appWrd.Activate
      End With
      '
      ' Copie des cellules et plages de cellules vers les signets
      CopyXls2Wrd wrdDoc, ThisWorkbook.Names("bmOffre")
      CopyXls2Wrd wrdDoc, ThisWorkbook.Names("bmName")
      '
      Set appWrd = Nothing: Set wrdDoc = Nothing
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  7. #7
    Candidat au Club
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Juillet 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2015
    Messages : 13
    Points : 4
    Points
    4
    Par défaut re copie tableau excel
    Bonjour,

    Je ne comprends pas pourquoi dans la déclaration des variables il me met une erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub T()
     
    Dim appWrd As Word.Application
    merci

  8. #8
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 767
    Points : 28 626
    Points
    28 626
    Billets dans le blog
    53
    Par défaut
    Bonjour,

    Et bien tout simplement parce-que le complément Word n'est pas référencé.
    C'est pourtant indiqué en début de procédure 'Nécessite de référencer Microsoft Word nn.n Object Library
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  9. #9
    Candidat au Club
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Juillet 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2015
    Messages : 13
    Points : 4
    Points
    4
    Par défaut re copie tableau excel
    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour,

    Et bien tout simplement parce-que le complément Word n'est pas référencé.
    C'est pourtant indiqué en début de procédure 'Nécessite de référencer Microsoft Word nn.n Object Library
    excuse moi d'abuser de ton temps mais pourrais tu m'expliquer plus en détails ton code
    pour l'instant j'ouvre word mais pas mon document et il me met erreur 1004

    Encore merci pour ton aide

  10. #10
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 767
    Points : 28 626
    Points
    28 626
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Si tu as utilisé la procédure nommée T, les deux premières lignes de cette procédures définissent le nom du sous-répertoire où se trouve le modèle (c'est à dire le document où se trouve les signets qui devront contenir le résultat des cellules copiées depuis excel) et le nom du modèle (moi j'utilise un document suffixé docx mais tu peux utiliser une dotx) qui donc doit être présent dans sous-répertoire.
    J'ai bien documenté ces deux lignes dans la procédure publiée donc si tu as mis les bonnes valeurs, tu devrais voir apparaître ton document Word basé sur ce modèle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Const SubFolder As String = "Template"          ' Sous-répertoire où se trouve le modèle
    Const TemplateName As String = "Courrier.Docx"  ' Nom du modèle
    Pour info, un sous-répertoire signifie que le classeur Excel où se trouve le code doit être dans le dossier parent puisque
    • la ligne 10 : assigne le répertoire de ThisWorkbook appPath = ThisWorkbook.Path
    • la ligne 11 : Construit le nom complet soit le chemin où se trouve le classeur Excel + le sous-répertoire + le nom du modèle wrdFullName = appPath & "\" & SubFolder & "\" & TemplateName

    donc si tu respectes cette contrainte, le document Word basé sur le modèle nommé comme définit dans TemplateName et présent dans SubFolder va s'ouvrir
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  11. #11
    Candidat au Club
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Juillet 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2015
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    Bonjour,

    J'ai respecté ce que tu m'as dit mais maintenant j'ai une erreur à la ligne suivante
    chemin des fichiers : C:\Users\b_leb\OneDrive\Documents\PROJET DTO
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Function CopyXls2Wrd(wrdDoc As Word.Document, oName As Name) As Boolean
    Je te met les fichiers sur lesquels je travaille
    Fichier excel nommé test1

    type désignation constructeur classification N° série
    1 2 3 4 5
    2 3 4 5 6
    3 4 5 6 7
    4 5 6 7 8
    5 6 7 8 9
    6 7 8 9 10
    7 8 9 10 11

    Fichier Word nommé FSMT
    FORMULAIRE DE SORTIE DE MATERIEL TECHNIQUE

    (RESPONSABLE)




    Certifie que le matériel suivant

    signet Copie Tableau excel

    A ETE CONFIE AU

    NOM PRENOM


    POUR LA DUREE


    Période du xx au xx mois année

    REMARQUES PARTICULIERES (EVENTUELLES)
    Pour l'instant en utilisant tes indications j'ai le code suivant:
    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
    Function CopyXls2Wrd(wrdDoc As Word.Document, oName As Name) As Boolean
      ' Philippe Tulliez <a href="http://www.magicoffice.be" target="_blank">www.magicoffice.be</a>
      ' Copie la cellule ou plage de cellules définie par l'argument oName
      '   Renvoie True si la copie a bien eu lieu
      ' Arguments
      '   wrdDoc   ' Document qui contient le signet qui contiendra la ou les cellules copiées dans Excel
      '   oName    ' Nom de la cellule ou plage de cellules à copier (Le signet doit avoir le même nom)
      Dim oRng As Range
      Dim Place As Long
      Dim BookmarkName As String
      Dim appWrd As Word.Application
      Set appWrd = wrdDoc.Parent
      Set oRng = oName.RefersToRange ' Objet Range à copier
      ' Place = wrdDoc.Bookmarks(BookmarkName).Range.Start
      BookmarkName = oName.Name
      With wrdDoc
        If .Bookmarks.Exists(BookmarkName) Then
           If oRng.Count = 1 Then
              .Bookmarks(BookmarkName).Range.Text = oRng.Text
            Else
              oRng.Copy
              .Bookmarks(BookmarkName).Select
              appWrd.Selection.PasteSpecial DataType:=9, Placement:=0
              Application.CutCopyMode = False
           End If
           CopyXls2Wrd = True
        End If
      End With
      Set appWrd = Nothing: Set oRng = Nothing
    End Function
     
     
    Sub T()
      ' Nécessite de référencer Microsoft Word nn.n Object Library
      ' Déclaration
      Const SubFolder As String = "C:\Users\b_leb\OneDrive\Documents\PROJET DTO"          ' Sous-répertoire où se trouve le modèle
      Const TemplateName As String = "FSMT.Docm"  ' Nom du modèle
      Dim appWrd As Word.Application
      Dim wrdDoc As Word.Document
      Dim appPath As String, wrdFullName As String
      '
      appPath = ThisWorkbook.Path
      wrdFullName = appPath & "\" & SubFolder & "\" & "C:\Users\b_leb\OneDrive\Documents\PROJET DTO\FSMT.Docm"
      Set appWrd = CreateObject("Word.Application")
      Set wrdDoc = appWrd.Documents.Add(Template:=wrdFullName)
      '
      With appWrd
      .Visible = True:  appWrd.Activate
      End With
      '
      ' Copie des cellules et plages de cellules vers les signets
      CopyXls2Wrd wrdDoc, ThisWorkbook.Names("bmOffre")
      CopyXls2Wrd wrdDoc, ThisWorkbook.Names("bmName")
      '
      Set appWrd = Nothing: Set wrdDoc = Nothing
    End Sub
    Merci car je débute et les recherches de solutions sur internet ne sont pas claires ou ne correspondent pas à ce que je veux faire

  12. #12
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Mettre des actions dans une Function, c'est vraiment déconseillé.
    Une fonction sert à calculer en fonction de paramètres et à renvoyer une valeur, pas à faire des modification par elle-même.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  13. #13
    Candidat au Club
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Juillet 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2015
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par Menhir Voir le message
    Mettre des actions dans une Function, c'est vraiment déconseillé.
    Une fonction sert à calculer en fonction de paramètres et à renvoyer une valeur, pas à faire des modification par elle-même.
    Je ne comprends plus car c'est le code que tu m'avais envoyé.

  14. #14
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 767
    Points : 28 626
    Points
    28 626
    Billets dans le blog
    53
    Par défaut
    Bonjour Menhir,
    Une fonction sert à calculer en fonction de paramètres et à renvoyer une valeur, pas à faire des modification par elle-même.
    Je ne suis pas d'accord avec toi. Il est tout à fait possible d'utiliser une fonction qui trie, exporte, etc.
    Je pratique de cette manière de plus en plus et on peut l'utiliser comme méthode ou comme fonction. MsgBox est une illustration parfaite de ce cas là

    Ce qui n'est pas possible en revanche, c'est d'utiliser une fonction VBA qui effectue des actions sur un objet et de l'utiliser comme fonction personnalisée dans une cellule d'excel
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  15. #15
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par bruthe Voir le message
    Je ne comprends plus car c'est le code que tu m'avais envoyé.
    Moi ? Certainement pas !
    A moins que tu considères l'ensemble des participants à ce forum comme une personne unique, ce qui serait tout à fait irréaliste.

    MsgBox est une illustration parfaite de ce cas là
    MsgBox, tout comme InputBox, sont des fonction dont l'unique but (comme toute fonction) est de renvoyer une valeur.
    Elles ne modifient rien.
    Si tu veux donner des exemple plus "borderline", il faudrait citer la fonction Excel LIEN_HYPERTEXTE() ou la fonction VBA GetObject(). Là, j'avoue, ça ne ressemble plus trop à des fonction et pourtant ça en est.

    La Function qui est présenté ici pourrait être un Sub et, à mon sens, c'est ce qu'elle devrait être étant donné les méthodes et modifications de propriétés qu'elle contient.
    D'autant plus que, si je ne me trompe pas, elle ne renvoie pas de valeur. Je ne vois donc pas trop l'intérêt d'utiliser Function plutôt que Sub.

    C'est la façon de coder mais je conçois que d'autres ne la partage pas. Les goûts et les couleurs...
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  16. #16
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 767
    Points : 28 626
    Points
    28 626
    Billets dans le blog
    53
    Par défaut
    Bonjour Menhir,
    Un exemple dans cette contribution CopyRange - Copie de liste de données (source) dans une feuille cible où la fonction nommée CopyRange qui effectue la copie d'une plage de cellules vers une autre, renvoie un objet Range
    Exemple pour l'invoquer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set rng = mStdCopyRange.CopyRange(oListSource, shtTarget, ClearSheet:=Elem = 0, AddLabel:=oListSource.Parent.Name)
    La Function qui est présenté ici pourrait être un Sub et, à mon sens, c'est ce qu'elle devrait être étant donné les méthodes et modifications de propriétés qu'elle contient.
    D'autant plus que, si je ne me trompe pas, elle ne renvoie pas de valeur. Je ne vois donc pas trop l'intérêt d'utiliser Function plutôt que Sub
    Tout à fait d"accord, elle pourrait être une Sub

    J'ai allégé le code des procédures publiées mais initialement je renvoie une variable booléenne (qui permet de vérifier si la procédure s'est bien déroulée)
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  17. #17
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 767
    Points : 28 626
    Points
    28 626
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    J'ai respecté ce que tu m'as dit mais maintenant j'ai une erreur à la ligne suivante
    chemin des fichiers : C:\Users\b_leb\OneDrive\Documents\PROJET DTO
    Function CopyXls2Wrd(wrdDoc As Word.Document, oName As Name) As Boolean
    Je teste toutes les procédures que je publie

    Dans quel répertoire se trouve le classeur Excel qui contient à la fois le code VBA et les cellules ou plage de cellules nommées et dans quel répertoire se trouve le document suffixé docx qui contient les signets ?
    Merci de publier le chemin complet et le nom des fichiers Word et Excel avec leur suffixe

    Petite remarque : Le code des procédures que l'on publie doit être placé entre les balises prévues à cet effet (Après sélection des lignes de code cliquer sur le bouton # (croisillons)

    j'ai une erreur à la ligne suivante
    chemin des fichiers : C:\Users\b_leb\OneDrive\Documents\PROJET DTO
    Il n'y a aucune ligne contenant cette phrase. Si tu publies le code entre les balises, tu auras une numérotation. C'est ce numéro qui permet d'identifier la ligne et indiquer le numéro d'erreur renvoyé ainsi que son message n'est pas du luxe
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  18. #18
    Candidat au Club
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Juillet 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2015
    Messages : 13
    Points : 4
    Points
    4
    Par défaut re copie tableau excel
    Citation Envoyé par Menhir Voir le message
    Moi ? Certainement pas !
    A moins que tu considères l'ensemble des participants à ce forum comme une personne unique, ce qui serait tout à fait irréaliste.


    MsgBox, tout comme InputBox, sont des fonction dont l'unique but (comme toute fonction) est de renvoyer une valeur.
    Elles ne modifient rien.
    Si tu veux donner des exemple plus "borderline", il faudrait citer la fonction Excel LIEN_HYPERTEXTE() ou la fonction VBA GetObject(). Là, j'avoue, ça ne ressemble plus trop à des fonction et pourtant ça en est.

    La Function qui est présenté ici pourrait être un Sub et, à mon sens, c'est ce qu'elle devrait être étant donné les méthodes et modifications de propriétés qu'elle contient.
    D'autant plus que, si je ne me trompe pas, elle ne renvoie pas de valeur. Je ne vois donc pas trop l'intérêt d'utiliser Function plutôt que Sub.

    C'est la façon de coder mais je conçois que d'autres ne la partage pas. Les goûts et les couleurs...
    Merci pour les indications mais que dois je changer pour que cela fonctionne

  19. #19
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Je l'ai dit, c'est une question de goût et si tu le sens mieux comme ça et que ça fonctionne, continue.

    Perso, quand j'ai une sous-routine qui doit réaliser des actions ET renvoyer une valeur, je préfère passer par un Sub avec un des paramètres en ByRef pour transmettre la valeur.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  20. #20
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 767
    Points : 28 626
    Points
    28 626
    Billets dans le blog
    53
    Par défaut
    C'est vrai que l'on a ses habitudes
    Je n'utilise jamais Call mais directement le nom de la procédure alors d'autres l'utilise

    Perso, quand j'ai une sous-routine qui doit réaliser des actions ET renvoyer une valeur, je préfère passer par un Sub avec un des paramètres en ByRef pour transmettre la valeur.
    C'est effectivement une autre approche que je n'ai jamais utilisée.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [XL-365] Copie de cellules Excel vers un document Word
    Par Guiggs dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 11/12/2019, 09h10
  2. [WD-2002] Extraction de données d'un tableur excel vers un document Word
    Par Vincent32 dans le forum VBA Word
    Réponses: 6
    Dernier message: 21/10/2010, 18h32
  3. tableau excel dans un document word
    Par vincent0303 dans le forum VBA Word
    Réponses: 0
    Dernier message: 17/08/2010, 16h04
  4. Passage d'un tableau excel vers un document word
    Par tasse2the dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 04/09/2009, 17h14
  5. Réponses: 2
    Dernier message: 24/10/2007, 11h44

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