Code VBA extraction d'un tableau Excel vers word

Bonjour,

J'aimerai extraire une partie d'un tableau excel vers word mais lorsque je lance ma macro j'ai l'erreur suivante "Type défini par l'utilisateur non défini" malgrès le fait que j'ai bien coché la fonction microsoft word dans outil -> référence. . Je met mon code en copie merci d'avance pour votre aide.

Sub ExporterTableauVersWord()
    Dim ws As Worksheet
    Dim rng As Range
    Dim tbl As Word.Table
    Dim wordApp As Word.Application
    Dim wordDoc As Word.Document
    Dim cheminFichier As String
    Dim numeroAppareil As String

    ' Demander à l'utilisateur de saisir le numéro de l'appareil
    numeroAppareil = InputBox("Entrez le N° Appareil à afficher :", "N° Appareil")

    If numeroAppareil = "" Then
        MsgBox "Numéro d'appareil non spécifié.", vbExclamation
        Exit Sub
    End If

    ' Définir la feuille de calcul et la plage de données à exporter (ajustez selon vos besoins)
    Set ws = ThisWorkbook.Sheets("Feuil1")
    Set rng = ws.Range("AO1:AR" & ws.Cells(Rows.Count, "AO").End(xlUp).Row)

    ' Filtrer les données pour afficher uniquement l'appareil sélectionné
    rng.AutoFilter Field:=1, Criteria1:=numeroAppareil

    ' Vérifier si des données filtrées sont présentes
    If Application.WorksheetFunction.Subtotal(103, rng) <= 1 Then
        MsgBox "Aucune donnée pour l'appareil spécifié.", vbExclamation
        ws.AutoFilterMode = False ' Supprimer le filtre
        Exit Sub
    End If

    ' Créer une instance de Word
    On Error Resume Next
    Set wordApp = GetObject(, "Word.Application")
    On Error GoTo 0

    If wordApp Is Nothing Then
        Set wordApp = CreateObject("Word.Application")
    End If

    ' Créer un nouveau document Word
    Set wordDoc = wordApp.Documents.Add
    wordApp.Visible = True

    ' Ajouter le texte "Descriptif des réserves"
    wordDoc.Content.InsertAfter "Descriptif des réserves pour l'appareil N° " & numeroAppareil & vbCrLf & vbCrLf

    ' Ajouter le tableau dans le document Word
    Set tbl = wordDoc.Tables.Add(wordDoc.Bookmarks("\EndOfDoc").Range, rng.SpecialCells(xlCellTypeVisible))
    tbl.AutoFitBehavior wdAutoFitWindow

    ' Enregistrer le document Word avec le nom "reserve.docx" dans le répertoire actuel
    cheminFichier = ThisWorkbook.Path & "\reserve.docx"
    wordDoc.SaveAs2 cheminFichier

    ' Supprimer le filtre et afficher toutes les données
    ws.AutoFilterMode = False

    ' Fermer le document Word et quitter l'application Word
    wordDoc.Close SaveChanges:=False
    wordApp.Quit

    ' Libérer les objets mémoire
    Set tbl = Nothing
    Set wordDoc = Nothing
    Set wordApp = Nothing

    MsgBox "Le tableau pour l'appareil N° " & numeroAppareil & " a été exporté vers le fichier 'reserve.docx'.", vbInformation
End Sub

Bonjour,

Je ne sais pas si c'est lié mais en compilant le code, j'ai une erreur (Argument non facultatif) à la ligne ci-dessous (.Tables.Add() attends 3 arguments obligatoires, le 4ème est facultatif).

    ' Ajouter le tableau dans le document Word
    Set tbl = wordDoc.Tables.Add(wordDoc.Bookmarks("\EndOfDoc").Range, rng.SpecialCells(xlCellTypeVisible))

Ce serait bien de compléter le profil par la version d'Excel utilisée et l'environnement Mac ou Windows.

Cdlt,

Cylfo

J'utilise excel 2016 et ci-dessous avec les modifications apporté mais j'ai toujours la même erreur, merci pour votre aide .

