Créer une fonction sous VB2008 qui permet de créer, ouvrir et écrir dans un fich

saimyas Messages postés 10 Date d'inscription jeudi 7 avril 2011 Statut Membre Dernière intervention 19 mai 2011 - 7 avril 2011 à 16:01
cs_atot Messages postés 9 Date d'inscription vendredi 8 février 2008 Statut Membre Dernière intervention 26 mai 2011 - 26 mai 2011 à 17:48
Bonjour tout le monde (je m'excuse si c'est pas le bon emplacement pour poser ma question car je suis nouvelle sur ce forum...)

Tout d'abord je tiens à remercier toute personne qui s'interesse à lire ma question posé et je serai reconnaissante à ceux qui peuvent m'apporter de l'aide... :)

Donc j'ai un programme écrit sous VB6 qui permet de déclarer une fonction Excel pour créer un fichier Excel et l'utiliser dans le reste du code et pouvoir enregistrer les résultat de la simulation d'un logiciel dans ce fichier (le fichier excel active dans le bureau).

Voici le code de la fonction sous VB6:

Function StartExcel(file_name As String)

Dim Excel

On Error Resume Next

Set Excel = New Excel.Application
Application.DisplayAlerts = False


Workbooks.Add
ActiveWorkbook.SaveAs FileName:=file_name _
, FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False

Application.DisplayAlerts = True

Excel.Visible = True

Workbook.Select
Sheets(1).Select
Cells.Clear


End Function

Ce code marche à merveille sous VB6 par contre la migration du code vers Visual Basic 2008 montre qu'il y a des erreurs... Tél que la fonction n'est pas pris en compte par le reste du code, donc il faut redefinir Excel (comme si ont le crée de nouveau) ce qui menne à la création de plusieurs fichiers excel à l'execution du programme alors que j'ai besoin d'un seul...

Svp j'attend avec impatience votre aide pour avancer...

Je vous Remercie vivement :)

24 réponses

cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
7 avril 2011 à 17:27
Bonjour,
Pour créer un fichier Excel et l'ouvrir il y a ce code tout simple

  Dim ApExcel As Object
        ApExcel = CreateObject("Excel.application") 'creer un objet
        ApExcel.Visible = True ' vous pouvez voir Excel
        ApExcel.Workbooks.Add() 'Ajoute un nouveau classeur.


Sinon voici ta fonction corrigé

 Function StartExcel(ByVal file_name As String)
        On Error Resume Next

        Dim ApExcel As Object
        ApExcel = CreateObject("Excel.application") 'creer un objet

        ApExcel.Application.DisplayAlerts = False

        ApExcel.Workbooks.Add() 'Ajoute un nouveau classeur.

        ApExcel.ActiveWorkbook.SaveAs(FileName:=file_name _
        , FileFormat:=ApExcel.xlNormal, Password:="", WriteResPassword:="", _
         ReadOnlyRecommended:=False, CreateBackup:=False)

        ApExcel.Application.DisplayAlerts = True

        ApExcel.Visible = True ' vous pouvez voir Excel

        ApExcel.Workbook.Select()
        ApExcel.Sheets(1).Select()
        ApExcel.Cells.Clear()

    End Function


et pour l'appeler

 StartExcel("chemin du Classeur1.xls")



@+ Le Pivert
0
Skalipanovich Messages postés 4 Date d'inscription vendredi 11 mars 2011 Statut Membre Dernière intervention 8 avril 2011
8 avril 2011 à 10:54
SVP donnée moi un coud main pour harger des donnee a partir d'une dataset a un datagrid en language wpf ( control wpf )
0
Skalipanovich Messages postés 4 Date d'inscription vendredi 11 mars 2011 Statut Membre Dernière intervention 8 avril 2011
8 avril 2011 à 10:58

                
0
saimyas Messages postés 10 Date d'inscription jeudi 7 avril 2011 Statut Membre Dernière intervention 19 mai 2011
11 avril 2011 à 09:04
Bonjour tout le monde,

