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 SubBonjour,
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 SubBonjour 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 SubMerci à 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