Sub ExporterTableauVersWord()
    Dim ws As Worksheet
    Dim rng As Range
    Dim tbl As Word.Table
    Dim wordApp As Word.Application
    Dim wordDoc As Word.Document
    Dim cheminFichier As String
    Dim numeroAppareil As String

    ' Demander à l'utilisateur de saisir le numéro de l'appareil
    numeroAppareil = InputBox("Entrez le N° Appareil à afficher :", "N° Appareil")

    If numeroAppareil = "" Then
        MsgBox "Numéro d'appareil non spécifié.", vbExclamation
        Exit Sub
    End If

    ' Définir la feuille de calcul et la plage de données à exporter (ajustez selon vos besoins)
    Set ws = ThisWorkbook.Sheets("Feuil1")
    Set rng = ws.Range("AO1:AR" & ws.Cells(Rows.Count, "AO").End(xlUp).Row)

    ' Filtrer les données pour afficher uniquement l'appareil sélectionné
    rng.AutoFilter Field:=1, Criteria1:=numeroAppareil

    ' Vérifier si des données filtrées sont présentes
    If Application.WorksheetFunction.Subtotal(103, rng) <= 1 Then
        MsgBox "Aucune donnée pour l'appareil spécifié.", vbExclamation
        ws.AutoFilterMode = False ' Supprimer le filtre
        Exit Sub
    End If

    ' Créer une instance de Word
    On Error Resume Next
    Set wordApp = GetObject(, "Word.Application")
    On Error GoTo 0

    If wordApp Is Nothing Then
        Set wordApp = CreateObject("Word.Application")
    End If

    ' Créer un nouveau document Word
    Set wordDoc = wordApp.Documents.Add
    wordApp.Visible = True

    ' Ajouter le texte "Descriptif des réserves"
    wordDoc.Content.InsertAfter "Descriptif des réserves pour l'appareil N° " & numeroAppareil & vbCrLf & vbCrLf

    ' Ajouter le tableau dans le document Word
    Set tbl = wordDoc.Tables.Add(wordDoc.Bookmarks("\EndOfDoc").Range, rng.SpecialCells(xlCellTypeVisible))
    tbl.AutoFitBehavior (Word.WdAutoFitBehavior.wdAutoFitWindow)

    ' Enregistrer le document Word avec le nom "reserve.docx" dans le répertoire actuel
    cheminFichier = ThisWorkbook.Path & "\reserve.docx"
    wordDoc.SaveAs2 cheminFichier

    ' Supprimer le filtre et afficher toutes les données
    ws.AutoFilterMode = False

    ' Fermer le document Word et quitter l'application Word
    wordDoc.Close SaveChanges:=False
    wordApp.Quit

    ' Libérer les objets mémoire
    Set tbl = Nothing
    Set wordDoc = Nothing
    Set wordApp = Nothing

    MsgBox "Le tableau pour l'appareil N° " & numeroAppareil & " a été exporté vers le fichier 'reserve.docx'.", vbInformation
End Sub

Bonjour désolé, je viens de réussir mais maintenant il me dit erreur argument non facultatif

Sub ExporterTableauVersWord()
    Dim ws As Worksheet
    Dim rng As Range
    Dim tbl As Word.Table
    Dim wordApp As Word.Application
    Dim wordDoc As Word.Document
    Dim cheminFichier As String
    Dim numeroAppareil As String

    ' Demander à l'utilisateur de saisir le numéro de l'appareil
    numeroAppareil = InputBox("Entrez le N° Appareil à afficher :", "N° Appareil")

    If numeroAppareil = "" Then
        MsgBox "Numéro d'appareil non spécifié.", vbExclamation
        Exit Sub
    End If

    ' Définir la feuille de calcul et la plage de données à exporter (ajustez selon vos besoins)
    Set ws = ThisWorkbook.Sheets("Feuil1")
    Set rng = ws.Range("AO1:AR" & ws.Cells(Rows.Count, "AO").End(xlUp).Row)

    ' Filtrer les données pour afficher uniquement l'appareil sélectionné
    rng.AutoFilter Field:=1, Criteria1:=numeroAppareil

    ' Vérifier si des données filtrées sont présentes
    If Application.WorksheetFunction.Subtotal(103, rng) <= 1 Then
        MsgBox "Aucune donnée pour l'appareil spécifié.", vbExclamation
        ws.AutoFilterMode = False ' Supprimer le filtre
        Exit Sub
    End If

    ' Créer une instance de Word
    On Error Resume Next
    Set wordApp = GetObject(, "Word.Application")
    On Error GoTo 0

    If wordApp Is Nothing Then
        Set wordApp = CreateObject("Word.Application")
    End If

    ' Créer un nouveau document Word
    Set wordDoc = wordApp.Documents.Add
    wordApp.Visible = True

    ' Ajouter le texte "Descriptif des réserves"
    wordDoc.Content.InsertAfter "Descriptif des réserves pour l'appareil N° " & numeroAppareil & vbCrLf & vbCrLf

    ' Ajouter le tableau dans le document Word
    Set tbl = wordDoc.Tables.Add(wordDoc.Bookmarks("\EndOfDoc").Range, rng.SpecialCells(xlCellTypeVisible))
    tbl.AutoFitBehavior (Word.WdAutoFitBehavior.wdAutoFitWindow)

    ' Enregistrer le document Word avec le nom "reserve.docx" dans le répertoire actuel
    cheminFichier = ThisWorkbook.Path & "\reserve.docx"
    wordDoc.SaveAs2 cheminFichier

    ' Supprimer le filtre et afficher toutes les données
    ws.AutoFilterMode = False

    ' Fermer le document Word et quitter l'application Word
    wordDoc.Close SaveChanges:=False
    wordApp.Quit

    ' Libérer les objets mémoire
    Set tbl = Nothing
    Set wordDoc = Nothing
    Set wordApp = Nothing

    MsgBox "Le tableau pour l'appareil N° " & numeroAppareil & " a été exporté vers le fichier 'reserve.docx'.", vbInformation
