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
| Sub FermerWord()
'Pense à déclarer tes variables
Dim Name As String, Name1 As String
'Essai de toujours mettre au moins une majuscule dans tes nom de variable,
'ça permet en cas d'erreur dans le code de voir en un clin d'oeil si tu as bien orthographié tes nom de variables
Dim AppWord As Object
'ThisWorkbook est préférable si bien sur ta macro se trouve dans le classeur auquel tu veux faire référence
Name1 = ThisWorkbook.Name
Name1 = Replace(Name1, ".csv", ".doc")
'Name1 = Name
Name = Replace(Name1, ".xls", ".doc")
'Attention avec l'utilisation de On error goto next
'Place le toujours au plus juste, ici pour ne par provoquer d'erreur si aucune instance trouvée
'L'erreur ici est potentiellement attendue, par contre si tu place On error.. au début de ton code
'VBA ne te fera remonter aucune erreur, ton code va dérouler en faisant n'importe quoi
On Error Resume Next 'traduction "Lors d'une Erreur Aller à la ligne suivante" ;) sous entendu sans t'avertir
Set AppWord = GetObject(, "Word.Application")
On Error GoTo 0
'Tu dois tester si AppWord pointe bien une instance avant de l'utiliser
'NbWord = AppWord.Documents.Count 'On error resume next te cachait cette erreur
'Je ne suis pas sûr de ce que tu souhaites faire dans la suite de ton code
If AppWord Is Nothing Then
'Pas logique, ici tu utilise AppWord alors qu'il ne contient pas d'instance de Word
'Pour ouvrir une instance tu dois appeler create
Set AppWord = CreateObject("Word.Application")
'Mais je n'en vois pas l'utilité puisque tu cherches à fermé Word
'Si AppWord est Nothing, il n'y a aucun document Word ouvert
'Un nouveau document est ouvert automatiquement si c'est ce que tu voulais faire
'AppWord.Documents.Open Filename:=NouveauWord.doc
Else
'il faut commencer la boucle à 0 et finir à count -1
'tu peux aussi utiliser For Next comme dans mon exemple, cela fonctionne même sans les références
For i = 0 To AppWord.Documents.Count - 1 'NbWord
'Nom = AppWord.Documents(i).Name 'tu n'utilises Nom nulpart
If AppWord.Documents(i).Name = Name Then
AppWord.Documents(i).Close wdDoNotSaveChanges
Exit For
End If
Next i
End If
'Attention ici si AppWord.Documents(i).Close etait le seul document ouvert
'Il y a de forte chance que l'instance est été détruite par windows puisqu'inutile
'Il éviter une remonté d'erreur
On Error Resume Next
If AppWord.Documents.Count = 0 Then AppWord.Quit
On Error GoTo 0
'If NbWord <= 1 Then AppWord.Quit
End Sub |
Partager