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 :

Aprés un choix dans une listbox multiselection selectionner/copier/coller dans une autres feuilles [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre actif
    Homme Profil pro
    Inscrit en
    Mars 2009
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mars 2009
    Messages : 408
    Points : 216
    Points
    216
    Par défaut Aprés un choix dans une listbox multiselection selectionner/copier/coller dans une autres feuilles
    bonjour le forum

    Je voudrais essayer de resoudre un probleme et merci si vous pouvez m'aider.

    J'ai fait un userform avec une liste multiselection (Demandeur) provenant de la sheets("BD"),colonne I

    aprés une selection de un ou plusieurs Demandeurs, Il faudrait que la ou les sheets("BD"). range ("G:W") contenant le nom du demandeur en Range(I) soit copié
    vers la sheets("lievre").range("A"& .End(xlUp).

    Voila ce que j ai commencé mais je crois que je me plante la multiselection me gene enfin je pense

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    Private Sub Validez_Click()
     
    Dim DerligLI As Long, DerligBD As Long
     
    Dim X As Integer, y As Integer
    Dim Demandeur As Range
     
    DerligLI = Sheets("Lievre").Range("A65000").End(xlUp).Row  'la premiere ligne vide de A dans feuil lievre
     
    DerligBD = Sheets("BD").Range("I65536").End(xlUp).Row ' derniere ligne vide de I dans feil BD
     
    With Sheets("BD") 'avec sheets BD
     
        If Demandeur <> "" Then 'si Demandeur n' est pas vide
     
           'DANS LA COLONNE i DE BD trouve la valeur demandeur selectionner dans  la listbox
            Set Demandeur = .Range("I2:I" & Derlig).Find(Demandeur)
     
            y = 15
            'Dans chaque ligne BD en I
            For X = 2 To DerligBD
                If .Range("A" & X).Value = Demandeur.Offset(o, -2).Value Then
                'copie en sheets lievre derligne libre la je suis encore plus perdu
                Copy Destination:=DerligLI
                y = y + 1
                End If
            Next X
        End If
     
    End With
     
    End Sub
    merci pour votre aide

  2. #2
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Points : 2 416
    Points
    2 416
    Par défaut
    Bonjour,
    J'ai fait un userform avec une liste multiselection (Demandeur) provenant de la sheets("BD"),
    Dans le code que tu montre où est-il question de la ListBox ?
    Quel est son nom (la listBox)
    A+

  3. #3
    Membre actif
    Homme Profil pro
    Inscrit en
    Mars 2009
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mars 2009
    Messages : 408
    Points : 216
    Points
    216
    Par défaut
    voici les codes qui initialise mes listbox Commune et Demandeur. je selectionne une commune dans la listbox : Commune et tous les demandeurs de cette commune apparaisse dans la listbox multiselection : Demandeur

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    Private Sub UserForm_Initialize()
     
    'multiselection
    Me.Demandeur.MultiSelect = fmMultiSelectMulti
      Set f = Sheets("BD")
      'choix de liste
        Set mondico = CreateObject("Scripting.Dictionary")
            For Each c In f.Range("j2", f.[J65000].End(xlUp))
     
            'sans doublon
              If Not mondico.Exists(c.Value) Then mondico.Add c.Value, c.Value
        Next c
     
      Me.Commune.List = mondico.items
     
      'tri par orde alphabetique comunne
      With Commune
        For i = 0 To .ListCount - 1
            For j = 0 To .ListCount - 1
                If UCase(.List(i)) < UCase(.List(j)) Then
                    temp = .List(j)
                    .List(j) = .List(i)
                    .List(i) = temp
                End If
            Next j
        Next i
    End With
     
    End Sub
     
     
    Private Sub Commune_Click()
    'selection des demandeurs aprés clic
     
       Set f = Sheets("BD")
       Me.Demandeur.Clear
       For Each c In f.Range("J2", f.[J65000].End(xlUp))
         If c = Me.Commune Then Me.Demandeur.AddItem c.Offset(0, -1)
        Next c
     
    End Sub
    J espere que je t apporte la bonne reponse
    merci

  4. #4
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Points : 2 416
    Points
    2 416
    Par défaut
    Pas encore bien compris, un petit conseil d'abord, nomme tes contrôle en mettant par exempl LB_Commune, LB_Demandeur etc, ça dit directement ce que c'est et c'est plus lisible. (LB pour ListBox, si c'est un textBox Tx_ etc..)
    Pour ta listBox, si tu met le code dans le Click de ta listbox il n'y aura jamais de multiSelection de faite ?
    Il faut soit mettre un bouton pour valider ou mettre le code dans le DoubleClick !!
    Mais comme dit, j'ai pas encore bien compris.
    Essaye d'expliquer avec des mots et pas du code ce que tu veux faire par ordre chronologique.

  5. #5
    Membre actif
    Homme Profil pro
    Inscrit en
    Mars 2009
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mars 2009
    Messages : 408
    Points : 216
    Points
    216
    Par défaut
    merci pour les conseils, tu sais je debute mais je progresse (heureusement)

    Pour le doubleclic je ne pense pas que ce soit necessaire car j ai mis dans mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.LB_Demandeur.MultiSelect = fmMultiSelectMulti
    Mon userform quand il apparait il est tout beau et je peux selectionner plusieurs demandeur dans la liste Lb_Demandeur aprés une selection de la commune LB_Commune

    je te remet les codes d'initialisation des listes mais le problemes est quand je vais validez les multiselections

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    Private Sub Annuler_Click()
    Unload Me
    End Sub
    Private Sub UserForm_Initialize()
     
    'multiselection
    Me.LB_Demandeur.MultiSelect = fmMultiSelectMulti
     
      Set f = Sheets("BD")
      'choix de liste
        Set mondico = CreateObject("Scripting.Dictionary")
     
            For Each c In f.Range("j2", f.[J65000].End(xlUp))
     
            'sans doublon
              If Not mondico.Exists(c.Value) Then mondico.Add c.Value, c.Value
        Next c
     
      Me.LB_Commune.List = mondico.items
     
      'tri par orde alphabetique comunne
      With LB_Commune
        For i = 0 To .ListCount - 1
            For j = 0 To .ListCount - 1
                If UCase(.List(i)) < UCase(.List(j)) Then
                    temp = .List(j)
                    .List(j) = .List(i)
                    .List(i) = temp
                End If
            Next j
        Next i
    End With
     
    End Sub
    Private Sub LB_Commune_Click()
    'selection des LB_Demandeurs aprés clic
     
       Set f = Sheets("BD")
       Me.LB_Demandeur.Clear
       For Each c In f.Range("J2", f.[J65000].End(xlUp))
         If c = Me.LB_Commune Then Me.LB_Demandeur.AddItem c.Offset(0, -1)
        Next c
     
    End Sub
    tout ce qui est au dessus marche le probleme est
    en cliquant sur validez de cette liste demandeur avec validez_clic
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    Private Sub Validez_Click()
     
    Dim DerligLI As Long, DerligBD As Long
     
    Dim X As Integer, y As Integer
    Dim LB_Demandeur As Range
     
    DerligLI = Sheets("Lievre").Range("A15 : A65000").End(xlUp).Row  'la premiere ligne vide de A dans feuil lievre
     
    DerligBD = Sheets("BD").Range("I65536").End(xlUp).Row ' derniere ligne vide de I dans feil BD
     
    With Sheets("BD") 'avec sheets BD
     
        If LB_Demandeur <> "" Then 'si LB_Demandeur n' est pas vide
     
           'DANS LA COLONNE i DE BD trouve la valeur LB_Demandeur selectionner dans  la listbox
            Set LB_Demandeur = .Range("I2:I" & Derlig).Find(LB_Demandeur)
     
            y = 15
            'Dans chaque ligne BD en I
            For X = 2 To DerligBD
                If .Range("A" & X).Value = LB_Demandeur.Offset(o, -2).Value Then
                'copie en sheets lievre derligne libre
                Copy Destination:=DerligLI
                y = y + 1
                End If
            Next X
        End If
     
    End With
     
    End Sub
    je n arrive pas a recuperer les données de la selection de la sheets "BD" et les poser dans la sheets "lievre". Pas facile a expliquer dis moi si tu comprends
    si tu veux je peux te faire un petit fichier pour expliquer et aprés j essairai de l adapté a mon code
    merci beaucoup

    je joint un petit fichier exemple si ca peut donner de l inspiration merci
    Fichiers attachés Fichiers attachés

  6. #6
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Points : 2 416
    Points
    2 416
    Par défaut
    Ton classeur en retour, tu dis si ça te va, seule chose que je sais pas.. Les lignes à écrire doivent s'ajouter ou bien toujours commencer à la ligne 15 ?
    Pour le moment, ça s'ajoute sur première ligne vide.
    A+
    Fichiers attachés Fichiers attachés

  7. #7
    Membre actif
    Homme Profil pro
    Inscrit en
    Mars 2009
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mars 2009
    Messages : 408
    Points : 216
    Points
    216
    Par défaut
    Bonjour Leforestier,
    Belle journée, Chartres sous le soleil.

    Ton code correspond exactement a ce que je desirai.
    Merci beaucoup c genial.

    Maintenant quand je l adapte à mon fichier qui a la même configuration de ligne et de colonne, il me declenche une erreur :
    erreur "94" utilisation incorrect de null en sourlignant la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Lig = LB_Demandeur.List(i, 1)
    es ce que le probleme ne serait pas la declaration de la variable Lig?
    j ai bien controlé le nom des feuilles, des list, il y a juste le nombre de feuille dans le fichier qui varie .
    Par contre je viens de m apercevoir, les données sont placées dans la derniere ligne de lievre non vide (c'est ce qu'il faut), on copie Sheets ("BD")range(G:W) dans sheet "lievre".range(A: P) et en faisant copy on colle dans range (A : toute la ligne).
    Et j ai une autre macro qui ajoute une donnée en Q quand A est modifié donc il faut PEUT ETRE cibler uniquement range(A: P) donc une ligne du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WkBD.Range("G" & Lig & ":W" & Lig).Copy .Range("A" & DerLigL & ": P" & DerligL)
    en configurant DerLigL

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DerligL = sheets("Lievre").'??numero de la derniere cellule de A, la je ne sais pas
    j'espere que je m explique bien, dis moi si je suis sur la bonne piste
    Et encore merci pour ton investissement

  8. #8
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Points : 2 416
    Points
    2 416
    Par défaut
    1°) Tu DOIT employer le code que j'ai fait et ne rien changer, dans...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub LB_Commune_Click()
    'selection des LB_Demandeurs aprés clic
    Dim Lig As Long
        LB_Demandeur.Clear
        With Sheets("BD")
     
            For Lig = 2 To .Range("J65536").End(xlUp).Row
                If .Cells(Lig, 10) = LB_Commune Then
                    LB_Demandeur.AddItem .Cells(Lig, 9)
                    LB_Demandeur.List(LB_Demandeur.ListCount - 1, 1) = Lig
                End If
            Next Lig
       End With
    End Sub
    2°) La listBox LB_Demandeur doit être configurée avec 2 colonnes, dans les propriétés mettre ColumnCount = 2
    Et j ai une autre macro qui ajoute une donnée en Q quand A est modifié donc il faut PEUT ETRE cibler uniquement range(A: P) donc une ligne du style
    Non, mettre la donnée modifiée directement dans la cellule avec par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WkBD.Range("Q" & Lig) = TextBox1
    Quand tu auras adapté ça, beh oui tu seras sur la bonne piste.

    PS: si tu avais bien regardé le code tu aurais dù te demandé ce que faisait..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LB_Demandeur.List(LB_Demandeur.ListCount - 1, 1) = Lig
    et en déduire qu'il fallait 2 colonnes !!

    A+

  9. #9
    Membre actif
    Homme Profil pro
    Inscrit en
    Mars 2009
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mars 2009
    Messages : 408
    Points : 216
    Points
    216
    Par défaut
    Merci Merci ; trop fort, je n avais pas modifié LB_Commune_Click
    Bonne journée et certainement a trés bientot, j'apprend!j apprend! mais c'est grace a ce site et les conseils venant de personne comme toi que j'evolue
    encore merci

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

Discussions similaires

  1. [Débutant] Copier/ coller d'une Row d'un Datagriview 2 dans Datagridview 1
    Par jeremyvb11 dans le forum VB.NET
    Réponses: 16
    Dernier message: 14/01/2013, 20h35
  2. recherche dans une base de donnees; copier coller via une macro
    Par yannlvr dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/04/2010, 17h58
  3. Quel est la valeur d'une listbox multiselect non selectionnée?
    Par jolzeviking dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/09/2008, 11h29
  4. Tester qu'une ListBox est selectionné ?
    Par Zorgloub dans le forum Excel
    Réponses: 4
    Dernier message: 07/02/2008, 14h34
  5. [VBA-E]Faire un Copier coller d'une ListBox à une autre
    Par anubisigfrid dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 14/03/2007, 14h40

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