Vbscript : modification d'un fichier excel

Résolu
mitsh666 Messages postés 46 Date d'inscription dimanche 10 octobre 2004 Statut Membre Dernière intervention 13 juin 2008 - 16 oct. 2007 à 04:21
mitsh666 Messages postés 46 Date d'inscription dimanche 10 octobre 2004 Statut Membre Dernière intervention 13 juin 2008 - 17 oct. 2007 à 16:00
Bonjour,

J'ai un fichier excel dont le style est déjà configuré (taille colonnes, taille lignes, font, ...). Pour conserver ces paramètres, je veux l'ouvrir et modifier le contenu. Pour la fermeture, ça peut se faire à la main et peu importe s'il me demande d'enregistrer à la fermeture.

quelqu'un a-t-il une idée ou un bout d'idée?

Merci d'avance

mitsh666

10 réponses

cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
16 oct. 2007 à 17:40
Re,

Les instructions
objExcel.DisplayAlerts=False ' True, False
objExcel.ActiveWindow.DisplayGridlines = False ' True, False
objExcel.Application.Visible=True ' True, False
sont conventionnelles et non obligatoires.
Mais les modifications en début de script devront être reportées à l'inverse en fin de script.

Pour le sheet, s'il y a un seul onglet, inutile de préciser (1) puisqu'implicite.
Pour redimensionner les colonnes:
'Mise en forme des colonnes
objExcel.Columns("A:B").Select
objExcel.Selection.Columns.AutoFit
ObjExcel.Range("A1").Select
Pour le vbTab, n'étant pas vbaiste, je ne saurais répondre (je plaisante) que par l'utilisation (déconseillée) de sendkeys.

jean-marc
3
mitsh666 Messages postés 46 Date d'inscription dimanche 10 octobre 2004 Statut Membre Dernière intervention 13 juin 2008 1
16 oct. 2007 à 04:59
re...