Je vous remercie viement Le Pivert, je vais essayer le code proposé.

Bon début de semaine

Saimyas
0

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

Posez votre question
saimyas Messages postés 10 Date d'inscription jeudi 7 avril 2011 Statut Membre Dernière intervention 19 mai 2011
11 avril 2011 à 10:21
Re bonjour

Le problème c'est que quand j'appelle la fonction pour pouvoir écrir dans le fichier Excel en écrivant le code suivant:

StartExcel (Chemin du dossier)

Excel.ActiveWorkbook.worksheets("Sheet1").Cells(1, 1).Value = "Saimyas"

Le programme ne marche plus...

:(

Saimyas
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
11 avril 2011 à 10:54
Essaie ceci

 Function StartExcel(ByVal file_name As String)
        On Error Resume Next

        Dim ApExcel As Object
        ApExcel = CreateObject("Excel.application") 'creer un objet

        ApExcel.Application.DisplayAlerts = False

        ApExcel.Workbooks.Add() 'Ajoute un nouveau classeur.

        ApExcel.ActiveWorkbook.SaveAs(FileName:=file_name _
        , FileFormat:=ApExcel.xlNormal, Password:="", WriteResPassword:="", _
         ReadOnlyRecommended:=False, CreateBackup:=False)

        ApExcel.Application.DisplayAlerts = True

        ApExcel.Visible = True ' vous pouvez voir Excel

        ApExcel.Workbook.Select()
        ApExcel.Sheets(1).Select()
        ApExcel.Cells.Clear()
        ApExcel.Sheets(1).Cells(1, 1).Value = "Saimyas"
    End Function
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
11 avril 2011 à 11:32
Rectification, tu mets ceci dans ton appel de fonction:

 Dim ApExcel As Object
        ApExcel = CreateObject("Excel.application") 'creer un objet
        StartExcel(Chemin du fichier.xls")
        ApExcel.Sheets(1).Cells(1, 1).Value = "Saimyas"


Il faut toujours créer un objet

Le Pivert
0
saimyas Messages postés 10 Date d'inscription jeudi 7 avril 2011 Statut Membre Dernière intervention 19 mai 2011
11 avril 2011 à 12:02
Ah dac, mais si à chaque fois je crée un documents Excel quand j'appelle la fonction j'aurais plusisieurs fichier, alors que je veux enregistrer les données dans un meme fichier.

Pour bien expliquer, au début je crée la fonction qui crée Excel et après avoir mis le reste du code (d'autres fonction de calcul) je souhaite appeler la meme fonction excel pour qu'elle m'enregistre les resultats dans le meme fichier dèja ouvert.

Je vous Remercie Le Pivert et je m'excuse pour mes questions
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
11 avril 2011 à 15:41
Je te propose ceci à mettre dans un bouton:

 Dim ApExcel As Object
        ApExcel = CreateObject("Excel.application") 'creer un objet
        ApExcel.Visible = True ' vous pouvez voir Excel
        ApExcel.Workbooks.Open(Filename:="chemin du classeur.xls") 'on ouvre le classeur
        ApExcel.Sheets(1).Cells(1, 1).Value = "Saimyas" 'on écrit dans le classeur
        ApExcel.ActiveWorkbook.SaveAs(Filename:= _
         "Chemin du classeur.xls", _
          Password:="", WriteResPassword:="", ReadOnlyRecommended:= _
         False, CreateBackup:=False) 'on enregistre le classeur
        ApExcel.ActiveWorkbook.Close() 'on ferme le classeur
        ApExcel.Visible = False 'on ferme Excel
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
11 avril 2011 à 17:39
Voici une fonction qui je pense devrait répondre à tes besoins:

Function WriteExcel(ByVal file_name As String, ByVal name As String)
        Dim ApExcel As Object
        ApExcel = CreateObject("Excel.application") 'creer un objet
        ApExcel.Visible = True ' vous pouvez voir Excel
        ApExcel.Workbooks.Open(Filename:=file_name) 'on ouvre le classeur
        ApExcel.Sheets(1).Cells(1, 1).Value = name 'on écrit dans le classeur
        ApExcel.ActiveWorkbook.SaveAs(Filename:= _
         file_name, _
          Password:="", WriteResPassword:="", ReadOnlyRecommended:= _
         False, CreateBackup:=False) 'on enregistre le classeur
        ApExcel.ActiveWorkbook.Close() 'on ferme le classeur
        ApExcel.Visible = False 'on ferme Excel
        Return file_name
        Return name
    End Function
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim ApExcel As Object
        ApExcel = CreateObject("Excel.application") 'creer un objet
        WriteExcel("Chemin du fichier.xls", "Saimyas")
    End Sub
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
11 avril 2011 à 18:56
Voici les 2 fonctions, tu choisiras:

Function StartExcel(ByVal file_name As String, ByVal name As String)
        On Error Resume Next
        Dim ApExcel As Object
        ApExcel = CreateObject("Excel.application") 'creer un objet
        ApExcel.Application.DisplayAlerts = False
        ApExcel.Workbooks.Open(Filename:= _
               file_name)
        ApExcel.ActiveWorkbook.SaveAs(FileName:=file_name _
        , FileFormat:=ApExcel.xlNormal, Password:="", WriteResPassword:="", _
         ReadOnlyRecommended:=False, CreateBackup:=False)
        ApExcel.Application.DisplayAlerts = True
        ApExcel.Visible = True ' vous pouvez voir Excel
        ApExcel.Workbook.Select()
        ApExcel.Sheets(1).Select()
        ApExcel.Cells.Clear()
        ApExcel.Sheets(1).Cells(1, 1).Value = name
        Return file_name
        Return name
    End Function

    Function WriteExcel(ByVal file_name As String, ByVal name As String)
        Dim ApExcel As Object
        ApExcel = CreateObject("Excel.application") 'creer un objet
        ApExcel.Application.DisplayAlerts = False
        ApExcel.Visible = True ' vous pouvez voir Excel
        ApExcel.Workbooks.Open(Filename:=file_name) 'on ouvre le classeur
        ApExcel.Sheets(1).Cells(1, 1).Value = name 'on écrit dans le classeur
        ApExcel.ActiveWorkbook.SaveAs(Filename:= _
         file_name, _
          Password:="", WriteResPassword:="", ReadOnlyRecommended:= _
         False, CreateBackup:=False) 'on enregistre le classeur
        ApExcel.Application.DisplayAlerts = True
        ApExcel.ActiveWorkbook.Close() 'on ferme le classeur
        ApExcel.Visible = False 'on ferme Excel
        Return file_name
        Return name
    End Function

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        StartExcel("chemin du fichier.xls", "Saimyas")
 End Sub

 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        WriteExcel("chemin du fichier.xls", "Saimyas")
 End Sub





@+ Le Pivert
0
saimyas Messages postés 10 Date d'inscription jeudi 7 avril 2011 Statut Membre Dernière intervention 19 mai 2011
19 avril 2011 à 13:30
Bonjour Le PIVERT,

Je vous remercie vivement pour votre aide précieuse.

Bien cordialement

Saimyas
0
chaibika Messages postés 5 Date d'inscription mardi 20 mai 2008 Statut Membre Dernière intervention 22 avril 2011
22 avril 2011 à 01:17
 dtr = dts.Tables("Enseignant").NewRow >> erreur  est reference d'objet n'est pas définie à une instance d'objet >>
        dtr("Nom") = Me.Nomc.Text
        dtr("Prenom") = Me.Prenomc.Text
        dtr("id") = Me.id.Text
        dtr("Télé") = Me.tele.Text
        dtr("Adresse") = Me.Adressec
        dts.Tables("Enseignant").Rows.Add(dtr)
        'Pour modifier les valeurs changées dans le DataAdapter
        cmdb = New OleDbCommandBuilder(dta)
        'Mise à jour
        dta.Update(dts, "Enseignant")
        'On vide le DataSet et on le 'recharge' de nouveau.
        dts.Clear()
        dta.Fill(dts, "Enseignant")
        dtt = dts.Tables("Enseignant")
0
cs_atot Messages postés 9 Date d'inscription vendredi 8 février 2008 Statut Membre Dernière intervention 26 mai 2011
25 mai 2011 à 15:03
Bonjour

Moi je galere c'est pour aller à la ligne à chaque fois si qq à une idée
Merci par avance
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
25 mai 2011 à 17:38
chaibika ,atot,skalipanivitch

ça ne serait pas mieux si chacun postait
sa question dans un différent post

http://www.vbfrance.com/reglement.aspx
0
cs_atot Messages postés 9 Date d'inscription vendredi 8 février 2008 Statut Membre Dernière intervention 26 mai 2011
26 mai 2011 à 09:30
ShayW

Si tu lis le post ce n'est qu'une suite logique !!!!!! Pourquoi refaire un post pour me renvoyer vers ce lien ......
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
26 mai 2011 à 10:35
Pour aller à la ligne en vba

"Voici un code" _
& vbNewLine & "pour aller" _
& vbNewLine & "à la ligne" _

Le Pivert
0
cs_atot Messages postés 9 Date d'inscription vendredi 8 février 2008 Statut Membre Dernière intervention 26 mai 2011
26 mai 2011 à 11:23
Merci pour ta reponse le Pivert

ça marche pas

je m'explique mon code tourne sous vb 2008. J'ai des resultats qui s'affiche dans des text box, je les copies correctment dans mon fichier ecel mais impossible d'aller à la ligne . Toutes mes donnes se copient à la suite .Voici le code

Dim ApExcel As Object
Dim i As Integer


ApExcel = CreateObject("Excel.application")
ApExcel.Workbooks.Open(Filename:="c:\fichier.xls")

For i = 1 To 1

ApExcel.Sheets(1).cells(i, 1).Value = (Now)
ApExcel.Sheets(1).Cells(i, 2).Value = (L_Nom_Campagne.Text)
ApExcel.Sheets(1).Cells(i, 3).Value = (L_cadence.Text)
ApExcel.Sheets(1).Cells(i, 4).Value = (L_Compteur.Text)

Next
i = i + 1


J'ai du mal faire ma boucle je tourne en rond si qq à une idée
Merci
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
26 mai 2011 à 11:53
Essaie ceci:

 Dim ApExcel As Object
        Dim i As Integer


        ApExcel = CreateObject("Excel.application")
        ApExcel.Workbooks.Open(Filename:="chemin du classeur.xls")

        For i = 1 To 1

            ApExcel.Sheets(1).cells(i, 1).Value = Now
            ApExcel.Sheets(1).Cells(i, 2).Value = L_Nom_Campagne.Text
            ApExcel.Sheets(1).Cells(i, 3).Value = L_cadence.Text
            ApExcel.Sheets(1).Cells(i, 4).Value = L_Compteur.Text

        Next

Tu n'étais pas loin
Bonne programmation


Le Pivert
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
26 mai 2011 à 12:00
Erreur il faut lire

 Dim ApExcel As Object
        Dim i As Integer


        ApExcel = CreateObject("Excel.application")
        ApExcel.Workbooks.Open(Filename:="chemin du classeur.xls")

        For i = 1 To 1
            i = i + 1
            ApExcel.Sheets(1).cells(i, 1).Value = Now
            ApExcel.Sheets(1).Cells(i, 2).Value = L_Nom_Campagne.Text
            ApExcel.Sheets(1).Cells(i, 3).Value = L_cadence.Text
            ApExcel.Sheets(1).Cells(i, 4).Value = L_Compteur.Text

        Next





Le Pivert
0
Rejoignez-nous