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 :

Copier ligne suivant la valeur d'un combobox [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2014
    Messages : 90
    Par défaut Copier ligne suivant la valeur d'un combobox
    Bonjour à tous,

    Je vous explique ce que je souhaiterai faire :

    J'ai un combobox situé sur la Feuille "Détails Personnes Normes" (celui -ci est rempli par les différents métiers présents sur la feuille "Sélection globale" de la colonne C).

    L'utilisateur peut donc choisir entre les différents métiers. Si il choisit un métier en particulier, j'aimerais pouvoir copier chaque ligne correspondante au métier choisi de la feuille "Sélection globale".

    Ci dessous mon début de code :


    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
    20
    Public Sub ComboBoxMetier2_Change()
     
     
    Dim SG As Worksheet 'déclare la variable SG (onglet Sélection globale)
    Dim DPN As Worksheet 'déclare la variable DPN (onglet Détails Personnes Norme)
    Dim PL As Range 'déclare la variable PL (PLage)
    Dim CEL As Range 'déclare la variable CEL (CELlule)
    Dim R As Range 'déclare la variable R (Recherche)
     
    Set SG = Sheets("Sélection globale") 'définit l'onglet SG
    Set DPN = Sheets("Détails Personnes Normes") 'définit l'onglet DPN
     
    Set PL = SG.Range("C2").End(xlUp) 'définit la plage PL
     
    For Each CEL In PL 'boucle sur toutes les cellules CEl de la plage PL
       If CEL = ComboBoxMetier2.Value Then CEL.Rows(Target.Row).Copy Destination:=Sheets("Détails Personnes Normes").Range("A8")
    Next CEL
     
     
    End Sub
    Cordialement

  2. #2
    Membre émérite
    Avatar de eric4459
    Homme Profil pro
    Ingénieur Gestion de Projets
    Inscrit en
    Avril 2014
    Messages
    605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Gestion de Projets
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 605
    Par défaut
    Bonjour,
    Je n'ai pas testé ton code mais il semble correct, au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Destination:=Sheets("Détails Personnes Normes").Range("A8")
    tu pourrais utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Destination:=DPN.Range("A8")
    car tu l'as défini plus haut.
    Est-tu certains que tous les lignes soient collées en A8, car là tu écrases à chaque fois la valeur de cette cellule?
    Eric
    "Vous n’avez cessé d’essayer ? Vous n’avez cessé d’échouer ? Aucune importance !
    Réessayez, échouez encore, échouez mieux." Samuel Beckett
    Pensez aux balises et
    Visitez les FAQ Excel et allez faire un tour ici
    Tutoriels de SilkyRoad

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2014
    Messages : 90
    Par défaut
    Aucune ligne n'est collée lorsque j’exécute ce code ... J'ai rajouté qqes lignes pour stocker les lignes égale au combobox dans une variable recherche.

    Cf code ci-dessous :

    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
    20
    21
    22
    23
    Private Sub ComboBoxMetier2_Change()
     
     
    Dim SG As Worksheet 'déclare la variable SG (onglet Sélection globale)
    Dim DPN As Worksheet 'déclare la variable DPN (onglet Détails Personnes Norme)
    Dim PL As Range 'déclare la variable PL (PLage)
    Dim CEL As Range 'déclare la variable CEL (CELlule)
    Dim R As Range 'déclare la variable R (Recherche)
     
    Set SG = Sheets("Sélection globale") 'définit l'onglet SG
    Set DPN = Sheets("Détails Personnes Normes") 'définit l'onglet DPN
     
    If SG.Range("C2") = "" Then Exit Sub 'si la cellule C2 de l'onglet SG est vide, sort de la procédure
    Set PL = SG.Range("C2").End(xlUp) 'définit la plage PL
     
     
    For Each CEL In PL 'boucle sur toutes les cellules CEl de la plage PL
        Set R = DPN.ComboBoxMetier2.Value.Find(CEL.Value, , xlValues, xlWhole) ' A VERIFIER ..
       If Not R Is Nothing Then CEL.Rows(Target.Row).Copy Destination:=DPN.Range("A8")
       Set R = Nothing 'vide la variable R
    Next CEL
     
    End Sub
    Visiblement j'ai une petit problème de syntaxe (notamment quand je définit R) car j'ai une erreur sur le private sub au tout début : Erreur de compilation : Membre de méthode ou de données introuvable

    Merci pour ta réponse rapide !

  4. #4
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Bonjour Coxtox, FZ, bonjour le forum

    Bizarrement ce code me parle (enfin surtout les commentaires...)

    En dehors de la remarque judicieuse d'Éric, j'ai aussi un doute quant à
    :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set PL = SG.Range("C2").End(xlUp) 'définit la plage PL
    Ça fait un toute petite plage ça (C1:C2)...

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2014
    Messages : 90
    Par défaut
    Salut Thautheme,

    Je dois admettre que ton code de la dernière fois était super clair ! Vu que je débute et que j'ai un peu de mal avec la syntaxe ... c'est parfait en reprenant ton exemple et en a l'adaptant

    Inattention de ma part j'ai modifier avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set PL = SG.Range("C2").End(xlDown)
    j'ai un problème avec la ligne ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Set R = DPN.ComboBoxMetier2.Value.Find(CEL.Value, , xlValues, xlWhole)
    Pour définir, la recherche de la valeur du combobox dans la plage PL (Erreur de compilation mentionné ci-dessus).

    Cordialement

  6. #6
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Bonjour le fil, bonjour le forum,

    Essaie comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set R = PL.Find(ComboBoxMetier2.Value, , xlValues, xlWhole)

  7. #7
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2014
    Messages : 90
    Par défaut
    Çà se simplifie effectivement !

    Cependant j'ai un problème au niveau de cette ligne de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Not R Is Nothing Then CEL.Rows(Target.Row).Copy Destination:=DPN.Range("A8")
    Erreur d’exécution : Objet requis ... d'après ce que j'ai compris ça semblerais provenir du fait que lorsque R est vide il déclenche une erreur non ?


    PS : Si je veux copier que les colonnes A, B, C est ce possible de la manière suivante (aie aie la syntaxe !) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Not R Is Nothing Then CEL.Rows.Range("A:C").Copy Destination:=DPN.Range("A8")
    Merci de votre aide..

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

Discussions similaires

  1. Copier les valeurs des champs d'une ligne dans la ligne suivante
    Par xoxo72 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 15/09/2014, 11h10
  2. Coloré une ligne suivant la valeur de la cellule A
    Par bentor22 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 24/04/2013, 01h42
  3. [XL-2007] Modidifer une ligne suivant la valeur d'une cellule
    Par jimmy1120112 dans le forum Excel
    Réponses: 3
    Dernier message: 16/11/2010, 18h05
  4. Réponses: 1
    Dernier message: 27/04/2010, 21h39
  5. Réponses: 11
    Dernier message: 30/03/2007, 11h30

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