Afficher dans une cellule excel a partir d'une textbox avec décalage [Résolu]

Signaler
Messages postés
27
Date d'inscription
mardi 11 mars 2008
Statut
Membre
Dernière intervention
6 juin 2008
-
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
-
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

Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
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
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
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
Messages postés
27
Date d'inscription
mardi 11 mars 2008
Statut
Membre
Dernière intervention
6 juin 2008

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.
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
<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
Messages postés
27
Date d'inscription
mardi 11 mars 2008
Statut
Membre
Dernière intervention
6 juin 2008

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
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
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
Messages postés
27
Date d'inscription
mardi 11 mars 2008
Statut
Membre
Dernière intervention
6 juin 2008

oui c'est bien excel 2007 que j'utilise
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
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
Messages postés
27
Date d'inscription
mardi 11 mars 2008
Statut
Membre
Dernière intervention
6 juin 2008

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 ?
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
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
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
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
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
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
Messages postés
27
Date d'inscription
mardi 11 mars 2008
Statut
Membre
Dernière intervention
6 juin 2008

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.
Messages postés
27
Date d'inscription
mardi 11 mars 2008
Statut
Membre
Dernière intervention
6 juin 2008

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.