CODE PERMETTANT DE MANIPULER LES OBJETS EXCEL EN .NET

TOTOCHITO Messages postés 63 Date d'inscription lundi 13 septembre 2004 Statut Membre Dernière intervention 16 novembre 2007 - 13 juil. 2006 à 10:39
Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 - 21 sept. 2011 à 14:37
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/38534-code-permettant-de-manipuler-les-objets-excel-en-net

Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
21 sept. 2011 à 14:37
Salut, et merci pur ce tuto. J'ai référencé le Com Excel ver 10.0 et du coup j'ai du adapter ton code (Excel 2002 sp3). Je partage donc la façon de faire (sinon j'ai une erreure de liaison tardive avec option strict)
Il faut remplacer les appxls.ActiveWorkbook.Worksheets("NouveauNom").Range("A1").Value "tyty" par :
> With book.Sheets.Application
.Range("F5").Value = Date.Today.ToString
.Range("F6").Value = "test"
End With

Avec : Dim book As Excel.Workbook et
book = appxls.Workbooks.Open(cheminFormulaire)
Me demande pas pourquoi, juste que cela marche LOL. Bonne prog à tous. ADN
lecoque Messages postés 2 Date d'inscription mardi 18 mai 2010 Statut Membre Dernière intervention 18 mai 2010
18 mai 2010 à 16:58
BONJOUR
je programme avec vb express 2005
j'aurai voulu faire une vérification avec « if ….then »
si un fichier Excel es bien ouvert j'appel une macro qui modifie les onglets et rajoute si nécessaire
et s’il y a aucun fichier Excel je crée un classeur et crée les onglets
mais j’arrive pas à testé si le fichier Excel est ouvert ou pas.
asmaesim Messages postés 3 Date d'inscription mardi 28 avril 2009 Statut Membre Dernière intervention 8 novembre 2011
25 juin 2009 à 12:21
merçi pour le code mas j'arrive pas a donner une réfrence à excel peut tu me dire comment?
cs_othinakiway Messages postés 30 Date d'inscription lundi 7 avril 2008 Statut Membre Dernière intervention 10 juin 2009 2
29 avril 2009 à 20:00
un bon code, bien organisé et très clair.
bonne continuité!
diampa Messages postés 3 Date d'inscription samedi 17 février 2007 Statut Membre Dernière intervention 30 octobre 2007
25 avril 2009 à 09:30
salut bon code
mais moi de ma part j'ai essayé en vain la sélection de deux ou trois feuilles pour l'impression.
j'ai passer par l'enregistreur de macros mais pour adapter le code en vb cela devient un gros problème
voici le code que je veux adapter
Sheets(Array("FicheObserv", "Feuil2", "Feuil3")).Select
Sheets("FicheObserv").Activate
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
teutif Messages postés 1 Date d'inscription mardi 25 décembre 2007 Statut Membre Dernière intervention 22 avril 2009
22 avril 2009 à 10:36
Coucou juste pour dire qu'il y a une erreur, en tout cas chez moi, mais j'ai la solution ;)

Lorsque je test ceci :
'Sélectionner une cellule
sheet = appxls.ActiveWorkbook.Worksheets("NouveauNom")
sheet.Activate()
sheet.Cells(1, 1).Select()
'ou
sheet.Range("A2").Select()

J'ai la meme erreur que BLU!

La solution vient de la déclaration de sheet, ce n'est pas
Dim sheet As Microsoft.Office.Interop.Excel.Workbook
Mais bien
Dim sheet As Microsoft.Office.Interop.Excel.Worksheet

Sinon super source, elle m'aide beaucoup!!!!
crownstud Messages postés 16 Date d'inscription mardi 18 mars 2008 Statut Membre Dernière intervention 29 juin 2011
1 juil. 2008 à 09:42
super cool ton code.Voila moi je voudrais creer des fichier xls (de façon périodique)et avec la date dans le titre.Pour récupérer la date,pas de difficulté mais pour la mettre dans le nom du xls impossible.
Donc si tu vois comment faire...
Et aussi j'aimerais mettre des bordures voyante automatiquement,c'est possible sa?
Merci.
cs_BLU Messages postés 16 Date d'inscription jeudi 11 juillet 2002 Statut Membre Dernière intervention 31 juillet 2008
22 juin 2008 à 23:00
La sélection de plusieurs onglets devrait être du genre :
Sheets(Array("Feuille 1", "Feuille 2")).Select

Pour info, on m'a donné le lien suivant pour le support VBA et les objets Excel :

http://bvrve.club.fr/Astuces_Michel/12excelvba.html

Cela va peut être t'aider.

Cdt,
Benoit
diampa Messages postés 3 Date d'inscription samedi 17 février 2007 Statut Membre Dernière intervention 30 octobre 2007
22 juin 2008 à 10:47
ton code est bien clair mais comment faire pour selectionner 2 feuilles en même temps
wammaw Messages postés 1 Date d'inscription lundi 12 juin 2006 Statut Membre Dernière intervention 4 mai 2008
4 mai 2008 à 08:46
'Ajouter une feuille après la dernière feuille'
Sheets.Add(Type.Missing, appxls.Worksheets[appxls.Worksheets.Count], Type.Missing, Type.Missing);

'corespond à la dernière feuille'
appxls.Worksheets[appxls.Worksheets.Count]
cs_BLU Messages postés 16 Date d'inscription jeudi 11 juillet 2002 Statut Membre Dernière intervention 31 juillet 2008
19 févr. 2008 à 20:43
Merci XOFA,
Effectivement la variable contenant le nom de l'onglet semblait être mal évaluée, ce qui du coups plantait le code.

Cdt,
Benoît
XofA Messages postés 1 Date d'inscription dimanche 16 juillet 2006 Statut Membre Dernière intervention 6 janvier 2008
6 janv. 2008 à 14:15
BLU,

une feuille de ton classeur Excel doit porter le nom 'NouveauNom', as-tu vérifer ?
cs_BLU Messages postés 16 Date d'inscription jeudi 11 juillet 2002 Statut Membre Dernière intervention 31 juillet 2008
7 nov. 2007 à 14:13
Bonjour,

Je suis sous VB 2005 et office 2003.
Le début de code est ok mais sur la sélection d'une cellule le code bloque

'Sélectionner une cellule
sheet appxls.ActiveWorkbook.Worksheets("NouveauNom")
>
Impossible d'effectuer un cast d'un objet COM de type 'System.__ComObject' en type d'interface 'Microsoft.Office.Interop.Excel.Workbook'. Cette opération a échoué, car l'appel QueryInterface sur le composant COM pour l'interface avec l'IID '{000208DA-0000-0000-C000-000000000046}' a échoué en raison de l'erreur suivante : Cette interface n'est pas prise en charge (Exception de HRESULT : 0x80004002 (E_NOINTERFACE)).

Avez vous une idée ?

Merci d'avance.
mitsh666 Messages postés 46 Date d'inscription dimanche 10 octobre 2004 Statut Membre Dernière intervention 13 juin 2008 1
18 oct. 2007 à 09:06
hello,

ben c'est bon. par contre on ne peut pas faire un autosize de 2 cellules fusionnées. triste la vie...

voici une fonction qui contient toutes les modifications que je connais à ce jour :

function fctModifyExcelTable(ByVal FilePath, ByRef TabContent)
Dim objExcel
Dim objClasseur
Dim lin

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

lin = objExcel.Cells(1,1).Value
objExcel.Selection.Borders.Weight = 4 '= xlThick
objExcel.Selection.ColumnWidth = 12
objExcel.Selection.Font.Name = "Arial"
objExcel.Selection.Font.Size = 11
objExcel.Selection.Font.Bold = True
objExcel.Selection.HorizontalAlignment = &HFFFFEFF4 '= xlCenter
objExcel.Selection.Interior.ColorIndex = 6
objExcel.Selection.NumberFormat = "@"
objXLA.Selection.Borders.LineStyle = 1 '= xlSolid
objXLA.Selection.Borders.Weight = 4 '= xlThick
objExcel.Selection.Borders.LineStyle = 1
objExcel.Selection.Borders.Weight = -4138
objExcel.Selection.Borders(11).LineStyle = -4142
objExcel.Selection.Borders(12).LineStyle = -4142
objExcel.Selection.Interior.ColorIndex = 0
objExcel.Selection.RowHeight = 30
objExcel.Selection.Rows.AutoFit
objExcel.Selection.Columns.AutoFit

'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
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:47
Bonjour a tous,

Merci Drikce06 pour ces exemples. Au moins c'est clair ;-)

Cela dis, je suis à la recherche de comment modifier la taille d'une ligne ou colonne avec du vbscript. En plus, ça doit être efficace sur une ligne de cellules fusionnées. Mon but étant de permettre la vision de tout le texte se trouvant dans la cellule. et ce en vbscript.

En somme, je suis à la recheche de la même chose que Cacou99. Malheureusement, je bosse pas avec VBA comme l'as dis Renfield et ne vois pas ce que veux dire Mortalino. Par contre ABDELJAWAD86, penses-tu que cela donne aussi du vbs?
saku28 Messages postés 13 Date d'inscription mercredi 3 octobre 2007 Statut Membre Dernière intervention 27 mars 2010
5 oct. 2007 à 14:01
Hello ton code m'a bien aidé mais j'aurai besoins encore d'un petit peut de ton aide
enfaite j'ai fait une importation depuis un fichier texte et il y'a des lignes vierge sous excel et ce que quelqu'un aurait une commande pour supprimer les lignes vierges?
abdeljawad86 Messages postés 3 Date d'inscription lundi 20 novembre 2006 Statut Membre Dernière intervention 30 juillet 2007
12 août 2007 à 16:41
Hé CACOU t'es vraiment ..........
tu vas sur excel,n'importe quelle classeur tu crées une macro pour redimentionner une cellule, et aprés excel va générer le code que tu pourras l'analyser ds macro->Visual Basic Editor->module x
alors bref t'as rien a faire plus facile que de le dire copie-->coller avec un peu de programmation que t'as ds la tête
ciao
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
25 juil. 2007 à 17:13
... ou dans l'explorateur d'objets (F2)
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
25 juil. 2007 à 17:10
voir dans l'aide VBA d'excel...
Cacou99 Messages postés 14 Date d'inscription lundi 23 juillet 2007 Statut Membre Dernière intervention 24 septembre 2008
25 juil. 2007 à 17:08
Bonjour,

Merci pour toutes ces informations mais qui pour moi son malheuresement insufisante...

Pourriez vous m'indiquer ou vous trouvé toutes ces syntaxes car je ne les ai pas trouvé.
Je suis a la recherche de la ligne de code pour changer la taille des cellules, colonnes et ligne ...

Merci d'avance ..

Pitch
Bat007 Messages postés 2 Date d'inscription jeudi 11 juillet 2002 Statut Membre Dernière intervention 16 juillet 2007
16 juil. 2007 à 17:42
Bonjour,

Merci pour ton code, mais comme Jo_Pistol le demande, moi j'ai un soucis pour créer un graphe comprenant plusieurs series.
Je me sert de appxls.ActiveChart.SeriesCollection(1).XValues & appxls.ActiveChart.SeriesCollection(1).Values mais je n'arrive pas a passer les paramètres, et lorsque je "crois" les passer, en fait, mon graphe reste à {1}

Si quelqu'un à déjà eu le soucis, merci de m'expliquer pourquoi cela ne fonctionne pas.
Jo_Pistol Messages postés 12 Date d'inscription mardi 10 juillet 2007 Statut Membre Dernière intervention 26 juillet 2007
10 juil. 2007 à 06:18
salut

Est-il possible de generer un graph, a partir d'une table?
merci
cs_AVI17 Messages postés 47 Date d'inscription samedi 19 novembre 2005 Statut Membre Dernière intervention 26 janvier 2010
23 févr. 2007 à 22:26
merci de ta réponse, j'ai du faire une erreur qlq part dans mon prog, car quand je fais appxls.cells(2,2).value j'ai une erreur .com
je vais chercher
Utilisateur anonyme
23 févr. 2007 à 11:32
Salut Cells(2,2) normalement
cs_AVI17 Messages postés 47 Date d'inscription samedi 19 novembre 2005 Statut Membre Dernière intervention 26 janvier 2010
23 févr. 2007 à 11:28
bravo et merci pour ton code,

comment fais-tu pour lire la valeur d'une cellule en voulant préciser le n°ligne et N° colonne et non pas son adresse du type "B2" car je n'y arrive pas .

Merci d'avance
billoux70 Messages postés 4 Date d'inscription lundi 15 janvier 2007 Statut Membre Dernière intervention 10 janvier 2008
25 janv. 2007 à 13:32
merci je vais détailler un peu plus mon projet
pour l'instant mes données s'incrive bien dans mon fichier excel et s'enregistre en *.xls
mes références installées sont office11 et excel.
je voudrais affiché mes données dans une form, j'avais pensé a le sauvegarder en html pour ensuite l'afficher.
j'ai déja pas mal cherché moi meme et sur le net, mais je reste bloqué. encore merci pour votre aide

@@@+
Utilisateur anonyme
25 janv. 2007 à 13:16
Salut il faut ajouter la référence microsoft excel.
billoux70 Messages postés 4 Date d'inscription lundi 15 janvier 2007 Statut Membre Dernière intervention 10 janvier 2008
25 janv. 2007 à 13:11
merci beaucoup
j'ai deja fait cette opération mais je n'arrive pas à réadapter le code (est ce qu'il faut rajouter une référence a vb?). si quelqu'un a deja réussi s'il pouvais publier la solution sa serait sympa.
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
25 janv. 2007 à 06:31
Salut,

Billoux70 : dans excel, fichier Enregistrer sous... et choisi le format html.
Enregistre toi pendant que tu fais cette opération, tu auras la syntaxe et une adaptation sera alors a faire pour exploiter en DotNet

@++
billoux70 Messages postés 4 Date d'inscription lundi 15 janvier 2007 Statut Membre Dernière intervention 10 janvier 2008
22 janv. 2007 à 10:48
merci pour ce code
Je debute en programation j'aurais une petite question à vous poser.
Comment fait t'on pour enregistrer un classeur dans un autre format que le xls ("htm")?

merci pour votre (vos) réponse(s)
cs_jimmy69 Messages postés 778 Date d'inscription dimanche 22 décembre 2002 Statut Membre Dernière intervention 27 novembre 2008 1
17 oct. 2006 à 16:04
salut drikce06,

cool ca fonctionne !

merci et bonne fin de journée
christophe
un bouillonnais
Utilisateur anonyme
17 oct. 2006 à 14:45
Salut normalement ça devrait être ça :
sheet.Range("A1:A3").Merge()
cs_jimmy69 Messages postés 778 Date d'inscription dimanche 22 décembre 2002 Statut Membre Dernière intervention 27 novembre 2008 1
17 oct. 2006 à 14:39
salut salut,

est il possible de fussioner des cellules !?
et si oui comment !?

Je vous remercie
Christophe
stekiyeki Messages postés 2 Date d'inscription mardi 6 juillet 2004 Statut Membre Dernière intervention 6 octobre 2006
6 oct. 2006 à 09:59
En fait je viens de trouver ;)
Celà est du à une différence de langue entre excel et visual.
Il faut rajouter cette ligne:

System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture("en-US")

Bien sûr ca dépend de la config que l'on a.
Merci quand meme en tout cas.
Utilisateur anonyme
6 oct. 2006 à 09:48
Salut, désolé mais j'ai pas d'idée, moi j'ai vb2005 express edition avec excel 11 en référence et ça fonctionne bien.
stekiyeki Messages postés 2 Date d'inscription mardi 6 juillet 2004 Statut Membre Dernière intervention 6 octobre 2006
6 oct. 2006 à 09:26
Salut,
super code mais chez moi j'obtiens une erreur à la ligne:
appxls.Workbooks.Add() ' Old Format or Invalid Type Library.
J'utilise pourtant la reference excel version 11. Je suis sur visual studio 2003.
Quelqu'un a une idée?
Merci.
76cacash Messages postés 22 Date d'inscription mercredi 21 juin 2006 Statut Membre Dernière intervention 24 août 2006
16 août 2006 à 13:30
salut,

ton programme m'aide bcp mais sait tu comment on pourrai faire pour créer un graph a partir de valeur dans un tableau?

merci
Utilisateur anonyme
17 juil. 2006 à 13:06
Salut mortalino, c'est possible de changer?
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
14 juil. 2006 à 01:04
Salut Drikce, le code est clair est bien présenté donc je te met 8 mais je pense que cela aurait été mieux de l'avoir mis en tutorial !

++
Mortalino
Utilisateur anonyme
13 juil. 2006 à 14:39
Merci ça fait plaisir
cs_jimmy69 Messages postés 778 Date d'inscription dimanche 22 décembre 2002 Statut Membre Dernière intervention 27 novembre 2008 1
13 juil. 2006 à 13:13
Salut salut,

Cool vraiment cool ton p'tit exemple ..ca merite une bonne note ;-) !

De plus, ca tombe bien je dois generer avec du code C# un rapport sous excel ..

Ca va bien m'aider !

Bonne continuation
Christophe
Un bouillonnais
TOTOCHITO Messages postés 63 Date d'inscription lundi 13 septembre 2004 Statut Membre Dernière intervention 16 novembre 2007
13 juil. 2006 à 11:34
Merci pour tes renseignements bonne contination
Utilisateur anonyme
13 juil. 2006 à 11:26
J'ai office 2003 sur xp pro sp2
TOTOCHITO Messages postés 63 Date d'inscription lundi 13 septembre 2004 Statut Membre Dernière intervention 16 novembre 2007
13 juil. 2006 à 11:10
merci
quel office utilises tu car j'ai un programme qui tourne avec de l'exportation de données vers excel et j'ai des probleme de libération de mémoire et j'ai l'impression que office 97 et xp pro ne font pas bon ménages.
Utilisateur anonyme
13 juil. 2006 à 10:52
Salut il suffit d'ajouter excel en référence, mais moi dans mon code je suis obligé d'ajouter microsoft.office.interop par ce que je travail avec VB2005 Express Edition. Selon ce que tu utilise comme programme, après avoir mis excel en référence, tu n'est pas obligé de le mettre.
Par exemple: Dim appxls as Excel.Application suffit.
TOTOCHITO Messages postés 63 Date d'inscription lundi 13 septembre 2004 Statut Membre Dernière intervention 16 novembre 2007
13 juil. 2006 à 10:39
merci beaucoup pour ces exemples de code.
petite question quelle reference ajoutes tu pour faire référence à
microsoft.office.interop.excel.application

Je travaille avec office 97 et je n'arrive pas à trouver la librairie à charger
Rejoignez-nous