Bonjour,
Je fais appel à vous car je bloque depuis quelques jours sans arriver à comprendre pq ...
J'avais l'habitude d'utiliser des listbox, mais étant donné que les listview sont plus performantes et permettent plus de choses j'ai décider de me lancer dans le sujet.
J'ai donc réussis (avec l'aide d'internet), sans forcément tout comprendre (la est le pb), à extraire une listview pour créer une news sheet et générer celle ci en pdf puis la suppr.
Ma ListView réussis comporte deux colonnes et un nombre x de ligne et celle ci fonctionne parfaitement :
If ListView1.ListItems.Count = 0 Then
MsgBox ("Aucune données à générer ...")
Exit Sub
Else
End If
MsgBox ("Merci de choisir le dossier dans lequel vous voulez que le PDF soit généré !")
On Error GoTo selectionobligatoire
Dim finput As FileDialog
Set finput = Application.FileDialog(msoFileDialogFolderPicker)
finput.Show
With finput
Sheets("Paramètre").Cells(1, 4) = .SelectedItems(1) 'Enregistre le chemin du dossier dans lequel doit ce trouver le fichier généré en feuille "paramètre"
End With
Application.ScreenUpdating = False
Sheets.Add.Name = "Temp"
Dim k
Dim i
Dim j
With Me.ListView1
For k = 1 To .ColumnHeaders.Count
Sheets("Temp").Cells(1, k).ColumnHeaders.item(k).Text
Sheets("Temp").Cells(1, k).Font.Bold = True
Sheets("Temp").Cells(1, k).Font.Size = 12
Sheets("Temp").Cells(1, k).Interior.Color = vbBlue
Next k
Sheets("Temp").Select
For i = 2 To .ListItems.Count + 1
Sheets("Temp").Cells(i, 1) = .ListItems(i - 1).Text
For j = 1 To .ListItems(i - 1).ListSubItems.Count
Sheets("Temp").Cells(i, j + 1) = .ListItems(i - 1).SubItems(j)
Next j
Next i
End With
Sheets("Temp").Select
Cells.Select
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlCenter
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Dim sRep As String ' Répertoire de sauvegarde
Dim sFilename As String ' Nom du fichier
Dim reponse As String
Dim reponse2 As Long
reponse = InputBox("Donner un nom à votre fichier")
If reponse = "" Then
MsgBox ("L'enregistrement à échoué")
Application.DisplayAlerts = False
Sheets("Temp").Delete
Application.DisplayAlerts = True
Exit Sub
Else
End If
sRep = Sheets("Paramètre").Range("D1").Value ' Répertoire de sauvegarde (si non spécifié, répertoire actif par défaut)
sFilename = reponse ' Nom du fichier
Sheets("Temp").PageSetup.Orientation = xlLandscape
Sheets("Temp").PageSetup.Zoom = False
Sheets("Temp").PageSetup.FitToPagesTall = 1
Sheets("Temp").PageSetup.FitToPagesWide = 1
Sheets("Temp").Range("A1:" & Cells(i, j).Address).ExportAsFixedFormat _
Type:=xlTypePDF, _
Filename:=sRep & "\" & sFilename, _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=False
Sheets("Paramètre").Range("D2").Value = sRep & "\" & reponse & ".pdf"
Application.DisplayAlerts = False
Sheets("Temp").Delete
Application.DisplayAlerts = True
reponse2 = MsgBox("La base de donnée à bien été enregistrer, souhaitez vous l'ouvrir ?", _
vbYesNo + vbQuestion + vbDefaultButton1, _
"")
If reponse2 = vbYes Then
Call OuvrirUnFichierPDF 'ouvre le fichier pdf dont le chemin ce situe en cellule D2 de la feuille paramètre
Else
End If
Application.ScreenUpdating = True
Exit Sub
selectionobligatoire: 'Si l'utilisateur quitte avant d'avoir choisit le fichier
MsgBox ("Vous n'avez pas choisit de dossier pour enregistrer votre fichier, l'enregistrement à échoué !")
Exit Sub
End Sub
Seulement je n'arrive pas à reproduire cette macro avec une listview comportant 14 colonnes ...
Une erreur apparaît : "Erreur d’exécution 438 ; Propriété ou méthode non gérée par cet objet"
Et la ligne pointé par le débogueur est la suivante :
Sheets("Temp").Cells(1, k).ColumnHeaders.item (k).text
Quelqu'un aurait une idée ?