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

Copies de lignes d'une feuille sur une autre avec condition

8 réponses
Avatar
Pierre F.
Bonjour;

Pas tr=E8s bon en macro, j'essaie de cr=E9er la fonction suivante:

Dans un classeur de 12 feuilles (un petit inventaire), je souhaite=20
"ventiler" les lignes de la feuille 1 (les "copier") sur les diff=E9rente=
s=20
feuilles en fonction du contenu des cellules A de chaque ligne.

Si la cellule A de la feuille contient le texte "Xylo", copier cette=20
ligne sur la premi=E8re ligne disponible de la feuille No 8, nomm=E9e Xyl=
os.

Etc pour les x =E9l=E9ments de cette feuille 1

Merci de votre collaboration.

Cordialement,
Pierre F.

8 réponses

Avatar
JB
Bonsoir,

Sub inventaire()
Sheets(1).Select
Cells.SpecialCells(xlCellTypeConstants, 23).Select
For s = 2 To Sheets.Count
ligne = 1
mot = Sheets(s).Name
For Each c In Selection
If InStr(c, mot) > 0 Then
Sheets(s).Cells(ligne, 1) = c
Sheets(s).Cells(ligne, 1).Offset(0, 2) = c.Address
ligne = ligne + 1
End If
Next c
Next s
End Sub

Cordialement JB



On 24 jan, 21:42, "Pierre F." wrote:
Bonjour;

Pas très bon en macro, j'essaie de créer la fonction suivante:

Dans un classeur de 12 feuilles (un petit inventaire), je souhaite
"ventiler" les lignes de la feuille 1 (les "copier") sur les différentes
feuilles en fonction du contenu des cellules A de chaque ligne.

Si la cellule A de la feuille contient le texte "Xylo", copier cette
ligne sur la première ligne disponible de la feuille No 8, nommée Xyl os.

Etc pour les x éléments de cette feuille 1

Merci de votre collaboration.

Cordialement,
Pierre F.


Avatar
Pierre F.
Bonsoir,


Merci pour le coupe de main et la promptitude :-)

Pas très bon en macro et vba, j'ai essayé d'adapter ces lignes au
contexte de mon classeur... et ça marche pas trop bien :-)

Comme je souhaite aussi m'améliorer, je vous propose de commenter cette
procédure et vous signaler ce que je ne comprends pas... (je place mon
commentaire au-dessous de vos lignes.

Sub inventaire()
Sheets(1).Select


Aller à la feuille 1

Cells.SpecialCells(xlCellTypeConstants, 23).Select


Pas compris du tout :-((

For s = 2 To Sheets.Count


Début de boucle: depuis 2 jusqu'au nombre de feuille total?

ligne = 1


Aller ligne 1 ??
mot = Sheets(s).Name


Pas compris. Mot = celui que je cherche sur la feuille 1 ou celui de la
page sur laquelle il faut coller la ligne (ce ne sont pas forcément les
mêmes)

For Each c In Selection


Que représente c ? colonne ?? copier?

If InStr(c, mot) > 0 Then


Début de condition... Pas compris la syntaxe

Sheets(s).Cells(ligne, 1) = c
Sheets(s).Cells(ligne, 1).Offset(0, 2) = c.Address


Pas compris

ligne = ligne + 1


Ligne suivante

End If


Fin de condition
Next c


c suivant

Next s


page suivante ??

Merci.

Cordialement,
Pierre F.

Avatar
JB
Bonsoir,

Exécuter le pgm en pas à pas avec la touche F8 et placer le curseur
sur les variables.


Sub inventaire2() ' éxécuter en pas à pas avec F8
Sheets(1).Select ' sélection de feuille1
Cells.SpecialCells(xlCellTypeConstants, 23).Select ' sélection
cellules occupées seulement
For s = 2 To Sheets.Count ' de la 2e à la dernière feuille
ligne = 1 ' variable 'ligne'
mot = Sheets(s).Name ' nom de la feuille -> variable mot
For Each c In Selection ' pour chaque cellule de la sélection
If InStr(c, mot) > 0 Then ' a t-on trouvé mot dans la cellule?
Sheets(s).Cells(ligne, 1) = c ' cellule ligne et colonne 1
Sheets(s).Cells(ligne, 1).Offset(0, 1) = c.Address
ligne = ligne + 1 ' on passe à la ligne suivante
End If
Next c
Next s
End Sub

http://cjoint.com/?bztZgd1ihR

http://boisgontierj.free.fr/

JB

On 25 jan, 19:33, "Pierre F." wrote:

Bonsoir,Merci pour le coupe de main et la promptitude :-)


Pas très bon en macro et vba, j'ai essayé d'adapter ces lignes au
contexte de mon classeur... et ça marche pas trop bien :-)

Comme je souhaite aussi m'améliorer, je vous propose de commenter cette
procédure et vous signaler ce que je ne comprends pas... (je place mon
commentaire au-dessous de vos lignes.

Sub inventaire()
Sheets(1).SelectAller à la feuille 1

Cells.SpecialCells(xlCellTypeConstants, 23).SelectPas compris du tout :-((

For s = 2 To Sheets.CountDébut de boucle: depuis 2 jusqu'au nombr e de feuille total?

ligne = 1Aller ligne 1 ??

mot = Sheets(s).NamePas compris. Mot = celui que je cherche sur la feuille 1 ou celui de la
page sur laquelle il faut coller la ligne (ce ne sont pas forcément les

mêmes)

For Each c In SelectionQue représente c ? colonne ?? copier?

If InStr(c, mot) > 0 ThenDébut de condition... Pas compris la s yntaxe

Sheets(s).Cells(ligne, 1) = c
Sheets(s).Cells(ligne, 1).Offset(0, 2) = c.AddressPas compris

ligne = ligne + 1Ligne suivante

End IfFin de condition

Next cc suivant

Next spage suivante ??


Merci.

Cordialement,
Pierre F.



Avatar
Pierre F.

Exécuter le pgm en pas à pas avec la touche F8 et placer le curseur
sur les variables.


Merci pour ces explications.

Ok; j'aurais dû y penser moi-même grrrrr :-((

Trois questions encore (si j'ose abuser)...

1)Je souhaite commencer la recherche des mots clés sur la feuille 1 à la
ligne 6 et pas du tout dans les lignes 1 à 5 et exclusivement dans les
colonnes A et B.

2)Je souhaiterais copier les lignes répondant au critère non pas à la
ligne 1 puis aux suivantes, mais à la première ligne vide de la feuil le
(le numéro de cette ligne étant forcément supérieur à 5)

3) Le mot (ou la suite de caractères) cherché n'a pas forcément le même
nom que la feuille de destination.

Merci.

Cordialement,
Pierre F.

Avatar
JB
Je ne comprends pas le point 3. Comment retrouver qq chose que l'on ne
connaît pas?

http://cjoint.com/?bzwBPm5zEU

JB

On 25 jan, 21:56, "Pierre F." wrote:

Exécuter le pgm en pas à pas avec la touche F8 et placer le curseur
sur les variables.Merci pour ces explications.


Ok; j'aurais dû y penser moi-même grrrrr :-((

Trois questions encore (si j'ose abuser)...

1)Je souhaite commencer la recherche des mots clés sur la feuille 1 à la
ligne 6 et pas du tout dans les lignes 1 à 5 et exclusivement dans les
colonnes A et B.

2)Je souhaiterais copier les lignes répondant au critère non pas à la
ligne 1 puis aux suivantes, mais à la première ligne vide de la feuil le
(le numéro de cette ligne étant forcément supérieur à 5)

3) Le mot (ou la suite de caractères) cherché n'a pas forcément le même
nom que la feuille de destination.

Merci.

Cordialement,
Pierre F.



Avatar
Pierre F.
Je ne comprends pas le point 3. Comment retrouver qq chose que l'on ne
connaît pas?



Oui, c'est bien le problème... mais on sait:

Chaque feuille contient :

Lignes 1 à 4: titre spécifique, formule de calcul (somme de la colonn e
G), éléments graphiques.
Lignes 5: Les titres des colonnes

Donc lignes 1 à 5 identiques sur chaque feuille et verrouillées

Dès ligne 6, les objets sont décrits:
Col A: catégorie de l'objet (documentation, instrument, CD...
Col B: la sous catégorie (CD ou Vinyl, livre ou partition ...)
Col C: La désignation de l'objet, sa description sommaire
Col D: L'année d'achat
Col E: le nombre
Col F: le prix
...

La feuille No 1 contient les achats nouveaux (de l'année en cours) que
le responsable entre au fur et à mesure.
A la fin de l'année, lors de l'impression de l'inventaire, il faut
A) faire une impression spécifique de ces nouveaux achats
B) les ventiler dans la feuille correspondant à la bonne catégorie (o u,
parfois sous catégorie) afin que ces nouveaux achats figurent dans les
listes d'inventaires spécifiques.

Pour le point B, on peut faire facilement l'opération "à la main"...
sauf que certaines années, les achats sont nombreux; je cherche donc à
automatiser cette tâche.

Je souhaite créer une (mais peut être en faudra-t-il 12?) macro qui v a
rechercher dans les colonnes A et B des chaînes de caractère prédé finies
et spécifiques qui correspondent aux différentes catégories d'objet s(il
y en a 12 et seulement 12)
Ensuite, la ligne correspondant au critère No X sera collée dans une
feuille prédéfinie

