Afficher dans une cellule excel a partir d'une textbox avec décalage

Résolu
cs_Loic34000 Messages postés 27 Date d'inscription mardi 11 mars 2008 Statut Membre Dernière intervention 6 juin 2008 - 17 mars 2008 à 10:17
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 - 27 mars 2008 à 02:18
Bonjour a tous,

Je suis débutant en visual basic 6 et j'ai des difficultés a terminer mon programme comme je le desire, mon programme est assez simple il contient un bouton avec une zone de texte.
Lorsque je clique sur le boutton je fait afficher l'heure et la date du système dans la zone de texte puis j'ouvre une feuille excel afin de l'enregistrer.
Mon problème est d'enregistrer l'heure et la date a chaque clic dans une cellule differente (A1, A2, A3...) et non a chaque fois reécrire par dessus la précedement sauvegarder.

Voila un morceau de mon programme :
' Commande simulant le transfert d'un Kwh.
Private Sub CmdTransfert_Click()
Text1 = "Transfert d'un Kwh au réseau"
Text2.Text = Format(Now, "dd/mm/yyyy hh:mm:ss")
    
Dim oExcel As Excel.Application
Dim oWk As Workbook
    Set oExcel = CreateObject("Excel.Application")
    oExcel.Visible = True 'Affiche l'application excel.
    Set oWk = oExcel.Workbooks.Add
    'rajoute Text2 (la date et heure actuelle du transfert) en Feuil1 cellule A1.
    oWk.Sheets(1).Range("A1") = Text2
    'Sauve le classeur.
    oExcel.DisplayAlerts = False ' Pour éviter des questions si classeur déjà existant.
    oWk.SaveAs App.Path & "\MonClasseur.xls"
    oWk.Close False 'Ferme le classeur.
    oExcel.Quit 'quitte excel.
    Set oWk = Nothing
    Set oExcel = Nothing 'libération mémoire.


End Sub

Si quelqu'un aurait une idée...

Merci d'avance

14 réponses

cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 21
27 mars 2008 à 02:18
Ici, le problème est différent puisque oWk n'a pas été initialisé.

Soit tu mets
    Set oWk = ActiveWorkbook
    LigneVide = oWk.Sheets(1).Cells(Rows.Count, "A").End(xlUp).Row + 1

Soit tu mets
    LigneVide = ActiveWorkBook.Sheets(1).Cells(Rows.Count, "A").End(xlUp).Row + 1

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
3
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 21
17 mars 2008 à 10:27
Ceci est pour déterminer la première ligne vide en colonne A

LigneVide = oWk.Sheets(1).Cells(Rows.Count, "A").End(xlUp).Row + 1
   oWk.Sheets(1).Range("A" & LigneVide) = Text2

Maintenant, dans ton code, il ne faut pas créer un nouveau classeur à chaque fois que tu passes par ta procédure. Sinon, tu enregistres par-dessus l'ancien classeur et tu perds tes données précédentes...

Plutôt que
oExcel.Workbooks.Add
utilise Workbooks.Open App.Path & "\MonClasseur.xls"

Tu peux utiliser Dir pour vérifier s'il existe avant de l'ouvrir. S'il n'existe pas, à ce moment-là tu peux le créer avec Add comme tu le fais.

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
cs_Loic34000 Messages postés 27 Date d'inscription mardi 11 mars 2008 Statut Membre Dernière intervention 6 juin 2008
18 mars 2008 à 10:43
Salut a tous,

J'ai essayé la solution proposée par MPI, le programme à l'air de vouloir fonctionner mais fini par afficher un message d'erreur :

Erreur d'execution 1004
La methode 'Sheets' de l'objet global a échoué.

Voila le morceaux de mon prog qui me pose problème :

' Commande simulant le transfert d'un Kwh.
Private Sub CmdTransfert_Click()
Text1 = "Transfert d'un Kwh au réseau"
Text2.Text = Format(Now, "dd/mm/yyyy hh:mm:ss")
    
Dim oExcel As Excel.Application
Dim owk As Workbook
Dim lignevide As Object
Set lignevide = Sheets(1) 


    Set oExcel = CreateObject("Excel.Application")
    Workbooks.Open App.Path & "\MonClasseur.xls"
    'rajoute Text2 (la date et heure actuelle du transfert) en Feuille 1 cellule A1.
    lignevide = owk.Sheets(1).Cells(Rows.Count, "A").End(xlUp).Row + 1
    owk.Sheets(1).Range("A" & lignevide) = Text2
    'Sauve le classeur.
    oExcel.DisplayAlerts = False ' Pour éviter des questions si classeur déjà existant.
    owk.SaveAs App.Path & "\MonClasseur.xls"
    owk.Close False 'Ferme le classeur.
    oExcel.Quit 'quitte excel.
    Set owk = Nothing
    Set oExcel = Nothing 'libération mémoire.


End Sub

