Récupérer des données sous plusieurs conditions

  • Initiateur de la discussion Initiateur de la discussion mouftie
  • 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 !

mouftie

XLDnaute Junior
Bonjour,
J'ai déjà posté pour un pb similaire 🙄
https://www.excel-downloads.com/threads/recuperer-des-donnees-sous-condition.208779/
mais maintenant les utilisateurs ont changé d'avis...
D'un critère, ils sont passé à 5
Les critères sont : tous les N° qui commence par 328 + tous les 3204862 + tous les 3209022 + tous les 32007522 + tous les 32007522 + tous les 3202851.

Comme j'ai déjà tous ceux qui commencent par 328, j'ai voulu refaire une procédure complémentaire.
J'ai donc dans un premier temps essayé de modifier ma procédure avec
Code:
If Cells(Lign, 3) = "3204862" Or "3209022" Or "3200752" Or "3202851" Then
mais il n'y a aucune sélection de faite, tout le fichier est copier.

Alors j'ai essayé de passer par un filtre du genre :
Code:
    ActiveSheet.Range("$B$16:$H$" & derlig).AutoFilter Field:=2, _
        Criteria1:="3200752", Operator:=xlOr, Criteria2:="3202851", Operator:=xlOr, Criteria3:="3209022"
Ca fonctionne bien pour 2 critères, mais il bloque à partir de 3 (j'en ai 4).

Qq'un a t'il une idée pour me dépanner, svp.
Si possible, une procédure avec les 5 critères serait l'idéale, sinon, juste pour les 4 N°.
Merci

Je remets le lien vers mon fichier test : Ce lien n'existe plus
 
Re : Récupérer des données sous plusieurs conditions

bonjour mouftie

Code:
Sub es()
Dim t(), t1(), x As Long, i As Long, y As Long
 t = Feuil2.Range("b17:h" & Feuil2.Cells(Rows.Count, 2).End(xlUp).Row)
 ReDim t1(1 To UBound(t), 1 To 7)
 For i = 1 To UBound(t)
 If Left(t(i, 2), 3) = 328 Or t(i, 2) = 3204862 Or t(i, 2) = 3209022 _
 Or t(i, 2) = 32007522 Or t(i, 2) = 3202851 Then
 x = x + 1
 For y = 1 To 7: t1(x, y) = t(i, y): Next y
 End If
 Next i
 Feuil1.Cells.ClearContents
 Feuil1.[A1].Resize(x, 7) = t1
End Sub
 
Re : Récupérer des données sous plusieurs conditions

Bonjour Laetitia,
Merci beaucoup, c'est parfait et avec une sacré rapidité (tablo virtuel oblige)
Je me permets de remettre ton code avec des explications et un exemple au 1er critère trouvé pour ceux qui ne comprennent pas tout, comme moi ;>
Code:
Sub es()
Dim t(), t1(), x As Long, i As Long, y As Long
' détermination de la plage de travail
 t = Feuil2.Range("b17:h" & Feuil2.Cells(Rows.Count, 2).End(xlUp).Row)
 ReDim t1(1 To UBound(t), 1 To 7)   'Définition d'1 tablo variable sur 7 colones et t lignes
    For i = 1 To UBound(t)    'UBound = fct renvoie la limite sup du tablo (Nb de Lg)
        ' si les cell de la colonne 2 contiennent 1 des critères
        If Left(t(i, 2), 3) = 328 Or t(i, 2) = 3204862 Or t(i, 2) = 3209022 _
            Or t(i, 2) = 32007522 Or t(i, 2) = 3202851 Then
            'ligne svte
            x = x + 1
                'pour les colonnes 1 à 7 de t
                For y = 1 To 7: t1(x, y) = t(i, y): Next y  'ex à partir de i=4 cond ok
                'Explication détaillée à l'aide de la touche F8
                'F8 => For y = 1 To 7        (pour les colonnes 1 à 7)
                'F8 => : t1(x, y) = t(i, y)  (t1(x,y) = vide t(i,y) = 1ère col sect
                'F8 => : Next y              (col suivte y=2)
                'F8 => : t1(x, y) = t(i, y)  (t1(x,y) = vide t(i,y) = 2eme col P
                'F8 => : Next y              (col suivte y=3) ... jusqu'à 7ème col
        End If
    Next i                                    'i=5
 Feuil1.Cells.ClearContents     'efface la feuille d'arrivée des données
 Feuil1.[A1].Resize(x, 7) = t1  'affecte les données en mémoire (sans mise en forme)
End Sub
et encore une fois 1000 mercis
 
Re : Récupérer des données sous plusieurs conditions

Bonjour et Merci JBarbe,
je suis contente d'avoir les 2 versions, je ne suis pas sure de pouvoir refaire toute seule la solution de Laetitia... 😕
Mais je ne désespère pas.

Merci à vous 2 donc.
 
Re : Récupérer des données sous plusieurs conditions

Re Bonjour Laetitia,
J'ai essayé de reprendre votre procédure, mais j'ai un pb pour reporter les données sur un autre fichier
à la place de
Code:
Feuil1.Cells.ClearContents     'efface la feuille d'arrivée des données
 Feuil1.[A1].Resize(x, 7) = t1  'affecte les données en mémoire (sans mise en forme)
j'ai mis
Code:
Workbooks("Class V2.xlsm").Activate
'Sheets("PostAg").Select
'Range("B1").End(xlDown).Offset(1, 0).Resize(x, 5) = t1   'dernière ligne du tableau
je n'ai jamais utilisé la méthode Resize...

PS mon nouveau fichier contient 5 colonnes, j'ai donc remplacé 7 par 5

Pouvez-vous m'aider, svp ?
Merci
 
Re : Récupérer des données sous plusieurs conditions

re tous 🙂
comme je comprends ??
si tu as 5 colonnes tu pars toujours de la colonne B donc b17 dans ton exemple jusqu' a colonne F

Code:
Sub es()
Dim t(), t1(), x As Long, i As Long, y As Long, z As Long
 t = Feuil2.Range("b17:f" & Feuil2.Cells(Rows.Count, 2).End(xlUp).Row)
 ReDim t1(1 To UBound(t), 1 To 5)
 For i = 1 To UBound(t)
 If Left(t(i, 2), 3) = 328 Or t(i, 2) = 3204862 Or t(i, 2) = 3209022 _
 Or t(i, 2) = 32007522 Or t(i, 2) = 3202851 Then
 x = x + 1
 For y = 1 To 5: t1(x, y) = t(i, y): Next y
 End If
 Next i
 Workbooks("Class V2.xlsm").Sheets("PostAg") _
 .Range("b" & Rows.Count).End(3)(2).Resize(x, 5) = t1
End Sub

attention suppose classeur Class V2 deja ouvert....... si fermer code different ADO liaison temp ect..
 
Re : Récupérer des données sous plusieurs conditions

Bonjour,
Oui le classeur est ouvert ; je rentre et j'essaie...
dans 2heures
Merci

Comme convenu, j'ai testé, mais le pb est le même que pour moi : Erreur défini par l'application ou par l'objet et la partie
Code:
 Workbooks("Class V2.xlsm").Sheets("PostAg") _
 .Range("b" & Rows.Count).End(3)(2).Resize(x, 5) = t1
est surlignée.
Pouvez-vous m'expliquer "End(3)(2)".
Merci
 
Dernière édition:
Re : Récupérer des données sous plusieurs conditions

re tous
bizarre j'ai pas ce pb....j'ai cree un fichier nom Class V2 feuil PostAg
attention il faut les noms exact

tu as rien change dans le code ???
as tu deja essaye avec ton fichier que ta mis en exemple ???

moi dans l'exemple les donnees sont sur la feuil2 code_name qui dans ton cas correspond a la feuille (sheet1 (2))

si tu boucle pas la bonne feuille... erreur

ou si pas de donnees qui correspondent au critere le tablo va etre vide.... erreur egalement


si toutes c'est verif ok

essai deja de mettre en debut de code

On Error Resume Next

Sub es()
Dim t(), t1(), x As Long, i As Long, y As Long
On Error Resume Next
t = Feuil2.Range("b17:f" & Feuil2.Cells(Rows.Count, 2).End(xlUp).Row)

ect...


apres on verra pour traiter si tablo vide & le reste pour ecrire differament
 
Re : Récupérer des données sous plusieurs conditions

Bonjour Laeticia
Effectivement, j'ai créé un nouveau fichier Class V2 et ça fonctionne ; puis j'ai repris l'ancien, ça fonctionne ???
Je pense que c'est suite à un incident produit sur Excel, j'aurai du relancer l'ordi...
Cela ne peut pas être une erreur de nom car j'ai coller le nom du fichier à partir d'un enregistrer sous et copie/coller de l'onglet (aucune saisie - je suis dyslexique j'évite la saisie quand je peux).
Donc désolée de vous avoir fait recommencer pour rien. 😕
Encore merci, c'est hyper rapide, pour un fichier de 470 lignes et pour récupérer 12 lignes dans un autre classeur, ça met 0,003s 😱


pour info aux "ignares" comme moi :
End(3)(2) = End(xlUp).Offset(1, 0) => positionne en B2, puis F5 B3, B4...
End(3)(4) = End(xlUp).Offset(2, 0) => positionne en B4, puis F5 B7, B10...
sur une feuille vide
 
- 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

J
Réponses
4
Affichages
1 K
jmten92
J
G
Réponses
7
Affichages
3 K
G
3
Réponses
10
Affichages
1 K
3
H
Réponses
2
Affichages
7 K
H
F
Réponses
0
Affichages
13 K
floflo2411
F
M
Réponses
4
Affichages
2 K
Mattjans
M
A
Réponses
5
Affichages
1 K
Retour