Copier des lignes en fonction d'un critère

  • Initiateur de la discussion Initiateur de la discussion breitzou
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

breitzou

XLDnaute Occasionnel
Bonsoir le forum,🙂

après avoir essayé les filtres élaborés conseillés par les "forumeurs", cette solution ne me convient pas. J'ai mis en pièce jointe le fichier dans lequel ma requête est expliquée.

Pour faire rapide, je souhaiterais récupérer les lignes de données de la feuille 1 et les copier dans la feuille 2 et cela en fonction d'un choix qui s'effectue soit dans une cellule (feuille 2), soit au moyen d'un userform (feuille 2). Je ne sais pas lequel de ces deux choix est le plus judicieux. Le bouton et le userform est crée ainsi qu'une p'tite macro dans la feuille 1 concernant les dates de saisie.
Ce que j'ai pu trouver sur le forum ne correspond pas à ce que je souhaite, c'est pour cela que je me tourne vers les discussions.🙂

Merci d'avance pour le temps que vous voudrez bien consacrer à mon Pb.😉

Breitzou
 

Pièces jointes

Re : Copier des lignes en fonction d'un critère

Bonjour Systmd,🙂

je viens de découvrir ta réponse à ma requête. C'est tout simplement ENORME !!!🙂
De plus, j'ai même le choix entre les deux solutions. 😀
Un grand, grand, grand merci à toi, d'avoir pris le temps de m'aider.
Je vais, au retour du boulot tout à l'heure, essayer de comprendre le code.
Merci encore Systmd.😉

Bonne journée🙂

Breitzou
 
Re : Copier des lignes en fonction d'un critère

Bonjour le forum,🙂

je me permets d'appeler encore à l'aide car la solution proposée par Systmd (à qui je renouvelle mes remerciements!!!) fonctionne parfaitement mais je n'arrive pas à rajouter des choix supplémentaires dans les deux combobox !!!
Je m'arrache les cheveux depuis un certain temps pour essayer de comprendre mais je n'y parviens pas. Je pense néanmoins que la solution est relativement simple mais je ne la vois pas. Alors, je suis fana pour une explication sur le sujet.

Ah, les débutants, j'vous jure!!!😉

Merci encore pour le temps que vous voudrez bien me consacrer.

Breitzou
 

Pièces jointes

Re : Copier des lignes en fonction d'un critère

Bonjour,

Je pense que ton problème se situe dans la mise à jour du Combo "Site"

Je suis parti du principe que tu connaissais la liste des sites.

Regarde Feuil3 pour les explications de la gestion des noms des ComboBox
 
Re : Copier des lignes en fonction d'un critère

Bonjour systend,breitzou, et le forum

Voici une solution

a placer dans le Userform

Code:
Private Sub UserForm_Initialize()
nts
  Dim Cell As Range   
    'Supprime les données existantes dans le ComboBox
    Me.CbSite.Clear
     
    'Boucle sur les cellules de la plage A2:A5000 pour
    'alimenter le ComboBox
    For Each Cell In Worksheets("données").Range("A2:A5000")
        Me.CbSite = Cell
        'remplissage sans doublons
        If Me.CbSite.ListIndex = -1 Then _
            Me.CbSite.AddItem Cell
    Next Cell
End Sub

ta CbSite est chargée, quelques soit le Nbrs de lignes Col A de
la Feuil "Données" et Triée Sans Doublons,tu n'a rien besoin de faire d'autre

A l'avenir dans tes Noms attribué, évite de mettre des accents

Par contre il faut que tu supprime dans les "Propriétés" de la "CbSite"
le "nom" "site" ,sinon ça bug


Tu regarde ce que j'ai fait et tu fais idem pour l'autre Cbx

Cordialement

Zut, j'ai oublié le Code Tri

En finalité ça donne cela

Code:
Private Sub UserForm_Initialize()
  Dim Cell As Range
    'Supprime les données existantes dans le ComboBox
    Me.CbSite.Clear
    'Boucle sur les cellules de la plage A2:A5000 pour
    'alimenter le ComboBox
    For Each Cell In Worksheets("données").Range("A2:A5000")
        Me.CbSite = Cell
        'remplissage sans doublons
        If Me.CbSite.ListIndex = -1 Then _
            Me.CbSite.AddItem Cell
    Next Cell
'--Tri
 Set f = Sheets("Données")
  Set MonDico = CreateObject("Scripting.Dictionary")
  For Each c In Range(f.[A2], f.[A65000].End(xlUp))
    If c.Value <> "" Then MonDico.Item(c.Value) = c.Value
  Next c
  temp = MonDico.items
  Call Tri(temp, LBound(temp), UBound(temp))
  Me.CbSite.List = temp
End Sub

Sub Tri(a, gauc, droi) ' Quick sort
  ref = a((gauc + droi) \ 2)
  g = gauc: d = droi
  Do
     Do While a(g) < ref: g = g + 1: Loop
     Do While ref < a(d): d = d - 1: Loop
     If g <= d Then
        temp = a(g): a(g) = a(d): a(d) = temp
        g = g + 1: d = d - 1
     End If
   Loop While g <= d
   If g < droi Then Call Tri(a, g, droi)
   If gauc < d Then Call Tri(a, gauc, d)


End Sub

milles excuses
 
Dernière édition:
Re : Copier des lignes en fonction d'un critère

Bonjour à tous


Une autre façon de remplir une combo (sans boucle mais avec doublons s'il y en a 😉)

Code:
Private Sub UserForm_Initialize()
Dim t
t = Range([A1], [A65536].End(xlUp))
With Me.ComboBox1
    .Clear
    .List = t
End With
End Sub
 
Re : Copier des lignes en fonction d'un critère

Bonjour Systmd, VaucluseImmo et Stapple1600,🙂

merci pour votre aide à tous.
J'ai adapté vos solutions les unes après les autres pour les essayer.
Systmd, je ne vois pas où se trouve l'onglet formule puis gestionaire de noms. Ce qui est dommage parce que ta solution semble laisser une liberté de choix facile à mettre en oeuvre.
Vaucluse Immo et Stapple 1600 : vos solutions sont super géniales mais vu mon grand niveau en VBA, j'arrive à l'adapter à la combox1 mais pas à la combobox2. J'ai mis en PJ ce que j'ai tenté de faire en renommant la liste.

Merci encore pour votre aide à tous les 3.🙂

Breitzou
 

Pièces jointes

Re : Copier des lignes en fonction d'un critère

Re
@ breitzou : Désolé je t'ai donné la façon Xl2007

Pour les version inférieur à 2007 il faut aller dans l'onglet Insertion/ Nom puis définir

@ vaucluse immo : ta solution fonctionne parfaitement, sauf qu'a l'initialisation des 2 combos il va se passer un certain temps (Trop long à mon goût)
Dans ton exemple tu n'utilise que 4999 lignes et si tu augmente ce nombre de ligne l'affichage sera lent.
 
Dernière modification par un modérateur:
Re : Copier des lignes en fonction d'un critère

tu aurais pris le code que je t'ai donné, tu n'aurais plus eu besoin
de remplir tes Zones de Listes en feuil3
Tu rempli ta Bdd "Données" et basta, ta combo ce charge auto,sans doublons Triée
oiu tu pouvais aussi, avec Doublons, et Triée
mais bon c'est ton choix

Voici un exemple, avec un bouton Efface Données du filtre
 

Pièces jointes

Dernière édition:
Re : Copier des lignes en fonction d'un critère

Re Vaucluse Immo, Systmd, Stapple 1600, le forum🙂


Systmd, j'ai bien compris le principe de définition des données. C'est simple et c'est quelquechose que je pourrai réitérer. Merci beaucoup Systmd pour ton aide.
Vaucluse Immo, ton code est tout simplement magique pour moi. Franchement, il va falloir que je me penche longuement dessus pour le comprendre. Effectivement, le principe du bouton qui permet de réinitialiser un tableau vide est super. Merci encore pour ton aide.

En revanche, est-il possible de copier également les bordures du tableau pour avoir exactement le quadrillage adapté au nombre de lignes copiées dans l'onglet filtre.

Merci encore pour votre aide😉

Breitzou
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
16
Affichages
583
Retour