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 :

Rechercher plusieurs valeurs sur la même ligne pour copie


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2014
    Messages : 28
    Par défaut Rechercher plusieurs valeurs sur la même ligne pour copie
    Bonjour tout le monde,

    J'ai un emploi du temps sous Excel complètement illisible, je souhaite créer une macro pour refaire sa mise en forme. J'ai donc deux feuilles, l'emploi du temps illisible ("Workplan") et le nouveau ("Resource Assignement").
    Pour ceci j'ai besoin du nom de la personne, de sa tâche à accomplir et de son projet.

    J'ai pensé à ceci :
    On va sur la nouvelle feuille pour récupérer le nom, la tâche et le projet, on calle ces derniers dans des variables qu'on va chercher sur l'autre feuille.
    Une fois la ligne trouvé, on va copier cette ligne de telle colonne à telle colonne, pour la coller, dans la nouvelle feuille, de telle colonne à telle colonne.
    Tout ça dans une boucle, histoire d'automatisé la macro.


    Voilà ce que j'ai commencé, le principe est de passer ligne par ligne pour les valeurs recherchés, enfin c'est une idée :
    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
    18
    19
    Sub replace()
     
    Dim REF As Integer, PHASE As String, RESSOURCE As String, NB_LIGNE As Integer
     
     NB_LIGNE = 2
        Sheets("Resource Assignement").Select
        While Not Range("A" & NB_LIGNE & "").Value = ""
            REF = Range("A" & NB_LIGNE & "").Value
            PHASE = Range("F" & NB_LIGNE & "").Value
            RESSOURCE = Range("G" & NB_LIGNE & "").Value
            MsgBox "REF : " & REF & Chr(10) & _
                   "PHASE : " & PHASE & Chr(10) & _
                   "RESSOURCE : " & RESSOURCE
            NB_LIGNE = NB_LIGNE + 1
        Wend
     
     
     
    End Sub
    Pensez-vous que je suis sur la bonne voie ?

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    "Emploi du temps" est un terme qui peut désigner des choses très diverses. Pour comprendre ce que tu veux faire, il faudrait donc que tu mettes ton fichier en pièce jointe.

    Ton code se contente juste de mettre trois valeurs dans des variables et de les afficher. Il est donc difficile de savoir ce que tu comptes en faire.

    Quelques remarques quand même.

    Je ne comprends pas pourquoi tu mets un &"" à la fin de chaque référence de tes Ranges.

    Il est probable qu'il ne soit pas indispensable de mettre ces valeurs dans des variables. Il est tout à fait possible d'utiliser les Range.Value directement (voir même de supprimer le Value).

    A ta place, je commencerai par déterminer le nombre de lignes remplies en utilisant la propriété End et je ferais une boucle For to au lieu du While. Quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For NB_LIGNE = 2 to Range("A2").End(xlDown).Row
    A ta place, pour vérifier que les données ont bien été capturée, je n'utiliserai pas un MsgBox (qui t'oblige à valider chaque ligne) mais un Debug.Print qui affiche le résultat dans la fenêtre Exécution de ton éditeur VBA.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Debug.Print NB_LIGNE,"REF : ";REF,"PHASE : ";PHASE,"RESSOURCE : ";RESSOURCE

  3. #3
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2014
    Messages : 28
    Par défaut
    Menhir,

    Je ne comprends pas pourquoi tu mets un &"" à la fin de chaque référence de tes Ranges.
    J'ai trouvé ceci sur internet, je ne sais pas non plus à quoi est-ce utile.

    Ton code se contente juste de mettre trois valeurs dans des variables et de les afficher. Il est donc difficile de savoir ce que tu comptes en faire.
    Justement, le code va prendre les variables, dans la feuille 2, pour les rechercher dans la feuille 1. Une fois les valeurs trouvées, on copie telle ligne en feuille 1 pour les coller en feuille 2.
    Pour ceci, j'avais pensé aux fonctions EQUIV, INDEX ou RECHERCHEV voire RECHERCHEH.

    A ta place, pour vérifier que les données ont bien été capturée, je n'utiliserai pas un MsgBox (qui t'oblige à valider chaque ligne) mais un Debug.Print qui affiche le résultat dans la fenêtre Exécution de ton éditeur VBA.
    Super, c'est nettement mieux.

  4. #4
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par McRbt Voir le message
    J'ai trouvé ceci sur internet, je ne sais pas non plus à quoi est-ce utile.
    Un conseil : n'applique pas ce que tu trouves sans réfléchir. Utilise l'aide VBA pour comprendre ce que tu mets dans ton code.

    Justement, le code va prendre les variables, dans la feuille 2, pour les rechercher dans la feuille 1. Une fois les valeurs trouvées, on copie telle ligne en feuille 1 pour les coller en feuille 2.
    Tout comme il est possible dans une feuille Excel de faire référence aux données d'une autre feuille (voir même d'un autre fichier), il est possible de le faire dans du code VBA.
    Il suffit d'indiquer dans quelle fichier et quelle page ils se situent.

    Par exemple, tu veux faire référence à la cellule A1 de l'onglet "Autre" du classeur actif, ça s'écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("Autre").Range("A1")
    Pour faire référence aux feuilles d'un classeur "Dodo" non actif (mais ouvert quand même), il suffit de précéder ça de
    VBA, cest du langage objet, donc les objets sont "gigognes".

    Va voir dans l'aide VBA les objets Workbook et Worksheet et la liste de leur membres.
    Fait la même chose avec ces mêmes thermes mais au pluriel.

    Pour ceci, j'avais pensé aux fonctions EQUIV, INDEX ou RECHERCHEV voire RECHERCHEH.
    Dans VBA, il est plus simple d'utiliser les fonctions, propriétés et méthodes VBA.
    Il est possible d'utiliser les fonctions Excel mais c'est plus compliqué et, en plus, il faut que ce soit les fonction en anglais.

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    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 : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Si j'ai bien compris à la lecture de ta question, tu souhaites exporter certaines lignes d'une liste de données répondant à un ou plusieurs critères vers une autre feuille.
    Si c'est le cas, je ne peux que te conseiller d'utiliser le filtre avancé d'excel avec ou sans code VBA.
    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

  6. #6
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2014
    Messages : 28
    Par défaut
    Messieurs,

    Tout d'abord merci pour vos réponses, le langage VBA est encore flou pour moi, vous éclairez ma lanterne petit à petit.

    @Menhir,
    J'ai pris connaissance de tes conseils, je suis actuellement dans l'aide Excel, en train de chercher si quelque chose peut m'aider.
    Pour ce qui est des fonctions, tu as raisons, je vais rester sur des méthodes propre à VBA, je vais pas me compliquer la tâche.

    @Philippe Tulliez,
    C'est exactement ca.
    Cependant, les critères en question sont des valeurs qu'on va péché dans la feuille 2.
    On m'a déjà orienté vers les filtres avancés et élaborés, cependant je ne connais rien à ces deux types de filtres. Je ne sais même pas par où commencer.


    Je vous apporte un peu plus d'explication :
    Sur les deux feuilles, on a : le nom des personnes, leur tâche et leur projet, ainsi qu'un planning pour chaque tâche.
    Par exemple, sur la feuille 2, on voit que Monsieur X fait 3 heures sur la tâche 4 du projet 2. Dans ce cas, on va chercher, dans la feuille 1, la tâche 4 du projet 2 de Monsieur X.
    Une fois trouver, on va copier/coller son planning, de la feuille 1 à la feuille 2. Par conséquent, on verra que dans la feuille 2, Monsieur X fait 3 heures sur la tâche 4 du projet 2.

    En gros, c'est un copier/coller de la ligne de la colonne XX à la colonne XX, d'une feuille à une autre, en fonction du nom des personnes, de la tâche et du projet.

Discussions similaires

  1. [XL-2010] PB remplir une ComboBox avec les valeurs de plusieurs cellules sur la même lignes
    Par eviuss dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 21/05/2014, 07h01
  2. Réponses: 3
    Dernier message: 27/08/2010, 13h01
  3. Plusieurs textbox sur la même ligne
    Par kahya dans le forum Mise en page CSS
    Réponses: 10
    Dernier message: 15/02/2007, 14h19
  4. Réponses: 6
    Dernier message: 23/01/2007, 11h08
  5. Plusieurs echo sur la même ligne ?
    Par EvilAngel dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 05/12/2006, 00h58

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