Bonjour,
Peut-on écrire dans un fichier Excel ouvert ?
Si oui, comment et à quelles conditions ?
Merci à tous
ULK
Bonjour,
Peut-on écrire dans un fichier Excel ouvert ?
Si oui, comment et à quelles conditions ?
Merci à tous
ULK
Bonjour,
Fais donc un tour dans la FAQ, par exemple ici : http://access.developpez.com/faq/?page=Excel#PilotExcel
Bonjour ClaudeLELOUP,
et merci !
j'ai bien galéré quand même entre les Forums, FAQ et tutoriel. Et après une nuit blanche, 200 millions de lignes de code lues, 250 test et 37 litres de Kawa sucré j'ai finalement réussi à obtenir ce que je cherchais.
j'arrive à écrire dans un classeur Excel ouvert ou non par une application Excel active ou non. je ne comprends pas bien comment et pourquoi ça marche (il y plein de choses plus ou moins magiques qui marchent en opposition avec toutes celles testées et qui, inexplicablement, ne marchent pas alors qu'elles le devraient). Quoi qu'il en soit voici ci-dessous mon code qui me permet même de voir les cellules se remplir au fur et à mesure.
je suis preneur de toute idée de modification et de remarques pour m'éviter d'être à la merci du vice de toute bestiole sous-jacente
merci encore
bonne journée
ULK
Private Sub OUVREclasseurEXCEL()
Dim NomFichierExcel As String
Dim NomFeuilleExcel As String
Dim NomCelluleExcel As String
Dim NomClasseur As String
Dim bascOuvert As Boolean
' **************** Déclarer les proprietes Excel
Dim ApplicationExcel As Excel.Application 'Application Excel
Dim FichierExcel As Excel.Workbook 'Classeur Excel
Dim FeuilleExcel As Excel.Worksheet 'Feuille Excel
NomClasseur = "(MonClasseur.xlsx" 'Nom du Classeur
NomFichierExcel = "C:\MonRepertoire\" & NomClasseur 'Chemin du Classeur
' **************** Atteindre la session active d'Excel
On Error GoTo GestionErreur 'Si on ne peut pas atteindre la session active d'Excel
Set ApplicationExcel = GetObject(, "Excel.Application") 'Session active d'Excel
'Note : ne fonctionne que si Excel est déjà actif ??????? , donc si ça ne fonctionne pas alors il faut une nouvelle instance d'Excel ( par GestionErreur: )
GoTo OuvertureClasseur 'on saute GestionErreur: puisque ça fonctionne et que Excel est déjà actif
' **************** Ouvrir une nouvelle Instance d'Excel si Excel n'est pas actif
GestionErreur:
Set ApplicationExcel = Nothing 'Vide mémoire, on ne sait jamais ...
Set ApplicationExcel = New Excel.Application 'Ouvre une nouvelle (donc première) instance d'Excel
OuvertureClasseur:
On Error Resume Next 'Pour éviter de revenir à GestionErreur: en cas de pépin ...
bascOuvert = False 'Par défaut, le Classeur cherché n'est pas ouvert
'Vérifier si le Classeur cherché est déjà ouvert
For Each FichierExcel In ApplicationExcel.Workbooks
With FichierExcel
If .Name = NomClasseur Then 'Si le Classeur cherché fait partie des classeurs ouverts ...
bascOuvert = True 'alors le Classeur cherché est ouvert !
Exit For
End If
End With
Next FichierExcel
If bascOuvert = False Then
'Si le Classeur n'est pas ouvert
SetAttr NomFichierExcel, vbNormal 'Donne la propriété Lecture-écriture au Classeur, on ne sait pas par avance le caractère protectionniste de l'utilisateur actuel ...
Set FichierExcel = ApplicationExcel.Workbooks.Open(NomFichierExcel) 'Ouvre le Classeur
ApplicationExcel.Visible = True 'Affiche le Classeur
Else
'Si le Classeur est ouvert
SetAttr NomFichierExcel, 0 'Donne la propriété Lecture-écriture au Classeur ouvert, synonime de SetAttr NomFichierExcel, vbNormal ??????????
End If
' **************** Sélectionner une feuille
NomFeuilleExcel = "MaFeuille" 'Nom de la Feuille
Set FeuilleExcel = FichierExcel.Worksheets(NomFeuilleExcel)
' **************** Ecrire dans une Cellule de la feuille séléctionnée
NomCelluleExcel = "A1"
FeuilleExcel.Range(NomCelluleExcel).Value = "Blablabla"
' **************** Formater la Cellule séléctionnée
FeuilleExcel.Range(NomCelluleExcel).Borders(xlEdgeLeft).LineStyle = xlContinuous
FeuilleExcel.Range(NomCelluleExcel).Borders(xlEdgeRight).LineStyle = xlContinuous
FeuilleExcel.Range(NomCelluleExcel).Borders(xlEdgeTop).LineStyle = xlContinuous
FeuilleExcel.Range(NomCelluleExcel).Borders(xlEdgeBottom).LineStyle = xlContinuous
FeuilleExcel.Range(NomCelluleExcel).Interior.ColorIndex = 6
FeuilleExcel.Range(NomCelluleExcel).Font.Size = 16
FeuilleExcel.Range(NomCelluleExcel).Font.Bold = False
FeuilleExcel.Range(NomCelluleExcel).RowHeight = 28
FeuilleExcel.Range(NomCelluleExcel).VerticalAlignment = xlCenter
FeuilleExcel.Range(NomCelluleExcel).HorizontalAlignment = xlLeft
'et c ...
FichierExcel.SAVE 'Sauvegarder les modifs
'FichierExcel.Close (True) si on veut fermer le classeur en sauvegardant les modifs
'applicationExcel.Quit si on veut quitter l'instance Excel en cours
Set ApplicationExcel = Nothing 'Vide mémoire
Set FichierExcel = Nothing 'Vide mémoire
Set FeuilleExcel = Nothing 'Vide mémoire
End Sub
Partager