bon ben j'ai trouvé. Par contre, je ne comprend pas pourquoi ça marche. On ouvre l'application, puis on ouvre le fichier (jusque la ok). Mais comment se fait-il que ça ne soit pas objSpread qui doit être utilisé à la place de objExcel dans la 3ème ligne? (objExcel.Cells(1,..... ). C'est pourtant objSpread qui est le fichier excel ouvert!?
si quelqu'un peut m'expliquer le pourquoi du comment?

Set objExcel = CreateObject("Excel.Application")
Set objSpread = objExcel.Workbooks.Open("c:\temp\exceltest.xls")
objExcel.Cells(1, 1).Value = "tst222sts"
objExcel.Quit
0
mitsh666 Messages postés 46 Date d'inscription dimanche 10 octobre 2004 Statut Membre Dernière intervention 13 juin 2008 1
16 oct. 2007 à 09:26
rebonjour,

J'aimerai pouvoir ajouter directement le texte ci-dessous sur le fichier excel :

"Title 11" & chr(9) & "Title 2" & chr(9) & "Title 3" & chr(9) & "Title 4" & chr(13) & "Value 1" & chr(9) & "Value 2" & chr(9) & "Value 3" & chr(9) & "Value 4"

chr(9) étant des TAB et chr(13) étant des return. le problème c'est que lors de l'écriture, il indique des carrés blancs à la place.

merci

mitsh666
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
16 oct. 2007 à 12:31
 Bonjour,

Ci-dessous un exemple simple:

Const MonFichierExcel = "D:\SCRIPTS\Fichiers\Exemple.xls"  

Dim objExcel, objClasseur
Set objExcel = CreateObject("Excel.Application")
Set objClasseur = objExcel.Workbooks.Open(MonFichierExcel)
objExcel.DisplayAlerts = False  'enlève l'alerte (oui=True, non=False)
objExcel.Application.Visible = True 'Cache le classeur (oui=True, non=False)

objExcel.ActiveWorkbook.Sheets("Exemple1").Select   'selection de mon onglet

objExcel.Cells(1, 1).Value = "Title1"
objExcel.Cells(1, 2).Value = "Title2"
objExcel.Cells(1, 3).Value = "Title3"
objExcel.Cells(1, 4).Value = "Title4"

objExcel.Cells(2, 1).Value = "Value1"
objExcel.Cells(2, 2).Value = "Value2"
objExcel.Cells(2, 3).Value = "Value3"
objExcel.Cells(2, 4).Value = "Value4"

objExcel.ActiveWorkbook.SaveAs MonFichierExcel 'sauvegarde le classeur
objExcel.ActiveWorkbook.Close 'Fermeture d'Excel
objExcel.DisplayAlerts = True 'remet l'alerte  oui=True   non=False
objExcel.Application.Visible=True 'remet la visibilité
objExcel.Quit

Set objExcel = Nothing
Set objClasseur = Nothing

Pour écrire x cellules, il faut "imbriquer" 2 boucles (1 pour la colonne, 1 pour la ligne).

jean-marc
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mitsh666 Messages postés 46 Date d'inscription dimanche 10 octobre 2004 Statut Membre Dernière intervention 13 juin 2008 1
16 oct. 2007 à 15:11
Bonjour Jean-Marc,

Merci pour la réponse...
question cependant : Sans les lignes suivantes, cela fonctionne aussi. sont-elles cependant nécessaire pour éviter tout problème à la crosoft?

objExcel.DisplayAlerts = False  'enlève l'alerte (oui=True, non=False)
objExcel.Application.Visible = True 'Cache le classeur (oui=True, non=False)

objExcel.ActiveWorkbook.Sheets("Exemple1").Select   'selection de mon onglet

Nouvelles questions :
quand j'écris une longue phrase dans une case, j'aimerai qu'elle se prolonge dans les cases vides de sa droite. avec Cell, tout est dans la case. de plus la case prend des dimension importantes pour tout voir. Y a-t-il une façon d'activer ce mode?

De plus, j'aimerai bien utiliser les tab et return (chr(13) et chr(9)) mais je n'arrive pas à le faire accepter par cells. Y a-t-il un moyen d'y parvenir????

mitsh666
0
mitsh666 Messages postés 46 Date d'inscription dimanche 10 octobre 2004 Statut Membre Dernière intervention 13 juin 2008 1
17 oct. 2007 à 09:21
Bonjour,

En fait si je pose la question, c'est que lors de ma première création d'un fichier excel ça marchait bien (cf code ci-dessous). Mais si on écrit comme sur cette soluce, on écrase le contenu du fichier.

    Dim FSys
    Dim MonFic

    Set FSys = CreateObject("Scripting.FileSystemObject")
    Set MonFic = FSys.CreateTextFile(FileNameSave)
    With MonFic 'Pour écrire dans le fichier texte
        .write "text1" & chr(13) & "Text2"
    End With

Mais je comprend bien que c'est déconseillé quand ça fonctionne pas tout le temps .
Merci

mitsh666
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
17 oct. 2007 à 12:53
 Bonjour à tous,

Bonjour [auteur/MITSH666/357083.aspx mitsh666],

Il ne faut pas utiliser la méthode "CreateTextFile" pour créer un .xls
   Dim fso, MyFile
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set MyFile = fso.CreateTextFile("d:\testfile.xls", True)
   MyFile.WriteLine("Ceci est un test.")
   MyFile.Close
Cet exemple crée effectivement le fichier et écrit dans la cellule(1,1).

Pour créer un .xls:
Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = True
Set objWorkbook = objExcel.Workbooks.Add()
Set objWorksheet = objWorkbook.Worksheets(1)

objWorksheet.Cells(1,1) = "Dataset 1"
objWorksheet.Cells(1,2) = "Dataset 2"

Après re-re-lecture de ta question:
<< J'ai un fichier excel dont le style est déjà configuré (taille colonnes, taille lignes, font, ...)

jean-marc
0
mitsh666 Messages postés 46 Date d'inscription dimanche 10 octobre 2004 Statut Membre Dernière intervention 13 juin 2008 1
17 oct. 2007 à 14:44
 
???
Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = True
Set objWorkbook = objExcel.Workbooks.Add()
Set objWorksheet = objWorkbook.Worksheets(1)

objWorksheet.Cells(1,1) = "Dataset 1"
objWorksheet.Cells(1,2) = "Dataset 2"

ça crée pas un fichier... ça ouvre excel et ça ouvre une feuille. Mais j'ai compris l'astuce. voici d'ailleurs la fonction pour créer un fichier excel pour ceux qui la désirent :

function fctCreateExcelFile(ByVal FilePath)
    Dim objExcel, objClasseur, objWorkbook, objWorksheet
    Set objExcel = CreateObject("Excel.Application")
    objExcel.DisplayAlerts = False  'enlève l'alerte (oui=True, non=False)
    'objExcel.Application.Visible = True 'Cache le classeur (oui=True, non=False)
   
    Set objWorkbook = objExcel.Workbooks.Add()
    Set objWorksheet = objWorkbook.Worksheets(1)
   
    objExcel.ActiveWorkbook.SaveAs FilePath 'sauvegarde le classeur
    objExcel.ActiveWorkbook.Close 'Fermeture d'Excel
    objExcel.DisplayAlerts = True 'remet l'alerte  oui=True   non=False
    'objExcel.Application.Visible=True 'remet la visibilité
    objExcel.Quit
   
    Set objExcel = Nothing
    Set objClasseur = Nothing
end function

et pour modifier ce qu'il y a dans le fichier excel :

function fctModifyExcelFile(ByVal FilePath)
    Dim objExcel, objClasseur
    Set objExcel = CreateObject("Excel.Application")
    Set objClasseur = objExcel.Workbooks.Open(FilePath)
    objExcel.DisplayAlerts = False  'enlève l'alerte (oui=True, non=False)
    'objExcel.Application.Visible = True 'Cache le classeur (oui=True, non=False)
   
    objExcel.ActiveWorkbook.Sheets(1).Select   'selection de mon onglet
   
    objExcel.Cells(1, 1).Value = "Title12"
    objExcel.Cells(1, 2).Value = "Title22"
    objExcel.Cells(1, 3).Value = "Title32"
    objExcel.Cells(1, 4).Value = "Title42"
   
    objExcel.Cells(2, 1).Value = "Value12"
    objExcel.Cells(2, 2).Value = "Value22"
    objExcel.Cells(2, 3).Value = "Value32"
    objExcel.Cells(2, 4).Value = "Value42"
   
    'objExcel.ActiveWorkbook.SaveAs FilePath 'sauvegarde le classeur
    objExcel.ActiveWorkbook.Save'sauvegarde le classeur
    objExcel.ActiveWorkbook.Close 'Fermeture d'Excel
    objExcel.DisplayAlerts = True 'remet l'alerte  oui=True   non=False
    'objExcel.Application.Visible=True 'remet la visibilité
    objExcel.Quit
   
    Set objExcel = Nothing
    Set objClasseur = Nothing
end function

J'ai préféré éliminer la ligne objExcel.Application.Visible afin de ne pas voir l'ouverture d'excel

Angel
0
mitsh666 Messages postés 46 Date d'inscription dimanche 10 octobre 2004 Statut Membre Dernière intervention 13 juin 2008 1
17 oct. 2007 à 14:45
Merci de l'aide Jean-Marc

mitsh666
0
mitsh666 Messages postés 46 Date d'inscription dimanche 10 octobre 2004 Statut Membre Dernière intervention 13 juin 2008 1
17 oct. 2007 à 16:00
Nouvelle question.

Pour modifier la taille de la ligne automatiquement en fonction du contenu, comment fait-on?
Je m'explique, j'ai une cellule avec le contenu suivant :

Et des remarques, on peut en avoir une pétée, ça peut même déplacer la place qui est octroyée. Enfin, j'ai plus envie de parler, donc je vais faire des dfkféjasklfjaséfléhgfkjvhsfkdashfkéldshafklashfklashfklasjfhasklhfjasklashfklashfkashfklasjhfaskfaskfhhfklashfklasfkfélàkfkfélàélodasjfijoweiurjjfaslkfjlasjfélaskjfaséjfklasjfélasjfklasjfljflaskj.wmer.,mdsfa.fmmwkefjlsjflaskjfasélfas

Juste pour faire fun

j'aimerai que la cellule affiche tout le texte. Elle ne peut pas changer la taille de la cellule, mais uniquement celle de la ligne. J'ai en effet fait un Merge (fusion de cellules) sur x colonnes afin d'avoir un espace texte qui utilisera toute la place de la feuille lors de l'impression. Concéquences, on ne peux bouger que la taille de la ligne pour faire apparaître tout le texte.

mitsh666
0
Rejoignez-nous