Problème pour coller/sauvegarder dans un classeur fermé
B
Bonjour,
Comme j'ai dis dans le titre, j'ai un problème soit pour coller soit pour sauvegarder les modifications de j'apporte à partir d'un autre classeur.
Je vous joins mon code si quelqu'un peut regarder, ça serait gentil:
Option Explicit
Private Sub ComboBox1_Change()
'Déclaration des variables
Dim mot As String
Dim t() As String
Dim ac As String, nc As String, pc As String, lc As String, tc As String, dc As String
Dim n As Integer, i As Integer, nr As Integer
Dim debut As Integer, fin As Integer
Dim fichier As String
Dim xlApp As New Excel.Application
Dim xlBook As New Excel.Workbook
Dim xlSheet As New Excel.Worksheet
Dim ST As Boolean
Dim sheet As Worksheet
mot = Me.ComboBox1.Text 'on désigne par mot l'ensemble de la ligne
t = Split(mot, " , ") 'on sépare chaque partie de la ligne
ac = t(0) 'on stocke la première partie dans la variable ac (acteur choisi)
nc = t(1) 'on stocke la deuxième partie dans la variable nc (nature choisie)
pc = t(2) 'on stocke la troisième partie dans la variable pc (porteur choisi)
lc = t(3) 'on stocke la quatrième partie dans la variable lc (LRU choisi)
tc = t(4) 'on stocke la cinquième partie dans la variable tc (Type de moyen choisi)
dc = t(5) 'on stocke la sixième partie dans la variable dc (Demandeur choisi)
n = Cells(Rows.Count, 1).End(xlUp).Row 'On regarde la dernière ligne écrite pour la liste les fichiers
For i = 7 To n 'Pour toutes les lignes remplies à partir de la 7 ème
'Si les cellules correspondent
If ac = Cells(i, 1) And nc = Cells(i, 2) And pc = Cells(i, 3) And lc = Cells(i, 4) And tc = Cells(i, 5) And dc = Cells(i, 6) Then
debut = i 'on retient la valeur de i
Exit For 'on sort de la boucle
End If
Next
If debut = 0 Then 'si on ne trouve pas de début
MsgBox "Non trouvé" 'on annonce qu'on a pas trouvé
Exit Sub 'on arrete la fonction
End If
For i = debut To n
'si une des valeurs n'est plus bonne
If ac <> Cells(i, 1) Or nc <> Cells(i, 2) Or pc <> Cells(i, 3) Or lc <> Cells(i, 4) Or tc <> Cells(i, 5) Or dc <> Cells(i, 6) Then
fin = i 'on retient la valeur de i
Exit For 'on sort de la boucle
End If
Next
Range("G" & debut, "Q" & (fin - 1)).Copy 'On selectionne la plage de données qui nous interesse
nr = ThisWorkbook.Worksheets("Recherche").Cells(Worksheets("Recherche").Rows.Count, 1).End(xlUp).Row 'On regarde la dernière ligne écrite pour la liste les fichiers
For i = 6 To nr 'Pour toutes les lignes remplies à partir de la 6 ème
'Si les cellules correspondent
If ac = ThisWorkbook.Worksheets("Recherche").Cells(i, 1) And nc = ThisWorkbook.Worksheets("Recherche").Cells(i, 2) And pc = ThisWorkbook.Worksheets("Recherche").Cells(i, 3) And lc = ThisWorkbook.Worksheets("Recherche").Cells(i, 4) And tc = ThisWorkbook.Worksheets("Recherche").Cells(i, 5) And dc = ThisWorkbook.Worksheets("Recherche").Cells(i, 6) Then
fichier = ThisWorkbook.Worksheets("Recherche").Cells(i, 7) 'alors on stocke le chemin du classeur à ouvrir
End If
Next
Set xlBook = xlApp.Workbooks.Open(Filename:=fichier, ReadOnly:=False) 'on ouvre le fichier sans qu'il soit en lecture seule
ST = False 'initialisation de ST
For Each sheet In xlBook.Worksheets 'Pour chaque feuille du classeur
If sheet.Name = "Actions revues ST" Then 'si il existe une feuille action revues ST
ST = True 'on change la valeur de ST
End If
Next
If ST = False Then 'si la valeur a changée
Set xlSheet = xlBook.Sheets("Actions revues") 'on ouvre la feuille actions revues
Else: Set xlSheet = xlBook.Sheets("Actions revues ST") 'sinon on ouvre la feuille actions revues ST
End If
xlSheet.Activate
xlSheet.Range("A7").PasteSpecial
Call ViderPressePapier 'on vide le presse papier
xlBook.Save
xlBook.Close 'On ferme le classeur
xlApp.Quit
Set xlSheet = Nothing
Set xlBook = Nothing
Set xlApp = Nothing
End SubLa faute se trouve dans la partie surligner, je pense.