Vbscript : modification d'un fichier excel [Résolu]

mitsh666 46 Messages postés dimanche 10 octobre 2004Date d'inscription 13 juin 2008 Dernière intervention - 16 oct. 2007 à 04:21 - Dernière réponse : mitsh666 46 Messages postés dimanche 10 octobre 2004Date d'inscription 13 juin 2008 Dernière intervention
- 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
Afficher la suite 

Votre réponse

10 réponses

Meilleure réponse
cs_JMO 1855 Messages postés jeudi 23 mai 2002Date d'inscription 24 juin 2018 Dernière intervention - 16 oct. 2007 à 17:40
3
Merci
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

Merci cs_JMO 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 98 internautes ce mois-ci

Commenter la réponse de cs_JMO
mitsh666 46 Messages postés dimanche 10 octobre 2004Date d'inscription 13 juin 2008 Dernière intervention - 16 oct. 2007 à 04:59
0
Merci
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
Commenter la réponse de mitsh666
mitsh666 46 Messages postés dimanche 10 octobre 2004Date d'inscription 13 juin 2008 Dernière intervention - 16 oct. 2007 à 09:26
0
Merci
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
Commenter la réponse de mitsh666
cs_JMO 1855 Messages postés jeudi 23 mai 2002Date d'inscription 24 juin 2018 Dernière intervention - 16 oct. 2007 à 12:31
0
Merci
 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
Commenter la réponse de cs_JMO
mitsh666 46 Messages postés dimanche 10 octobre 2004Date d'inscription 13 juin 2008 Dernière intervention - 16 oct. 2007 à 15:11
0
Merci
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
Commenter la réponse de mitsh666
mitsh666 46 Messages postés dimanche 10 octobre 2004Date d'inscription 13 juin 2008 Dernière intervention - 17 oct. 2007 à 09:21
0
Merci
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
Commenter la réponse de mitsh666
cs_JMO 1855 Messages postés jeudi 23 mai 2002Date d'inscription 24 juin 2018 Dernière intervention - 17 oct. 2007 à 12:53
0
Merci
 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
Commenter la réponse de cs_JMO
mitsh666 46 Messages postés dimanche 10 octobre 2004Date d'inscription 13 juin 2008 Dernière intervention - 17 oct. 2007 à 14:44
0
Merci
 
???
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
Commenter la réponse de mitsh666
mitsh666 46 Messages postés dimanche 10 octobre 2004Date d'inscription 13 juin 2008 Dernière intervention - 17 oct. 2007 à 14:45
0
Merci
Merci de l'aide Jean-Marc

mitsh666
Commenter la réponse de mitsh666
mitsh666 46 Messages postés dimanche 10 octobre 2004Date d'inscription 13 juin 2008 Dernière intervention - 17 oct. 2007 à 16:00
0
Merci
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
Commenter la réponse de mitsh666

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.