Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

VBA : boucler sur des cellules répondant à plusieurs critères

6 réponses
Avatar
Misange
Coucou,

J'ai un tableau qui ressemble à ça:

A B C
2 2 liba
2 3 libb
2 4 libc
2 0 libd
2 0 libe
2 0 libf
3 5 libg
4 6 libh
4 0 libi
5 7 libj

en A les n°s peuvent être répétés (mais ils sont toujours regroupés par
valeurs et en ordre croissant)
En B tous les numéros sont différents, sauf le 0 qui est présent
plusieurs fois, y compris parfois avec un même numéro de la colonne A
En C des libellés avec des textes différents.

Je connais le N° de commande (colonneA) J'ai besoin d'extraire par VBA
et avec une boucle successivement tous les libellés correspondant à une
N° 0 en colonne B pour les recopier sur une autre feuille.

Autrement dit dans l'exemple ci-dessus, in fine je dois trouver pour le
N° de commande 2

2 0 libd
2 0 libe

ou bien pour le N° de commande 4
4 0 libj

Avec un seul critère de recherche (valeur en colonneB=0), range.find
fait très bien l'affaire. Mais avec 2 ? (colonneA=2 et colonneB=0)

Merci du coup de main !


--
Misange migrateuse
XlWiki : Participez à un travail collaboratif sur excel !
http://xlwiki.free.fr/wiki
http://www.excelabo.net

6 réponses

Avatar
JB
Bonsoir,

Avec Filtre élabroré:

Sub Macro1()
Sheets("BD").Range("A1:C10000").AdvancedFilter Action:=xlFilterCopy,
_
CriteriaRange:=Sheets("Extract").Range("F1:G2"), _
CopyToRange:=Sheets("Extract").Range("A1:C1")
End Sub

http://cjoint.com/?dEufcvOPrv

JB

On 30 mar, 19:45, Misange wrote:
Coucou,

J'ai un tableau qui ressemble à ça:

A B C
2 2 liba
2 3 libb
2 4 libc
2 0 libd
2 0 libe
2 0 libf
3 5 libg
4 6 libh
4 0 libi
5 7 libj

en A les n°s peuvent être répétés (mais ils sont toujours regro upés par
valeurs et en ordre croissant)
En B tous les numéros sont différents, sauf le 0 qui est présent
plusieurs fois, y compris parfois avec un même numéro de la colonne A
En C des libellés avec des textes différents.

Je connais le N° de commande (colonneA) J'ai besoin d'extraire par VBA
et avec une boucle successivement tous les libellés correspondant à une
N° 0 en colonne B pour les recopier sur une autre feuille.

Autrement dit dans l'exemple ci-dessus, in fine je dois trouver pour le
N° de commande 2

2 0 libd
2 0 libe

ou bien pour le N° de commande 4
4 0 libj

Avec un seul critère de recherche (valeur en colonneB=0), range.find
fait très bien l'affaire. Mais avec 2 ? (colonneA=2 et colonneB=0)

Merci du coup de main !

--
Misange migrateuse
XlWiki : Participez à un travail collaboratif sur excel !http://xlwiki. free.fr/wikihttp://www.excelabo.net


Avatar
JB
Si la colonne B contient 0 ou vide:

http://cjoint.com/?dEuql4Poc1

JB

On 30 mar, 19:45, Misange wrote:
Coucou,

J'ai un tableau qui ressemble à ça:

A B C
2 2 liba
2 3 libb
2 4 libc
2 0 libd
2 0 libe
2 0 libf
3 5 libg
4 6 libh
4 0 libi
5 7 libj

en A les n°s peuvent être répétés (mais ils sont toujours regro upés par
valeurs et en ordre croissant)
En B tous les numéros sont différents, sauf le 0 qui est présent
plusieurs fois, y compris parfois avec un même numéro de la colonne A
En C des libellés avec des textes différents.

Je connais le N° de commande (colonneA) J'ai besoin d'extraire par VBA
et avec une boucle successivement tous les libellés correspondant à une
N° 0 en colonne B pour les recopier sur une autre feuille.

Autrement dit dans l'exemple ci-dessus, in fine je dois trouver pour le
N° de commande 2

2 0 libd
2 0 libe

ou bien pour le N° de commande 4
4 0 libj

Avec un seul critère de recherche (valeur en colonneB=0), range.find
fait très bien l'affaire. Mais avec 2 ? (colonneA=2 et colonneB=0)

Merci du coup de main !

--
Misange migrateuse
XlWiki : Participez à un travail collaboratif sur excel !http://xlwiki. free.fr/wikihttp://www.excelabo.net


Avatar
Misange
mimi ;-) te dit merci !
j'avais pas pensé au filtre élaboré en VBA et pourtant c'est pile poil
la bonne idée. thanks et bon WE

Misange migrateuse
XlWiki : Participez à un travail collaboratif sur excel !
http://xlwiki.free.fr/wiki
http://www.excelabo.net

Bonsoir,

Avec Filtre élabroré:

Sub Macro1()
Sheets("BD").Range("A1:C10000").AdvancedFilter Action:=xlFilterCopy,
_
CriteriaRange:=Sheets("Extract").Range("F1:G2"), _
CopyToRange:=Sheets("Extract").Range("A1:C1")
End Sub

http://cjoint.com/?dEufcvOPrv

JB

On 30 mar, 19:45, Misange wrote:
Coucou,

J'ai un tableau qui ressemble à ça:

A B C
2 2 liba
2 3 libb
2 4 libc
2 0 libd
2 0 libe
2 0 libf
3 5 libg
4 6 libh
4 0 libi
5 7 libj

en A les n°s peuvent être répétés (mais ils sont toujours regroupés par
valeurs et en ordre croissant)
En B tous les numéros sont différents, sauf le 0 qui est présent
plusieurs fois, y compris parfois avec un même numéro de la colonne A
En C des libellés avec des textes différents.

Je connais le N° de commande (colonneA) J'ai besoin d'extraire par VBA
et avec une boucle successivement tous les libellés correspondant à une
N° 0 en colonne B pour les recopier sur une autre feuille.

Autrement dit dans l'exemple ci-dessus, in fine je dois trouver pour le
N° de commande 2

2 0 libd
2 0 libe

ou bien pour le N° de commande 4
4 0 libj

Avec un seul critère de recherche (valeur en colonneB=0), range.find
fait très bien l'affaire. Mais avec 2 ? (colonneA=2 et colonneB=0)

Merci du coup de main !

--
Misange migrateuse
XlWiki : Participez à un travail collaboratif sur excel !http://xlwiki.free.fr/wikihttp://www.excelabo.net






Avatar
Misange
RE moi, sur le même problème... le filtre élaboré n'étant pas très aisé
à mettre en oeuvre dans le contexte

Je mets un exemple pour que ce soit plus clair.
http://cjoint.com/?ecsvrvvGF2

En quelques mots : je compile en un seul tableau les 6 autres que
j'importe depuis notre logiciel de compta :

Chaque commande a un numéro (num_com) et dans cette commande, chaque
item commandé a un N° de ligne de commande (num_lign). Ces num_lign sont
séquentiels et uniques.
A chaque commande (num_com) correspond une facture et sur cette facture
on a le détail facturé pour chaque ligne de commande (num_lign).
Il arrive que sur la facture il y ait des lignes qui n'existaient pas
sur la commande. C'est par exemple le cas s'il y a un avoir fait par le
fournisseur. Notre logiciel de compta leur donne alors un numéro de
ligne = 0
Dans l'exemple ça n'est le cas que pour la commande N°2.

Je compile tout ça de façon à avoir sur une seule ligne tout ce qui
correspond à un numéro de ligne de commande donné. Evidemment, je
regroupe tout ça par numéro de commande pour pouvoir plus facilement
pointer les trucs zarbis.

En feuille transfert ce que j'ai obtenu, en feuille cequejevoudrais et
bien... Ce que je voudrais ! En fait la différence entre les deux c'est
ce que j'ai surligné en jaune. Mon problème étant d'incorporer dans ce
tableau les lignes facturées qui ont un N° 0.

A part faire un copier coller ;-) est ce que vous auriez une idée d'une
faon de procéder ?
Merci de vos lumières...

Misange migrateuse
XlWiki : Participez à un travail collaboratif sur excel !
http://xlwiki.free.fr/wiki
http://www.excelabo.net

Coucou,

J'ai un tableau qui ressemble à ça:

A B C
2 2 liba
2 3 libb
2 4 libc
2 0 libd
2 0 libe
2 0 libf
3 5 libg
4 6 libh
4 0 libi
5 7 libj

en A les n°s peuvent être répétés (mais ils sont toujours regroupés par
valeurs et en ordre croissant)
En B tous les numéros sont différents, sauf le 0 qui est présent
plusieurs fois, y compris parfois avec un même numéro de la colonne A
En C des libellés avec des textes différents.

Je connais le N° de commande (colonneA) J'ai besoin d'extraire par VBA
et avec une boucle successivement tous les libellés correspondant à une
N° 0 en colonne B pour les recopier sur une autre feuille.

Autrement dit dans l'exemple ci-dessus, in fine je dois trouver pour le
N° de commande 2

2 0 libd
2 0 libe

ou bien pour le N° de commande 4
4 0 libj

Avec un seul critère de recherche (valeur en colonneB=0), range.find
fait très bien l'affaire. Mais avec 2 ? (colonneA=2 et colonneB=0)

Merci du coup de main !




Avatar
JB
Bonsoir Misange,

Je ne suis pas sûr d'avoir compris.

Sub compile()
Application.DisplayAlerts = False
Sheets("temp").Delete
Sheets("transfert").Copy before:=Sheets(2)
ActiveSheet.Name = "temp"
Sheets("detfact").Select
For Each c In Range([B2], [B65000].End(xlUp))
If c = 0 Then
ligne = Sheets("temp").[A65000].End(xlUp).Row + 1
Sheets("temp").Cells(ligne, 1) = c.Offset(0, -1)
Sheets("temp").Cells(ligne, 15) = c
Sheets("temp").Cells(ligne, 23) = c.Offset(0, 2)
Sheets("temp").Cells(ligne, 24) = c.Offset(0, 3)
Sheets("temp").Cells(ligne, 25) = c.Offset(0, 4)
End If
Next c
Sheets("temp").Select
Range("A1:Z10000").Sort Key1:=Range("A2"), Order1:=xlAscending,
Header:=xlGuess
End Sub

http://cjoint.com/?ectFAFaHI6

JB


On 2 avr, 18:37, Misange wrote:
RE moi, sur le même problème... le filtre élaboré n'étant pas t rès aisé
à mettre en oeuvre dans le contexte

Je mets un exemple pour que ce soit plus clair.http://cjoint.com/?ecsvrvv GF2

En quelques mots : je compile en un seul tableau les 6 autres que
j'importe depuis notre logiciel de compta :

Chaque commande a un numéro (num_com) et dans cette commande, chaque
item commandé a un N° de ligne de commande (num_lign). Ces num_lign s ont
séquentiels et uniques.
A chaque commande (num_com) correspond une facture et sur cette facture
on a le détail facturé pour chaque ligne de commande (num_lign).
Il arrive que sur la facture il y ait des lignes qui n'existaient pas
sur la commande. C'est par exemple le cas s'il y a un avoir fait par le
fournisseur. Notre logiciel de compta leur donne alors un numéro de
ligne = 0
Dans l'exemple ça n'est le cas que pour la commande N°2.

Je compile tout ça de façon à avoir sur une seule ligne tout ce qui
correspond à un numéro de ligne de commande donné. Evidemment, je
regroupe tout ça par numéro de commande pour pouvoir plus facilement
pointer les trucs zarbis.

En feuille transfert ce que j'ai obtenu, en feuille cequejevoudrais et
bien... Ce que je voudrais ! En fait la différence entre les deux c'est
ce que j'ai surligné en jaune. Mon problème étant d'incorporer dans ce
tableau les lignes facturées qui ont un N° 0.

A part faire un copier coller ;-) est ce que vous auriez une idée d'une
faon de procéder ?
Merci de vos lumières...

Misange migrateuse
XlWiki : Participez à un travail collaboratif sur excel !http://xlwiki. free.fr/wikihttp://www.excelabo.net




Coucou,

J'ai un tableau qui ressemble à ça:

A B C
2 2 liba
2 3 libb
2 4 libc
2 0 libd
2 0 libe
2 0 libf
3 5 libg
4 6 libh
4 0 libi
5 7 libj

en A les n°s peuvent être répétés (mais ils sont toujours reg roupés par
valeurs et en ordre croissant)
En B tous les numéros sont différents, sauf le 0 qui est présent
plusieurs fois, y compris parfois avec un même numéro de la colonne A
En C des libellés avec des textes différents.

Je connais le N° de commande (colonneA) J'ai besoin d'extraire par VBA
et avec une boucle successivement tous les libellés correspondant à une
N° 0 en colonne B pour les recopier sur une autre feuille.

Autrement dit dans l'exemple ci-dessus, in fine je dois trouver pour le
N° de commande 2

2 0 libd
2 0 libe

ou bien pour le N° de commande 4
4 0 libj

Avec un seul critère de recherche (valeur en colonneB=0), range.find
fait très bien l'affaire. Mais avec 2 ? (colonneA=2 et colonneB=0)

Merci du coup de main !- Masquer le texte des messages précédents -


- Afficher le texte des messages précédents -



Avatar
Misange
mais si si t'as très bien compris !
je revérifie tout ça demain mais ça m'a l'air tout bon
merci encore

Misange migrateuse
XlWiki : Participez à un travail collaboratif sur excel !
http://xlwiki.free.fr/wiki
http://www.excelabo.net

Bonsoir Misange,

Je ne suis pas sûr d'avoir compris.

Sub compile()
Application.DisplayAlerts = False
Sheets("temp").Delete
Sheets("transfert").Copy before:=Sheets(2)
ActiveSheet.Name = "temp"
Sheets("detfact").Select
For Each c In Range([B2], [B65000].End(xlUp))
If c = 0 Then
ligne = Sheets("temp").[A65000].End(xlUp).Row + 1
Sheets("temp").Cells(ligne, 1) = c.Offset(0, -1)
Sheets("temp").Cells(ligne, 15) = c
Sheets("temp").Cells(ligne, 23) = c.Offset(0, 2)
Sheets("temp").Cells(ligne, 24) = c.Offset(0, 3)
Sheets("temp").Cells(ligne, 25) = c.Offset(0, 4)
End If
Next c
Sheets("temp").Select
Range("A1:Z10000").Sort Key1:=Range("A2"), Order1:=xlAscending,
Header:=xlGuess
End Sub

http://cjoint.com/?ectFAFaHI6

JB


On 2 avr, 18:37, Misange wrote:
RE moi, sur le même problème... le filtre élaboré n'étant pas très aisé
à mettre en oeuvre dans le contexte

Je mets un exemple pour que ce soit plus clair.http://cjoint.com/?ecsvrvvGF2

En quelques mots : je compile en un seul tableau les 6 autres que
j'importe depuis notre logiciel de compta :

Chaque commande a un numéro (num_com) et dans cette commande, chaque
item commandé a un N° de ligne de commande (num_lign). Ces num_lign sont
séquentiels et uniques.
A chaque commande (num_com) correspond une facture et sur cette facture
on a le détail facturé pour chaque ligne de commande (num_lign).
Il arrive que sur la facture il y ait des lignes qui n'existaient pas
sur la commande. C'est par exemple le cas s'il y a un avoir fait par le
fournisseur. Notre logiciel de compta leur donne alors un numéro de
ligne = 0
Dans l'exemple ça n'est le cas que pour la commande N°2.

Je compile tout ça de façon à avoir sur une seule ligne tout ce qui
correspond à un numéro de ligne de commande donné. Evidemment, je
regroupe tout ça par numéro de commande pour pouvoir plus facilement
pointer les trucs zarbis.

En feuille transfert ce que j'ai obtenu, en feuille cequejevoudrais et
bien... Ce que je voudrais ! En fait la différence entre les deux c'est
ce que j'ai surligné en jaune. Mon problème étant d'incorporer dans ce
tableau les lignes facturées qui ont un N° 0.

A part faire un copier coller ;-) est ce que vous auriez une idée d'une
faon de procéder ?
Merci de vos lumières...

Misange migrateuse
XlWiki : Participez à un travail collaboratif sur excel !http://xlwiki.free.fr/wikihttp://www.excelabo.net




Coucou,
J'ai un tableau qui ressemble à ça:
A B C
2 2 liba
2 3 libb
2 4 libc
2 0 libd
2 0 libe
2 0 libf
3 5 libg
4 6 libh
4 0 libi
5 7 libj
en A les n°s peuvent être répétés (mais ils sont toujours regroupés par
valeurs et en ordre croissant)
En B tous les numéros sont différents, sauf le 0 qui est présent
plusieurs fois, y compris parfois avec un même numéro de la colonne A
En C des libellés avec des textes différents.
Je connais le N° de commande (colonneA) J'ai besoin d'extraire par VBA
et avec une boucle successivement tous les libellés correspondant à une
N° 0 en colonne B pour les recopier sur une autre feuille.
Autrement dit dans l'exemple ci-dessus, in fine je dois trouver pour le
N° de commande 2
2 0 libd
2 0 libe
ou bien pour le N° de commande 4
4 0 libj
Avec un seul critère de recherche (valeur en colonneB=0), range.find
fait très bien l'affaire. Mais avec 2 ? (colonneA=2 et colonneB=0)
Merci du coup de main !- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -