begin process at 2008 09 05 10:07:13
1 237 131 membres
94 nouveaux aujourd'hui
14 312 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

CODE PERMETTANT DE MANIPULER LES OBJETS EXCEL EN .NET


Information sur la source

Catégorie :Tutoriaux Source .NET ( DotNet ) Classé sous : excel, classeur, feuille Niveau : Débutant Date de création : 12/07/2006 Date de mise à jour : 27/11/2006 17:35:09 Vu : 21 450

Note :
9,14 / 10 - par 7 personnes
9,14 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (40)
Ajouter un commentaire et/ou une note


Description

Le code montre juste les grandes lignes de la manipulation d'une application Excel.

Source

  • 'En complément de la source:
  • 'http://www.vbfrance.com/codes/OUVERTURE-APPLICATION-EXCEL-AVEC-OPENFILEDIALOG-VUE-MANIPULER-APPLICATION_38376.aspx
  • 'Après avoir ouvert l'application excel voici quelques exemple de code
  • ' qui permettent de travailler dans le classeur
  • Dim appxls As Microsoft.Office.Interop.Excel.Application
  • Dim sheet As Microsoft.Office.Interop.Excel.Workbook
  • Sub ModifFichierExcel()
  • appxls = New Microsoft.Office.Interop.Excel.Application
  • appxls.Visible = True
  • 'Ajouter un nouveau classeur
  • appxls.Workbooks.Add()
  • 'Enregistrer sous le classeur
  • appxls.ActiveWorkbook.SaveAs("C:\NouveauClasseur")
  • 'Enregistrer
  • appxls.ActiveWorkbook.Save()
  • 'Selectionner une feuille
  • appxls.ActiveWorkbook.Worksheets("Feuil1").Select()
  • 'Renommer une feuille
  • appxls.ActiveWorkbook.Worksheets("Feuil1").Name = "NouveauNom"
  • 'Ajouter une feuille après la dernière feuille
  • appxls.Worksheets.Add(After:=appxls.Worksheets(appxls.Worksheets.Count))
  • 'Et la renommer
  • appxls.ActiveSheet.Name = "NouveauNom2"
  • 'Ranger une valeur dans une cellule sans que le feuille et la cellule de destination ne soient sélectionnées
  • Dim value As String = "valeur"
  • appxls.ActiveWorkbook.Worksheets("NouveauNom").Range("A1").Value = value
  • 'Récupérer la valeur d'une cellule
  • value = appxls.ActiveWorkbook.Worksheets("NouveauNom").Range("A1").Value
  • 'Mettre une formule dans une cellule
  • appxls.ActiveWorkbook.Worksheets("NouveauNom").Range("A1").Formula = "=A2+A3"
  • 'Arrondir une valeur pour la mettre dans une cellule
  • Dim value1 As Decimal = 6.55957
  • appxls.ActiveWorkbook.Worksheets("NouveauNom").Range("A1").Value = Decimal.Round(value1, 2)
  • 'Sélectionner une cellule
  • sheet = appxls.ActiveWorkbook.Worksheets("NouveauNom")
  • sheet.Activate()
  • sheet.Cells(1, 1).Select()
  • 'ou
  • sheet.Range("A2").Select()
  • 'Sélectionner une plage de cellule
  • sheet = appxls.ActiveWorkbook.Worksheets("NouveauNom")
  • sheet.Activate()
  • sheet.Range("A2:C10").Select()
  • 'Sélectionner plusieurs cellues
  • sheet = appxls.ActiveWorkbook.Worksheets("NouveauNom")
  • sheet.Activate()
  • sheet.Range("A2;C10;D12").Select()
  • 'Copier une cellule
  • sheet.Range("A1").Copy()
  • 'Couper une cellule
  • sheet.Range("A1").Cut()
  • 'Coler la cellule
  • sheet.Range("A2").PasteSpecial()
  • 'PasteSpecial: si pas d'argument fait un collage normal
  • 'sinon on peut définir des agrgument tel que coller la mise en forme, la valeur...
  • 'Supprimer une ligne
  • sheet.Rows(1).delete()
  • 'Supprimer une colonne
  • sheet.Columns(1).delete()
  • 'Recopie automatique de formule et autre
  • Dim xlFillDefault As Microsoft.Office.Interop.Excel.XlAutoFillType
  • sheet.Range("A8:A9").Select()
  • sheet.Range("A8:A9").AutoFill(Destination:=sheet.Range("A8:A20"), Type:=xlFillDefault)
  • 'imprimer un feuille
  • appxls.ActiveWorkbook.Worksheets("NouveauNom").Activate()
  • appxls.ActiveWindow.SelectedSheets.PrintOut()
  • 'imprimer un feuille en passant par l'aperçu avant impression
  • appxls.ActiveWorkbook.Worksheets("NouveauNom").Activate()
  • appxls.ActiveWindow.SelectedSheets.PrintPreview()
