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 :

Exporter des valeurs à partir d'un tableau de données [XL-2000]


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Technicien essais
    Inscrit en
    Mars 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien essais
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2015
    Messages : 8
    Points : 2
    Points
    2
    Par défaut Exporter des valeurs à partir d'un tableau de données
    Bonjour,

    A titre d'indication je suis novice en programmation excel.

    Je cherche à créer une macro qui permettrait de sélectionner une ligne à partir de la valeur contenu dans la première colonne d'un tableau, de créer automatiquement une nouvelle feuille ou stocker les lignes sélectionnées.
    Idéalement au lancement de la macro (MsgBox) j'aimerais pouvoir indiquer : - le nom de la nouvelle feuille que je souhaite créer
    - le première valeur que je souhaite voir apparaître dans ma nouvelle feuille
    - le pas entre chaque valeur.

    Exemple : Si dans ma première colonne j'ai des valeurs comme 1, 2, 3, 4, 5, 6, 8, 7, 9 et que je choisi 3 comme valeur de départ et 2 comme pas, j'aimerais ne voir apparaître dans ma nouvelle feuille que les lignes qui commencent par : 3, 5, 7, 9.

    Pourriez m'aider, je bloque un peu sur la programmation de cette macro. Je pense qu'il faudrait utiliser une boucle mais je n'arrive pas à la programmer.

    J'espère avoir été suffisamment clair dans mes explication.

    Par avance, merci.

    Thibault

  2. #2
    Membre habitué
    Homme Profil pro
    Lean Manufacturing
    Inscrit en
    Janvier 2015
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Lean Manufacturing

    Informations forums :
    Inscription : Janvier 2015
    Messages : 132
    Points : 197
    Points
    197
    Par défaut
    Bonsoir, voici une première base de travail

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub test()
        Dim i As Integer
        Dim pas As Byte
        i = InputBox("ligne de démarrage")
        pas = InputBox("pas")
        Worksheets.Add after:=Worksheets(Worksheets.Count)
        Sheets(Sheets.Count).Name = InputBox("nom de la feuille")
        For i = i To 13 Step pas
            'ici mettre l'instruction à effectuer
        Next
    End Sub
    fonctionnement : au démarrage de la macro une inputbox vous demande la ligne de démarrage, une autre le pas et la dernière le nom de la feuille à créer.
    Il vous reste ensuite à
    1) remplacer le "13" par la dernière ligne de votre tableau si elle est fixe ou par une instruction de recherche de dernière ligne
    2) remplacer "'ici mettre l'instruction a effectuer" par ce que vous voulez faire avec vos lignes pré-selectionnez selon le départ et le pas)
    Cordialement

  3. #3
    Candidat au Club
    Homme Profil pro
    Technicien essais
    Inscrit en
    Mars 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien essais
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2015
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Merci beaucoup pour votre réponse.

    J'ai remplacé le 13 par une instruction de recherche de dernière ligne (enfin je pense).

    Par contre je ne comprend pas vraiment la fonction de la ligne "For i = i To DLig Step pas" ?

    Cordialement.

  4. #4
    Membre habitué
    Homme Profil pro
    Lean Manufacturing
    Inscrit en
    Janvier 2015
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Lean Manufacturing

    Informations forums :
    Inscription : Janvier 2015
    Messages : 132
    Points : 197
    Points
    197
    Par défaut
    Bonjour, merci d'avoir répondu

    For i = i To 13 Step pas cela veut dire vulgairement que l'on va exécuter une action jusqu'à ce que i soit égale à 13 et que l'on va compter avec un pas défini. i n'étant qu'un numéro , on se sert de sa valeur pour ensuite définir une coordonnée de ligne ou de colonne.
    Exemple : si dans i on définit la valeur 3 --> Range("a" & i) cela veut dire Range("a3") donc cellule A3.
    Ensuite "Step" précise à vba qu'il va devoir compter avec un pas défini. Et se pas, nous l'avons défini dans la variable "pas". Par conséquent si dans la deuxième inputbox vous avez renseigné 2.
    la macro comptera de la ligne i jusqu'à la ligne 13 de 2 en 2

    Ici vous avez un petit tutoriel qui expliqueras sans doute mieux que moi : http://silkyroad.developpez.com/vba/boucles/
    Cordialement

  5. #5
    Candidat au Club
    Homme Profil pro
    Technicien essais
    Inscrit en
    Mars 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien essais
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2015
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    D'accord j'ai mieux compris maintenant.
    Donc après cette ligne de dois insérer une fonction de copie des valeurs lu par la macro ?
    Le nom que j'ai donné à la nouvelle feuille est "ok"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     Selection.Copy
        Sheets("ok").Select
        ActiveSheet.Paste
    Je pense qu'il manque une fonction qui permettrait de sélectionner toutes les lignes lues par la macro car la macro tourne mais rien n'est collé dans la nouvelle feuille. En effet si j'ai bien compris la macro ne va lire que les lignes déterminées par les condition (i et pas).

    Cordialement.

  6. #6
    Membre habitué
    Homme Profil pro
    Lean Manufacturing
    Inscrit en
    Janvier 2015
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Lean Manufacturing

    Informations forums :
    Inscription : Janvier 2015
    Messages : 132
    Points : 197
    Points
    197
    Par défaut
    Oui en effet il manque quelque chose.
    Dans la macro après For i = i To 13 Step pas il faut maintenant préciser ce que vous voulez copier.
    La macro va lire successivement les lignes une a une et de pas en pas comme vous le voulez (sauf si je me suis trompé) mais il faut dire à Excel "hey coco, tu lis les lignes de la ligne 3 à 135 de 2 en 2 et chaque ligne tu me la copies dans la feuille ok.

    Ce qu'il manque dans la macro (à se stade) c'est la ligne orange ci-dessus qui précise à Excel ce qu'il doit faire quand il est à la ligne voulu.
    Exemple vous entrez une ligne de départ de 3. Quand excel trouve la ligne 3, que doit il faire ? Copier toute la ligne ? Ne copier que la cellule A3 ? et puis la collez ou ? Vous me dites dans la feuille "ok" je vous réponds ok, mais dans une feuille "ok" il y a pas moins de 65536 cases multiplié par 256 colonnes... Ou excel doit coller les informations ?

    Excel c'est très pragmatique comme outil, chaque chose est défini et maintenant que vous entrer dans l'univers de la programmation, il ne faut plus rien laisser à l'intuition ou au hasard, tout ce qu'excel doit faire vous devez lui dire...C'est comme un jeu de dame ou d'echec, on fait avancer un pion d'une case à une autre. Excel c'est idem, on déplace une information d'une case à une autre...

    Par conséquent maintenant, pour faire avancer votre macro, il faut savoir exactement ce que vous voulez copier et ou (quelle cellule, quelle ligne, quelle colonne...) Une fois que vous savez ça, exposez le ici et on vous aidera à transposer ça en language vba
    Cordialement

  7. #7
    Candidat au Club
    Homme Profil pro
    Technicien essais
    Inscrit en
    Mars 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien essais
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2015
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Très alors, alors voilà ce que je souhaite copier et ou je souhaite le copier.

    Je souhaite copier la ligne entière, jusqu'à la première case vide.
    Je souhaite que la première cellule contenant un nombre dans la feuille source, soit collé dans la nouvelle feuille en A4.
    Si la première cellule contenant un nombre dans la feuille source est en A8, alors la cellule A8 sera collé en A4, la A9 en A5, la B8 en B4, B9 en B5, C8 en C4 et ainsi de suite.

    Cordialement.

  8. #8
    Membre habitué
    Homme Profil pro
    Lean Manufacturing
    Inscrit en
    Janvier 2015
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Lean Manufacturing

    Informations forums :
    Inscription : Janvier 2015
    Messages : 132
    Points : 197
    Points
    197
    Par défaut
    Je souhaite copier la ligne entière, jusqu'à la première case vide.


    La ligne entière où jusqu'à la première case vide ?
    Cordialement

  9. #9
    Candidat au Club
    Homme Profil pro
    Technicien essais
    Inscrit en
    Mars 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien essais
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2015
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Si la première cellule vide est en G8 alors je souhaite copier la ligne de A8 jusqu'à F8.

    Cordialement.

  10. #10
    Membre habitué
    Homme Profil pro
    Lean Manufacturing
    Inscrit en
    Janvier 2015
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Lean Manufacturing

    Informations forums :
    Inscription : Janvier 2015
    Messages : 132
    Points : 197
    Points
    197
    Par défaut
    Théoriquement la macro ressemble à ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Sub test()
        Dim i As Integer, j As Integer
        Dim pas As Byte
        Dim dl As Long, dc As Long
        i = InputBox("ligne de démarrage")
        pas = InputBox("pas")
        Worksheets.Add after:=Worksheets(Worksheets.Count)
        Sheets(Sheets.Count).Name = InputBox("nom de la feuille")
        Sheets(1).Activate
        j = 4
        dl = Sheets(1).Range("a" & Rows.Count).End(xlUp).Row
        For i = i To dl Step pas
            dc = Sheets(1).Cells(i, Columns.Count).End(xlToLeft).Column
            Sheets(1).Range(Cells(i, 1), Cells(i, dc)).Copy Sheets(Sheets.Count).Range("a" & j)
            j = j + 1
        Next
    End Sub
    en partant du principe que les données sources sont en feuille 1 et que les données seront recopiées sur la feuille crée.
    Cordialement

  11. #11
    Candidat au Club
    Homme Profil pro
    Technicien essais
    Inscrit en
    Mars 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien essais
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2015
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Merci beaucoup pour votre aide.

    Je vais maintenant pouvoir analyser toutes les lignes afin de comprendre le fonctionnement précis de cette macro.

    Bonne soirée à vous.

    Cordialement

  12. #12
    Membre habitué
    Homme Profil pro
    Lean Manufacturing
    Inscrit en
    Janvier 2015
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Lean Manufacturing

    Informations forums :
    Inscription : Janvier 2015
    Messages : 132
    Points : 197
    Points
    197
    Par défaut
    bon courage dans la décortication! si vous n'avez aucune base en vba peut-être devriez vous commencer par lire des documents sur le sujet, exemple ce lien : http://bidou.developpez.com/article/VBA/

    Une macro est construite a partir de syntaxe prédéfini qu'il faut connaitre pour éviter de chercher sans fin une logique quand il ne peut pas y en avoir.
    Si vous avez des questions n'hésitez pas!
    Cordialement

  13. #13
    Candidat au Club
    Homme Profil pro
    Technicien essais
    Inscrit en
    Mars 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien essais
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2015
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Bonjour

    Oui pour moi le problème est bien le langage très spécifique.
    Si ce n'est pas trop vous demander j'aimerais terminer cette macro afin qu'elle fonctionne non pas sur la feuille n°1, mais sur la feuille active ou en entrant le nom de la feuille à traiter si ce n'est pas possible avec la feuille active.

    Par avance merci.

    Cordialement.

  14. #14
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 765
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 765
    Points : 28 623
    Points
    28 623
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    C'est amusant car je viens de répondre à une question dans une discussion ayant comme titre Filtrer des données selon un certain critère qui ressemble comme deux gouttes d'eau à la tienne.
    C'est à croire que c'est la même personne qui l'a posée.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  15. #15
    Candidat au Club
    Homme Profil pro
    Technicien essais
    Inscrit en
    Mars 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien essais
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2015
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    En effet la question posée dans votre lien est très similaire à la mienne.
    Je ne vois pas l’intérêt pour une même personne de poser 2 fois la même question sur un même forum, d'autant plus qu'une solution avait déjà été apportée à mon post.

    La solution proposée par WOLF fonctionne très bien et je cherche simplement à adapter cette macro sur n'importe quelle feuille.

    Cordialement.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Récupérer des valeures à partir d'un base de données MySQL
    Par azzabouines dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 14/05/2012, 17h08
  2. Récupérer des valeurs à partir d'un tableau
    Par Lolicha dans le forum Langage
    Réponses: 2
    Dernier message: 26/02/2010, 19h48
  3. tracer des courbes à partir d'un tableau de données
    Par Erlen dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 6
    Dernier message: 28/11/2008, 18h08
  4. Réponses: 2
    Dernier message: 04/03/2008, 09h48
  5. [VBA-E] récupérer la valeur à partir d'un tableau !!!
    Par mulanzia2003 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/03/2006, 09h37

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