Les libellés des différentes cellules d'une même ligne ne permetten t pas
une automatisation totale; en effet on peut trouver une ligne sur
laquelle on aura:
Catégorie : documentation
Sous catégorie: Livre
Libellé: Les disques, du vynil au mp3: quels instruments aujourd'hui? -
Jeff Blanchard
...
On voit que la colonne C contient des mots clés désignant des catég ories
et des sous-catégories...

La langue française est riche et j'ai peur de tomber sur pas mal de cas
de ce genre (il y a plus de 4000 objets dans cet inventaire (le
fichier père près de 2Mo!

Celui-là est une très court extrait.
http://cjoint.com/?bzxjTUXhVr


J'ai encore une autre question:

Lors de la copie, on voit que des adresses genre $A$6 sont collées dans
la colonne B

Cordialement,
Pierre F.

Avatar
JB
http://cjoint.com/?bAhWSVgUyv

Sub ventile()
Sheets("achatsnouv").Select
For Each c In Range("B6", [B65000].End(xlUp))
onglet = c
If onglet <> "" Then
On Error Resume Next
Range(c.Offset(0, -1), c.Offset(0, 11)).Copy _
Sheets(onglet).[A65000].End(xlUp).Offset(1, 0)
End If
Next c
End Sub

JB

On 25 jan, 23:16, "Pierre F." wrote:

Je ne comprends pas le point 3. Comment retrouver qq chose que l'on ne
connaît pas?Oui, c'est bien le problème... mais on sait:


Chaque feuille contient :

Lignes 1 à 4: titre spécifique, formule de calcul (somme de la colonne
G), éléments graphiques.
Lignes 5: Les titres des colonnes

Donc lignes 1 à 5 identiques sur chaque feuille et verrouillées

Dès ligne 6, les objets sont décrits:
Col A: catégorie de l'objet (documentation, instrument, CD...
Col B: la sous catégorie (CD ou Vinyl, livre ou partition ...)
Col C: La désignation de l'objet, sa description sommaire
Col D: L'année d'achat
Col E: le nombre
Col F: le prix
...

La feuille No 1 contient les achats nouveaux (de l'année en cours) que
le responsable entre au fur et à mesure.
A la fin de l'année, lors de l'impression de l'inventaire, il faut
A) faire une impression spécifique de ces nouveaux achats
B) les ventiler dans la feuille correspondant à la bonne catégorie (o u,
parfois sous catégorie) afin que ces nouveaux achats figurent dans les
listes d'inventaires spécifiques.

Pour le point B, on peut faire facilement l'opération "à la main"...
sauf que certaines années, les achats sont nombreux; je cherche donc à
automatiser cette tâche.

Je souhaite créer une (mais peut être en faudra-t-il 12?) macro qui va
rechercher dans les colonnes A et B des chaînes de caractère préd éfinies
et spécifiques qui correspondent aux différentes catégories d'objet s(il
y en a 12 et seulement 12)
Ensuite, la ligne correspondant au critère No X sera collée dans une
feuille prédéfinie

Les libellés des différentes cellules d'une même ligne ne permetten t pas
une automatisation totale; en effet on peut trouver une ligne sur
laquelle on aura:
Catégorie : documentation
Sous catégorie: Livre
Libellé: Les disques, du vynil au mp3: quels instruments aujourd'hui? -
Jeff Blanchard
...
On voit que la colonne C contient des mots clés désignant des catég ories
et des sous-catégories...

La langue française est riche et j'ai peur de tomber sur pas mal de cas
de ce genre (il y a plus de 4000 objets dans cet inventaire (le
fichier père près de 2Mo!

Celui-là est une très court extrait.http://cjoint.com/?bzxjTUXhVr

J'ai encore une autre question:

Lors de la copie, on voit que des adresses genre $A$6 sont collées dans
la colonne B

Cordialement,
Pierre F.



Avatar
Pierre F.
http://cjoint.com/?bAhWSVgUyv

Sub ventile()
Sheets("achatsnouv").Select
For Each c In Range("B6", [B65000].End(xlUp))
onglet = c
If onglet <> "" Then
On Error Resume Next
Range(c.Offset(0, -1), c.Offset(0, 11)).Copy _
Sheets(onglet).[A65000].End(xlUp).Offset(1, 0)
End If
Next c
End Sub


Ça, c'est magique !!!!
Génial et merci !

J'ai transféré ce pgm sur mon fichier, fais quelques essais et ça m arche
nickel!!!

J'ai juste dû modifier quelques noms de feuilles et/ou de
sous-catégories (colonne B) pour qu'ils soient parfaitement identiques
et tout roule impeccable.

Je suis même très impressionné par la sobriété de cette macro.

Encore merci.

Cordialement,
Pierre F.