IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

[VBA-PP]Ecrire dans une feuille Excel


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2006
    Messages : 55
    Points : 29
    Points
    29
    Par défaut [VBA-PP]Ecrire dans une feuille Excel
    bonjour,

    je voulais savoir pourquoi cette fonction qui doit écrire "1" dans une cellule ne marche pas ? Qu'est ce que j'ai fait de faux ? Quand je l'éxécute, j'ai l'erreur suivante : "Run-time error 91 : object variable or with block variable not set.

    voici le code
    Sub juste_figure_18()
    Dim xlapp As Excel.Application
    Dim classeur As Excel.Workbook
    Dim feuille As Excel.Worksheet
    Set xlapp = New Excel.Application
    xlapp.Visible = True
    Set feuille = xlapp.ActiveSheet
    feuille.Range("B19") = "1"


    Set feuille = Nothing

    Set classeur = Nothing
    Set xlapp = Nothing
    End Sub

  2. #2
    Membre éclairé
    Avatar de Theocourant
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    618
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 618
    Points : 739
    Points
    739
    Par défaut
    Salut,

    A quelle ligne exactement as-tu une erreur ?

    +

    Théo
    Forums VB : lire la notice
    La touche existe pour être utilisée
    Pensez au tag
    Pour ceux n'ayant pas l'aide installée :
    - Aide MSDN pour VB6
    - Aide MSDN pour VBA
    Je ne réponds pas aux questions techniques par MP. Merci d'utiliser le forum fait pour çà.

  3. #3
    Membre actif Avatar de malhivertman1
    Inscrit en
    Avril 2005
    Messages
    337
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 337
    Points : 221
    Points
    221
    Par défaut
    Je parirais que c'est sur une de tes lignes avec un 'set'

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2006
    Messages : 55
    Points : 29
    Points
    29
    Par défaut
    quand je clique sur "debug", il me surligne en jaune la ligne suivante :

    feuille.Range("B19") = "1"

  5. #5
    Membre actif Avatar de malhivertman1
    Inscrit en
    Avril 2005
    Messages
    337
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 337
    Points : 221
    Points
    221
    Par défaut
    Et si tu enleve le 'set' de
    Set feuille = xlapp.ActiveSheet
    ?

    Je dis ça au hasard mais on ne sait jamais

  6. #6
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    ben tu crée une application Excel, une feuille, mais pas le classeur pour mettre la feuille ....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    xlapp.Visible = True
    Set classeur = xlapp.Workbooks.Add
    Set feuille = xlapp.ActiveSheet

  7. #7
    Membre éclairé
    Avatar de Theocourant
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    618
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 618
    Points : 739
    Points
    739
    Par défaut
    Re,

    Je viens de tester ta routine.. Ca ne marche pas car tu n'as pas de worbook ouvert ....

    voilà le code modifié:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub juste_figure_18()
    Dim xlapp As Excel.Application
    Dim classeur As Excel.Workbook
    Dim feuille As Excel.Worksheet
    Set xlapp = New Excel.Application
    xlapp.Visible = True
    Set classeur = xlapp.Workbooks.Add
    Set feuille = classeur.ActiveSheet
    feuille.Range("B19") = "1"
     
    Set feuille = Nothing
    Set classeur = Nothing
    Set xlapp = Nothing
    End Sub
    +

    Théo
    Forums VB : lire la notice
    La touche existe pour être utilisée
    Pensez au tag
    Pour ceux n'ayant pas l'aide installée :
    - Aide MSDN pour VB6
    - Aide MSDN pour VBA
    Je ne réponds pas aux questions techniques par MP. Merci d'utiliser le forum fait pour çà.

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2006
    Messages : 55
    Points : 29
    Points
    29
    Par défaut
    merci pour vos réponse, le truc c'est que en fait j'ai une autre fonction vba avant qui ouvre un fichier excel spécifique, et donc cette fonction doit opérérer dans ce classeur ouvert précédement...

    comment faire ?

  9. #9
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    c'est toujours la même ligne à modifier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set classeur = xlapp.Workbooks.Open ("c:\tmp\Monfichier.xls")

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2006
    Messages : 55
    Points : 29
    Points
    29
    Par défaut
    oui mais le classeur excel est déjà ouvert, il est actif, et je ne veux pas que cette fonction me le réouvre, juste quelle inscrive "1" dans la cellule spécifiée.

  11. #11
    Membre éclairé
    Avatar de Catbull
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    542
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 542
    Points : 854
    Points
    854
    Par défaut
    Avant d'ouvrir le classeur, assure toi qu'il ne le soit pas déjà. Pour cela teste son existence par un appel à la collection Workbooks.

  12. #12
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    Citation Envoyé par alpking
    oui mais le classeur excel est déjà ouvert, il est actif, et je ne veux pas que cette fonction me le réouvre, juste quelle inscrive "1" dans la cellule spécifiée.
    Attends ? il nous manque peu être une info importante d'ou lance tu ce code ?? c'est du VB6 VBA Excel PP ...

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2006
    Messages : 55
    Points : 29
    Points
    29
    Par défaut
    ok Catbull, mais je suis très novice en vba et je ne sais pas comment faire. Le truc c'est que comme j'ai dit tout a l'heure, quand cette fonction sera exécutée (depuis powerpoint si jamais), il y aura un workbook ouvert et actif, donc pas besoin d'un créer ou d'un ouvrir un...

  14. #14
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    et il n'y as pas moyen à ce que ce classeur soit fermé... ! c'est quand même plus simple si powerpoint ouvre le fichier , puis le ferme quand il n'en as plus besoin...

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2006
    Messages : 55
    Points : 29
    Points
    29
    Par défaut
    bah en fait pas vraiment,parce que cette fonction est repetée 40 fois durant la présentation powerpoint, une fois toute les 2 diapositive, ce qui signifierai 40 ouverture et fermeture du classeuret en plus le classeur doit rester en arrière-plan, il ne doit pas venir devant la présentation...

  16. #16
    Membre éclairé
    Avatar de Catbull
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    542
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 542
    Points : 854
    Points
    854
    Par défaut
    La collection Workbooks est un membre de l'objet Application. Cette collection recense l'ensemble des classeurs ouverts. Pour accéder accéder un objet de la collection il suffit de passer en paramètre la clé de l'élément concerné :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonElement = MaCollection(CléElement)
    Dans notre cas, la clé est tout simplement le nom du classeur est on obtient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Set MonClasseur = xlapp.Workbooks("Mon Classeur.xls")
    Il ne reste plus qu'a encapsuler le code dans une fonction afin de gérer les exceptions, notament si le classeur est fermé

  17. #17
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    Citation Envoyé par Catbull
    La collection Workbooks est un membre de l'objet Application. Cette collection recense l'ensemble des classeurs ouverts. Pour accéder accéder un objet de la collection il suffit de passer en paramètre la clé de l'élément concerné :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonElement = MaCollection(CléElement)
    Dans notre cas, la clé est tout simplement le nom du classeur est on obtient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Set MonClasseur = xlapp.Workbooks("Mon Classeur.xls")
    Il ne reste plus qu'a encapsuler le code dans une fonction afin de gérer les exceptions, notament si le classeur est fermé
    oui mais application c'est pas une collection on accéde comment à l'application excel déjà ouverte ... (pas forcément ouverte.. par powerpoint !)

  18. #18
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    Citation Envoyé par alpking
    bah en fait pas vraiment,parce que cette fonction est repetée 40 fois durant la présentation powerpoint, une fois toute les 2 diapositive, ce qui signifierai 40 ouverture et fermeture du classeuret en plus le classeur doit rester en arrière-plan, il ne doit pas venir devant la présentation...
    pour qu'il ne viennent pas devant l'application c'est la propriété visible...xlapp.visible = false..

  19. #19
    Membre éclairé
    Avatar de Catbull
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    542
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 542
    Points : 854
    Points
    854
    Par défaut
    L'objet Application représente une isntance d'Excel. Tu peux avoir plusieurs instances d'ouverte, cela ne gène pas. Si l'utilisateur ouvre Excel, powerPoint peut soit utiliser l'instance ouverte soit en créer une nouvelle. Par contre les collections workbooks sont les mêmes.

  20. #20
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2006
    Messages : 55
    Points : 29
    Points
    29
    Par défaut
    j'ai testé une autre fonction qui marche, la voila :

    Sub plusun()
    Dim ObjCell As Range
    For Each ObjCell In Range("B4").Cells
    ObjCell.Value = ObjCell.Value + 1
    Next
    End Sub
    elle accède directement au bon classeur, et fait exactement ce que je veux.

    le problème, c'est que j'aimerai vraiment garder l'autre fonction, bien sur en la modifiant pour qu'elle marche, parce que j'ai du la dupliquer 40x en changeant juste la cellule, donc ca serait vraiment un gain de temps...

    déjà, merci bp de votre aide

Discussions similaires

  1. Ecrire dans une feuille excel
    Par redabadache3 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 19/07/2022, 00h47
  2. Ecrire dans une feuille Excel
    Par ash_rmy dans le forum ODS et reporting
    Réponses: 3
    Dernier message: 06/12/2007, 11h06
  3. [VBA-E] positionnement dans une feuille excel
    Par fast&furious dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 28/01/2007, 12h59
  4. [VBA - E2003] Ecrire dans une feuille deplacement ?
    Par Slumpy dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 18/04/2006, 19h19
  5. [VBA]Userform mobile dans une feuille excel
    Par fikren dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 28/10/2005, 15h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo