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 :

Besoin de conseil sur projet


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2014
    Messages : 75
    Points : 56
    Points
    56
    Par défaut Besoin de conseil sur projet
    Bonjour tout le monde,

    J'ouvre cette nouvelle discussion pour obtenir des conseils sur la manière de réaliser mon projet VBA. Mon projet précédent m'a posé beaucoup de problèmes : http://www.developpez.net/forums/d14...e-each-sheets/
    car je m'y étais mal pris. Mon projet reste presque le même (je n'ai cette fois-ci qu'une seule feuille à traiter) mais cette fois-ci je compte passer par le "bon" code. Je reprends donc tout à zéro !

    Je souhaite que vous me dites si ce que je compte faire est correct.

    Voici mon projet :
    J'ai un classeur Excel qui contient une seule feuille. Cette feuille demande à l'utilisateur d'inscrire son nom, prénom, âge ... ATTENTION ce n'est pas un formulaire et cela ne le sera jamais !! J'insiste sur ce point, c'est une contrainte qu'on m'a fixé. C'est une feuille classique. L'utilisateur inscrit ce qu'on lui demande.
    Mon objectif est de transférer les données inscrites par l'utilisateur dans un nouveau classeur (à créer dans le répertoire où se trouve le premier classeur) dans lequel on aura au final qu'une unique feuille intitulée data. Il faut que ce transfert soit ordonné sur une seule ligne (la seconde ligne). Je m'explique : le nom doit apparaitre en colonne A. Le prénom en B, la date de naissance en C ... Puis je dois enregistrer et fermer le classeur Excel.

    Voici mon code par tranche (dites moi si c'est ok ou s'il y a mieux) :
    1. Je copie les données présentes dans l'unique feuille de mon classeur d'origine
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim WBfirst As Workbook
    Dim WBsecond As Workbook
    Set WBfirst = ActiveWorkbook
    WBfirst.Activate
    Cells.Copy
    2. Je crée mon nouveau classeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    'On crée l'objet Excel
        Set xlApp = CreateObject("Excel.Application")
        'Nombre de feuilles
        xlApp.SheetsInNewWorkbook = 1
        'Ajout du classeur
        Set xlBook = xlApp.Workbooks.Add
        'On donne un nom au classeur
        xlBook.SaveAs ("Nouveau.xls")
        Set WBsecond = ActiveWorkbook
        WBsecond.Activate
    Je rencontre déjà trois problèmes : -le nouveau classeur est en lecture seule. - Le nouveau classeur n'est pas créé dans le répertoire que je souhaite. - Set WBsecond = ActiveWorkbook ne déclare pas mon nouveau classeur comme le activeworkbook. Il prend mon ancien.

    3. Je crée ma feuille data. Je colle mes données dans la feuille 1 de mon nouveau classeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    'Je me place sur la feuille créée dans mon nouveau classeur. J'y colle ma feuille de base.
    sheets("Feuil1").select
    Cells.PasteSpecial
    ' Je crée ma feuille data dans laquelle je souhaite agencer correctement les données.
    Set sh = Sheets.Add
    sh.Name = "data"
    4. Je copie/colle correctement mes données de manière ordonnée dans ma feuille data :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Sheets("data").Select
    [E2].Value = Worksheets("Feuil1").[G14].Value
    [M2].Value = Worksheets("Feuil1").[F17].Value
    [O2].Value = Worksheets("Feuil1").[C32].Value
    [P2].Value = Worksheets("Feuil1").[C41].Value
    [N2].Value = Worksheets("Feuil1").[C49].Value
    5. Je supprime ma feuille intitulée "Feuil1" pour ne conserver que la feuille data.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Feuil1").delete
    6. J'enregistre et je quitte : code pas encore développé.

    Mon code ne fonctionnant pas dès l'étape 2 correctement, je ne peux pas continuer.
    Pouvez vous m'aider dans mon travail ?
    Merci d'avance pour votre aide !!!!

  2. #2
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut

    Bonjour.

    1) Éviter Activate et Select, totalement inutiles et sources d'ennuis ! Idem dans les points 2, 3 et 4 …
    . . Comme déjà mentionné dans la précédente discussion, sans compter l'exemple y figurant en lien …

    2) Ouvrir une seconde instance d'Excel est superflu, aucun intérêt à part gâcher des ressources !
    . . Inutile pour créer un nouveau classeur … En utilisant l'Enregistreur de macros, le code est livré sur un plateau !

    3) Pas de répertoire d'indiqué dans la sauvegarde, donc le classeur est enregistré dans le répertoire courant !
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2014
    Messages : 75
    Points : 56
    Points
    56
    Par défaut
    Merci pour ta réponse.

    "Éviter Activate et Select, totalement inutiles et sources d'ennuis ! Idem dans les points 2, 3 et 4 …"
    J'ai bien compris que je dois éviter Activate. Cependant comment faire ? Comment "appeler" un classeur ?

    "2) Ouvrir une seconde instance d'Excel est superflu, aucun intérêt à part gâcher des ressources !
    . . Inutile pour créer un nouveau classeur …"
    Ok, mais comment fait-on pour ouvrir le plus simplement possible un nouveau classeur ? Je n'ai trouvé que ce code pour créer un nouveau classeur Excel.

    "3) Pas de répertoire d'indiqué dans la sauvegarde, donc le classeur est enregistré dans le répertoire courant !"
    Oui tout à fait. Ce que je souhaiterais faire (et que je ne sais pas faire) serait de créer le nouveau classeur automatiquement dans le même répertoire que celui où se trouve le premier classeur. Je ne vois pas comment faire. Peux-tu m'aider sur ce point ?

    Edit : Je viens de me mettre au VBA. Je n'ai pas de connaissances pointues sur ce domaine, d'où mes difficultés pour créer code correct. Je ne connais pas les astuces qui peuvent sembler évidentes pour certains !

  4. #4
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut

    1) et 2) : j'y ai pourtant déjà répondu !

    1 ) Lire donc l'exemple pourtant en lien dans la discussion précédente …
    Il suffit donc de respecter la hiérarchie d'Excel, à savoir classeur, feuille de calculs, méthode / propriété, …

    2) Utiliser le Générateur de macros : le code est livré sur un plateau ‼
    Ensuite en consultant le code généré et en s'appuyant sur l'aide en sélectionnant une instruction puis via la touche ,
    n'importe quel débutant doit progresser car ce statut n'est pas une excuse …

    Autre manière en consultant directement l'aide de l'objet concerné, en l’occurrence Workbook,
    suffit de consulter les méthodes dont il dispose …

    3) C'est dans les propriétés de l'objet Workbook : Path


    Pour rappel, un débutant ne doit pas hésiter à consulter la FAQ ainsi que la pléthore de tutoriels …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

Discussions similaires

  1. Réponses: 3
    Dernier message: 26/02/2009, 23h15
  2. Besoin de conseils sur un programme
    Par Lynx91 dans le forum C
    Réponses: 11
    Dernier message: 12/09/2007, 13h36
  3. Besoin de conseil sur les classes
    Par SuperWeight dans le forum MFC
    Réponses: 1
    Dernier message: 04/06/2007, 21h44
  4. besoin de conseil sur le démarrage d'un projet
    Par kollyv dans le forum Général Java
    Réponses: 5
    Dernier message: 06/04/2007, 18h32
  5. Besoin de conseils sur une application
    Par Jim_Nastiq dans le forum Langage
    Réponses: 12
    Dernier message: 12/04/2006, 12h43

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