'En complément de la source:
    'http://www.vbfrance.com/codes/OUVERTURE-APPLICATION-EXCEL-AVEC-OPENFILEDIALOG-VUE-MANIPULER-APPLICATION_38376.aspx
    'Après avoir ouvert l'application excel voici quelques exemple de code
    ' qui permettent de travailler dans le classeur

    Dim appxls As Microsoft.Office.Interop.Excel.Application
    Dim sheet As Microsoft.Office.Interop.Excel.Workbook

    Sub ModifFichierExcel()

        appxls = New Microsoft.Office.Interop.Excel.Application
        appxls.Visible = True

        'Ajouter un nouveau classeur
        appxls.Workbooks.Add()

        'Enregistrer sous le classeur
        appxls.ActiveWorkbook.SaveAs("C:\NouveauClasseur")

        'Enregistrer
        appxls.ActiveWorkbook.Save()

        'Selectionner une feuille
        appxls.ActiveWorkbook.Worksheets("Feuil1").Select()

        'Renommer une feuille
        appxls.ActiveWorkbook.Worksheets("Feuil1").Name = "NouveauNom"

        'Ajouter une feuille après la dernière feuille
        appxls.Worksheets.Add(After:=appxls.Worksheets(appxls.Worksheets.Count))
        'Et la renommer
        appxls.ActiveSheet.Name = "NouveauNom2"

        'Ranger une valeur dans une cellule sans que le feuille et la cellule de destination ne soient sélectionnées
        Dim value As String = "valeur"
        appxls.ActiveWorkbook.Worksheets("NouveauNom").Range("A1").Value = value

        'Récupérer la valeur d'une cellule
        value = appxls.ActiveWorkbook.Worksheets("NouveauNom").Range("A1").Value

        'Mettre une formule dans une cellule
        appxls.ActiveWorkbook.Worksheets("NouveauNom").Range("A1").Formula = "=A2+A3"

        'Arrondir une valeur pour la mettre dans une cellule
        Dim value1 As Decimal = 6.55957
        appxls.ActiveWorkbook.Worksheets("NouveauNom").Range("A1").Value = Decimal.Round(value1, 2)

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

        'Sélectionner une plage de cellule
        sheet = appxls.ActiveWorkbook.Worksheets("NouveauNom")
        sheet.Activate()
        sheet.Range("A2:C10").Select()

        'Sélectionner plusieurs cellues
        sheet = appxls.ActiveWorkbook.Worksheets("NouveauNom")
        sheet.Activate()
        sheet.Range("A2;C10;D12").Select()

        'Copier une cellule
        sheet.Range("A1").Copy()

        'Couper une cellule
        sheet.Range("A1").Cut()

        'Coler la cellule
        sheet.Range("A2").PasteSpecial()
        'PasteSpecial: si pas d'argument fait un collage normal
        'sinon on peut définir des agrgument tel que coller la mise en forme, la valeur...

        'Supprimer une ligne
        sheet.Rows(1).delete()

        'Supprimer une colonne
        sheet.Columns(1).delete()

        'Recopie automatique de formule et autre
        Dim xlFillDefault As Microsoft.Office.Interop.Excel.XlAutoFillType
        sheet.Range("A8:A9").Select()
        sheet.Range("A8:A9").AutoFill(Destination:=sheet.Range("A8:A20"), Type:=xlFillDefault)

        'imprimer un feuille
        appxls.ActiveWorkbook.Worksheets("NouveauNom").Activate()
        appxls.ActiveWindow.SelectedSheets.PrintOut()

        'imprimer un feuille en passant par l'aperçu avant impression
        appxls.ActiveWorkbook.Worksheets("NouveauNom").Activate()
        appxls.ActiveWindow.SelectedSheets.PrintPreview()