End Sub

Merci à tous pour votre aide ci-joint le code qui fonctionne, l'erreur venais du faite que dans mon code lorsque je devais mettre le nom de ma feuille je mettais 'Feuil1'.

Sub ExporterTableauVersWord()
    Dim ws As Worksheet
    Dim rng As Range
    Dim wordApp As Word.Application
    Dim wordDoc As Word.Document
    Dim cheminFichier As String
    Dim numeroAppareil As String

    ' Demander à l'utilisateur de saisir le numéro de l'appareil
    numeroAppareil = InputBox("Entrez le N° Appareil à afficher :", "N° Appareil")

    If numeroAppareil = "" Then
        MsgBox "Numéro d'appareil non spécifié.", vbExclamation
        Exit Sub
    End If

    ' Définir la feuille de calcul et la plage de données à exporter (ajustez selon vos besoins)
    Set ws = ThisWorkbook.Sheets("export")
    Set rng = ws.Range("AO1:AR" & ws.Cells(Rows.Count, "AO").End(xlUp).Row)

    ' Filtrer les données pour afficher uniquement l'appareil sélectionné
    rng.AutoFilter Field:=1, Criteria1:=numeroAppareil

    ' Vérifier si des données filtrées sont présentes
    If Application.WorksheetFunction.Subtotal(103, rng) <= 1 Then
        MsgBox "Aucune donnée pour l'appareil spécifié.", vbExclamation
        ws.AutoFilterMode = False ' Supprimer le filtre
        Exit Sub
    End If

    ' Copier les données filtrées dans le presse-papiers
    rng.SpecialCells(xlCellTypeVisible).Copy

    ' Créer une instance de Word
    On Error Resume Next
    Set wordApp = GetObject(, "Word.Application")
    On Error GoTo 0

    If wordApp Is Nothing Then
        Set wordApp = CreateObject("Word.Application")
    End If

    ' Créer un nouveau document Word
    Set wordDoc = wordApp.Documents.Add
    wordApp.Visible = True

    ' Ajouter le texte "Descriptif des réserves"
    wordDoc.Content.InsertAfter "Descriptif des réserves pour l'appareil N° " & numeroAppareil & vbCrLf & vbCrLf

    ' Coller le contenu du presse-papiers dans le document Word
    wordDoc.Paragraphs(wordDoc.Paragraphs.Count).Range.Paste

    ' Enregistrer le document Word avec le nom "reserve.docx" dans le répertoire actuel
    cheminFichier = ThisWorkbook.Path & "\reserve.docx"
    wordDoc.SaveAs2 cheminFichier

    ' Supprimer le filtre et afficher toutes les données
    ws.AutoFilterMode = False

    ' Fermer le document Word et quitter l'application Word
    wordDoc.Close SaveChanges:=False
    wordApp.Quit

    ' Libérer les objets mémoire
    Set wordDoc = Nothing
    Set wordApp = Nothing

    MsgBox "Le tableau pour l'appareil N° " & numeroAppareil & " a été exporté vers le fichier 'reserve.docx'.", vbInformation
End Sub
Rechercher des sujets similaires à "code vba extraction tableau word"