Je ne comprend pas pourquoi il affiche cette erreur.
Si quelqu'un aurait une idée.

Merci.
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 21
18 mars 2008 à 11:28
<strike>Dim lignevide As Object
</strike>


<strike>Set lignevide = Sheets(1)</strike>





Dim LigneVide As Long
LigneVide = oWk.Sheets(1).Cells(Rows.Count, "A").End(xlUp).Row + 1

On recherche un  numéro de ligne, donc pas nécessaire de déclarer un objet

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0

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

Posez votre question
cs_Loic34000 Messages postés 27 Date d'inscription mardi 11 mars 2008 Statut Membre Dernière intervention 6 juin 2008
19 mars 2008 à 10:41
Salut MPI,

j'ai un problème avec cette ligne de code :  

LigneVide = oWk.Sheets(1).Cells(Rows.Count, "A").End(xlUp).Row + 1

Lorsque je lance mon application un message d'erreur apparait :

Erreur d'execution 91 :
Variable objet ou variable bloc with non definie

Comment faire pour definir cette maudite variable ?
Si quelqu'un pourrait m'aider svp

Merci
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 21
19 mars 2008 à 10:43
Quelle version d'Excel utilises-tu ? est-ce 2007 ?

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
cs_Loic34000 Messages postés 27 Date d'inscription mardi 11 mars 2008 Statut Membre Dernière intervention 6 juin 2008
19 mars 2008 à 11:19
oui c'est bien excel 2007 que j'utilise
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 21
19 mars 2008 à 11:31
Tu dois changer la constante xlUp par autre chose, mais je ne me rappelle plus ce que c'est... Je n'ai pas 2007...

Mais si tu regardes les constantes associées à END, tu devrais trouver.

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
cs_Loic34000 Messages postés 27 Date d'inscription mardi 11 mars 2008 Statut Membre Dernière intervention 6 juin 2008
19 mars 2008 à 16:27
Je cherche par quoi remplacer la constante xlUp pour excel 2007 mais en vain. Aurait-tu une idée est ce dans VB6 ou plutôt dans Excel que je peut trouver ca ?
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 21
19 mars 2008 à 21:54
Dans l'aide d'Excel

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 21
19 mars 2008 à 22:00
Tu pourrais aussi essayer en passant par l'enregistreur de macro.

Place le curseur à quelque part en bas des données
Démarre l'enregistreur
Puis presse Ctrl et flèche haut

Tu vas voir comment ta version traduit le xlUp

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 21
21 mars 2008 à 22:05
Si tu as trouvé la constante ou la manière de faire, inscrit la réponse pour aider ceux qui viendrait lire ce message... et accepte ta réponse (petit bouton)

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
cs_Loic34000 Messages postés 27 Date d'inscription mardi 11 mars 2008 Statut Membre Dernière intervention 6 juin 2008
25 mars 2008 à 10:39
Salut MPI,

Je n'ai pas réussi a trouver la constante pour Excel 2007 mais l'application fonctionne sur le PC de mon labo ou ils ont excel 2003, je continu a chercher pour qu'il fonctionne aussi sur mon PC dès que je trouve je le mettrai sur le forum.
0
cs_Loic34000 Messages postés 27 Date d'inscription mardi 11 mars 2008 Statut Membre Dernière intervention 6 juin 2008
27 mars 2008 à 00:44
Salut MPI,

J'ai intallé Excel 2003 de manière à ce que l'application que j'ai réalisé fonctionne sur mon PC mais j'ai le problème avec l'erreur 91qui revient, elle provient toujours de la même ligne à savoir :

Commande simulant le transfert d'un Kwh.
Private Sub CmdTransfert_Click()
Text1 = "Transfert d'un Kwh au réseau"
Text2.Text = Format(Now, "dd/mm/yyyy hh:mm:ss")
    
Dim oExcel As Excel.Application
Dim oWk As Workbook
Dim LigneVide As Long


    Set oExcel = CreateObject("Excel.Application")
    oExcel.Visible = True 'Affiche l'application excel.
    Workbooks.Open App.Path & "\MonClasseur.xls"
    LigneVide = oWk.Sheets(1).Cells(Rows.Count, "A").End(xlUp).Row + 1
    oWk.Sheets(1).Range("A" & LigneVide) = Text2
    'Sauve le classeur.
    oExcel.DisplayAlerts = False ' Pour éviter des questions si classeur déjà existant.
    oWk.SaveAs App.Path & "\MonClasseur.xls"
    oWk.Close False 'Ferme le classeur.
    oExcel.Quit 'quitte excel.
    Set oWk = Nothing
    Set oExcel = Nothing 'libération mémoire.

Je n'y comprend plus rien, on dirai que c'est une erreur de ma part ou un oublie par rapport à une réference qu'un problème de version d'excel (2003 ou 2007) .

 Je ne sais pas comment faire pour résoudre ce problème
Si quelqu'un aurait une idée
Merci d'avance.
0