27 novembre 2006 17:35:09 :
.
  • signaler à un administrateur
    Commentaire de TOTOCHITO le 13/07/2006 10:39:15

    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

  • signaler à un administrateur
    Commentaire de Drikce06 le 13/07/2006 10:52:57

    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.

  • signaler à un administrateur
    Commentaire de TOTOCHITO le 13/07/2006 11:10:57

    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.

  • signaler à un administrateur
    Commentaire de Drikce06 le 13/07/2006 11:26:29

    J'ai office 2003 sur xp pro sp2

  • signaler à un administrateur
    Commentaire de TOTOCHITO le 13/07/2006 11:34:50

    Merci pour tes renseignements bonne contination

  • signaler à un administrateur
    Commentaire de jimmy69 le 13/07/2006 13:13:43

    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

  • signaler à un administrateur
    Commentaire de Drikce06 le 13/07/2006 14:39:03

    Merci ça fait plaisir

  • signaler à un administrateur
    Commentaire de mortalino le 14/07/2006 01:04:39

    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

  • signaler à un administrateur
    Commentaire de Drikce06 le 17/07/2006 13:06:49

    Salut mortalino, c'est possible de changer?

  • signaler à un administrateur
    Commentaire de 76cacash le 16/08/2006 13:30:46

    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

  • signaler à un administrateur
    Commentaire de stekiyeki le 06/10/2006 09:26:33

    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.

  • signaler à un administrateur
    Commentaire de Drikce06 le 06/10/2006 09:48:54

    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.

  • signaler à un administrateur
    Commentaire de stekiyeki le 06/10/2006 09:59:54

    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.
            

  • signaler à un administrateur
    Commentaire de jimmy69 le 17/10/2006 14:39:55

    salut salut,

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

    Je vous remercie
    Christophe

  • signaler à un administrateur
    Commentaire de Drikce06 le 17/10/2006 14:45:02

    Salut normalement ça devrait être ça :
    sheet.Range("A1:A3").Merge()

  • signaler à un administrateur
    Commentaire de jimmy69 le 17/10/2006 16:04:20

    salut drikce06,

    cool ca fonctionne !

    merci et bonne fin de journée
    christophe
    un bouillonnais

  • signaler à un administrateur
    Commentaire de billoux70 le 22/01/2007 10:48:27

    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)

  • signaler à un administrateur
    Commentaire de mortalino le 25/01/2007 06:31:32

    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

    @++

  • signaler à un administrateur
    Commentaire de billoux70 le 25/01/2007 13:11:58

    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.

  • signaler à un administrateur
    Commentaire de Drikce06 le 25/01/2007 13:16:55

    Salut il faut ajouter la référence microsoft excel.

  • signaler à un administrateur
    Commentaire de billoux70 le 25/01/2007 13:32:18

    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

    @@@+

  • signaler à un administrateur
    Commentaire de AVI17 le 23/02/2007 11:28:47

    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

  • signaler à un administrateur
    Commentaire de Drikce06 le 23/02/2007 11:32:03

    Salut Cells(2,2) normalement

  • signaler à un administrateur
    Commentaire de AVI17 le 23/02/2007 22:26:02

    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

  • signaler à un administrateur
    Commentaire de Jo_Pistol le 10/07/2007 06:18:47

    salut

    Est-il possible de generer un graph, a partir d'une table?
    merci

  • signaler à un administrateur
    Commentaire de Bat007 le 16/07/2007 17:42:03

    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.

  • signaler à un administrateur
    Commentaire de Cacou99 le 25/07/2007 17:08:49

    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

  • signaler à un administrateur
    Commentaire de Renfield le 25/07/2007 17:10:06 administrateur CS

    voir dans l'aide VBA d'excel...

  • signaler à un administrateur
    Commentaire de mortalino le 25/07/2007 17:13:58

    ... ou dans l'explorateur d'objets (F2)

  • signaler à un administrateur
    Commentaire de abdeljawad86 le 12/08/2007 16:41:22

    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

  • signaler à un administrateur
    Commentaire de saku28 le 05/10/2007 14:01:02

    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?

  • signaler à un administrateur
    Commentaire de mitsh666 le 17/10/2007 16:47:25

    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?

  • signaler à un administrateur
    Commentaire de mitsh666 le 18/10/2007 09:06:23

    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

  • signaler à un administrateur
    Commentaire de BLU le 07/11/2007 14:13:02

    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.

  • signaler à un administrateur
    Commentaire de XofA le 06/01/2008 14:15:32

    BLU,

    une feuille de ton classeur Excel doit porter le nom 'NouveauNom', as-tu vérifer ?

  • signaler à un administrateur
    Commentaire de BLU le 19/02/2008 20:43:27

    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

  • signaler à un administrateur
    Commentaire de wammaw le 04/05/2008 08:46:30

    '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]

  • signaler à un administrateur
    Commentaire de diampa le 22/06/2008 10:47:33

    ton code est bien clair mais comment faire pour selectionner 2 feuilles en même temps

  • signaler à un administrateur
    Commentaire de BLU le 22/06/2008 23:00:32

    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

  • signaler à un administrateur
    Commentaire de crownstud le 01/07/2008 09:42:15

    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.

Ajouter un commentaire

Pub



Appels d'offres

Recherche developpeur ...
Budget : 700€
SITE MARCHAND LOCATION...
Budget : 3 000€
SITE MARCHAND POUR HOTEL
Budget : 4 000€

CalendriCode

Septembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
2930     

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS