Créer une macro spéciale dans Excel
Dernière réponse : dans Programmation
Bonjour,
Voilà j'ai besoin de votre aide pour créer une macro spéciale.
Je vous explique. Chaque mercredi matin, je vais chercher un document sur internet pour mon travail.
Il comporte toujours les mêmes titres de colonnes et essentiellement les mêmes données. Mon problème survient parce que j'ai besoin que la macro choisisse des lignes vide dans certaines colonnes et non seulement la sélection que je fais lors de l'enregistrement de la macro. J'ai essayé d'insérer une image pour vous montrer mais, il semble que ça ne fonctionne pas pour la coller ici (ou je ne sais pas comment faire autrement que ctrl+v!
)
Je vous explique donc ce que je dois faire, que j'aimerais automatiser:
Je crée 2 nouveau onglets que je nomme H et S.
Je sélection le rapport complet et je le copie/colle dans la feuille S.
Dans la feuille S, je supprime les lignes 1 à 3.
Je fais un tri par Supplier Style afin de supprimer toutes les lignes sans Supplier Style.
Je coupe/colle les styles 9-19-22-23 et 25 dans la feuille H.
À nouveau dans la feuille S, je fais un tri par Activity Type afin de supprimer toutes les lignes san Activity Type.
J'insère quelques lignes entre les Demand et les Replenishment Order car on ne veux pas ces derniers (mais on ne veut pas les supprimer non plus.)
Je sélectionne toutes les des Demand et Customer Order (ils ont un Activity Type) et je fais un tri par Dock Date.
Puis j'insère 4 lignes pour diviser les semaines (du dimanche au lundi) de la semaine courante et les 3 prochaines et ainsi faire le total de chaque semaine.
On refait la même chose avec la feuille H.
Bon je sais que ça ne semble pas clair
, mais en le faisant pas à pas, on comprend mieux. Là mon problème c'est que je ne sais pas comment vous mettre des images ou le fichier en entier ici. Alors bref, si quelqu'un veux bien m'aider écrivez moi à carolyne0105..at..gmail.com et je vous enverrai le fichier. Svp Svp
Quand je fais moi même la macro et que je supprime les lignes sans supplier style ou activity type, le système enregistre seulement les lignes que je supprime ... et non le fait qu'elle soit vide dans cette colonne spécifique.
Merci beaucoup!
J'attend vos réponses avec impatience. Au travail, on m'a répondu que ce n'était pas une priorité.
Voilà j'ai besoin de votre aide pour créer une macro spéciale.
Je vous explique. Chaque mercredi matin, je vais chercher un document sur internet pour mon travail.
Il comporte toujours les mêmes titres de colonnes et essentiellement les mêmes données. Mon problème survient parce que j'ai besoin que la macro choisisse des lignes vide dans certaines colonnes et non seulement la sélection que je fais lors de l'enregistrement de la macro. J'ai essayé d'insérer une image pour vous montrer mais, il semble que ça ne fonctionne pas pour la coller ici (ou je ne sais pas comment faire autrement que ctrl+v!
)Je vous explique donc ce que je dois faire, que j'aimerais automatiser:
Je crée 2 nouveau onglets que je nomme H et S.
Je sélection le rapport complet et je le copie/colle dans la feuille S.
Dans la feuille S, je supprime les lignes 1 à 3.
Je fais un tri par Supplier Style afin de supprimer toutes les lignes sans Supplier Style.
Je coupe/colle les styles 9-19-22-23 et 25 dans la feuille H.
À nouveau dans la feuille S, je fais un tri par Activity Type afin de supprimer toutes les lignes san Activity Type.
J'insère quelques lignes entre les Demand et les Replenishment Order car on ne veux pas ces derniers (mais on ne veut pas les supprimer non plus.)
Je sélectionne toutes les des Demand et Customer Order (ils ont un Activity Type) et je fais un tri par Dock Date.
Puis j'insère 4 lignes pour diviser les semaines (du dimanche au lundi) de la semaine courante et les 3 prochaines et ainsi faire le total de chaque semaine.
On refait la même chose avec la feuille H.
Bon je sais que ça ne semble pas clair
, mais en le faisant pas à pas, on comprend mieux. Là mon problème c'est que je ne sais pas comment vous mettre des images ou le fichier en entier ici. Alors bref, si quelqu'un veux bien m'aider écrivez moi à carolyne0105..at..gmail.com et je vous enverrai le fichier. Svp Svp
Quand je fais moi même la macro et que je supprime les lignes sans supplier style ou activity type, le système enregistre seulement les lignes que je supprime ... et non le fait qu'elle soit vide dans cette colonne spécifique.
Merci beaucoup!
J'attend vos réponses avec impatience. Au travail, on m'a répondu que ce n'était pas une priorité.
Autres pages sur : creer macro speciale excel
Lassé par la pub ? Créez un compte
l'enregistreur de macro est une base de travail dans ton cas (enfin, dans tous les cas).
Il faut allez nettoyer son code (bha oui, il est pas toujours optimisé (les .Select en autres) et le modifier pour qu'il fasse exactement ce que tu veux.
pour mettre un fichier expemple a disposition, utilise par exemple des service comme rapidshare ...
Il faut allez nettoyer son code (bha oui, il est pas toujours optimisé (les .Select en autres) et le modifier pour qu'il fasse exactement ce que tu veux.
pour mettre un fichier expemple a disposition, utilise par exemple des service comme rapidshare ...
(J'ai supprimé le @ de ton adresse mail, histoire que tu ne te fasses pas spammer.)
Il ne me semble pas que ce soit bien compliqué. Les conseils de KangOl sont avisés : utilise l'enregistreur de macro. Juste une précision, ce que tu appelles un tri est en fait un filtre. Je me trompe ?
Plutôt que ton fichier et/ou des copies d'écrans, publie le code de ta macro, on l'optimisera ensemble.
Il ne me semble pas que ce soit bien compliqué. Les conseils de KangOl sont avisés : utilise l'enregistreur de macro. Juste une précision, ce que tu appelles un tri est en fait un filtre. Je me trompe ?
Plutôt que ton fichier et/ou des copies d'écrans, publie le code de ta macro, on l'optimisera ensemble.
Bonjour,
Merci pour vos conseils! En fait je ne sais pas s'il y a vraiment une différence, mais bon j'utilise dans Excel "données""trier" et là je choisi par quoi je veux trier.
Alors comme je disais précédemment, mon problème c'est que la macro enregistre le fait que je supprime les cellules X à Z au lieu du fait qu'elle soient vide lors des tri par Supplier Style, Activity Type et Dock Date. Le système voit seulement Rows("1049:1109").select
Bon je vous laisse m'aider!
Voici le code de ma macro.
(Comme je n'y connais rien, si vous la modifier, pouvez vous svp la réinscrire ici au complet?Comme ça je n'aurai qu'à copier/coller. merci!)
Merci pour vos conseils! En fait je ne sais pas s'il y a vraiment une différence, mais bon j'utilise dans Excel "données""trier" et là je choisi par quoi je veux trier.
Alors comme je disais précédemment, mon problème c'est que la macro enregistre le fait que je supprime les cellules X à Z au lieu du fait qu'elle soient vide lors des tri par Supplier Style, Activity Type et Dock Date. Le système voit seulement Rows("1049:1109").select
Bon je vous laisse m'aider!
Voici le code de ma macro.
(Comme je n'y connais rien, si vous la modifier, pouvez vous svp la réinscrire ici au complet?Comme ça je n'aurai qu'à copier/coller. merci!)
Sub MacroTestReport() ' ' MacroTestReport Macro ' Macro enregistrée le 2007-08-06 par CAROLYNE0105 ' ' Sheets("Over Under Report").Select Sheets.Add Sheets("Over Under Report").Select Sheets.Add Sheets("Feuil1").Select Sheets("Feuil1").Name = "H" Sheets("Feuil2").Select Sheets("Feuil2").Name = "S" Sheets("Over Under Report").Select Cells.Select Selection.Copy Sheets("S").Select ActiveSheet.Paste Rows("1:3").Select Application.CutCopyMode = False Selection.Delete Shift:=xlUp Cells.Select Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom ActiveWindow.ScrollRow = 2139 Rows("1639:2170").Select Range("A2170").Activate Selection.Delete Shift:=xlUp Rows("1639:1639").Select ActiveWindow.SmallScroll Down:=-60 Rows("1564:1577").Select Range("A1577").Activate Selection.Cut Sheets("H").Select Range("A2").Select ActiveSheet.Paste Range("A16").Select Sheets("S").Select Selection.Delete Shift:=xlUp ActiveWindow.SmallScroll Down:=-66 Rows("1478:1513").Select Range("A1513").Activate Selection.Cut Sheets("H").Select Selection.Insert Shift:=xlDown ActiveWindow.SmallScroll Down:=30 Range("A52").Select Sheets("S").Select Selection.Delete Shift:=xlUp ActiveWindow.SmallScroll Down:=-381 Rows("1049:1109").Select Range("A1109").Activate Selection.Cut Sheets("H").Select Selection.Insert Shift:=xlDown ActiveWindow.SmallScroll Down:=54 Range("A113").Select Sheets("S").Select Selection.Delete Shift:=xlUp ActiveWindow.SmallScroll Down:=-738 Rows("230:314").Select Range("A314").Activate Selection.Cut Sheets("H").Select Selection.Insert Shift:=xlDown Sheets("S").Select Selection.Delete Shift:=xlUp ActiveWindow.ScrollRow = 1 Rows("1:1").Select Selection.Copy Sheets("H").Select ActiveWindow.SmallScroll Down:=-99 Rows("1:1").Select ActiveSheet.Paste Range("A1").Select Sheets("S").Select Cells.Select Application.CutCopyMode = False Selection.Sort Key1:=Range("E2"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom Sheets("H").Select Cells.Select Selection.Sort Key1:=Range("E2"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom Sheets("S").Select ActiveWindow.ScrollRow = 2140 ActiveWindow.SmallScroll Down:=-726 Rows("1383:1443").Select Range("A1443").Activate Selection.Delete Shift:=xlUp Sheets("H").Select ActiveWindow.ScrollRow = 170 ActiveWindow.SmallScroll Down:=6 Rows("176:198").Select Range("A198").Activate Selection.Delete Shift:=xlUp ActiveWindow.SmallScroll Down:=-45 Rows("137:137").Select Selection.Insert Shift:=xlDown With Selection.Interior .ColorIndex = 1 .Pattern = xlSolid End With Sheets("S").Select ActiveWindow.SmallScroll Down:=-225 Rows("1161:1161").Select Selection.Insert Shift:=xlDown With Selection.Interior .ColorIndex = 1 .Pattern = xlSolid End With Rows("1:1160").Select Range("A1160").Activate Selection.Sort Key1:=Range("G2"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom Sheets("H").Select Rows("1:136").Select Range("A136").Activate Selection.Sort Key1:=Range("G2"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom ActiveWindow.SmallScroll Down:=-3 ActiveWindow.ScrollRow = 1 Columns("L:L").Select With Selection.Interior .ColorIndex = 6 .Pattern = xlSolid End With Columns("G:G").Select With Selection.Interior .ColorIndex = 6 .Pattern = xlSolid End With Sheets("S").Select ActiveWindow.ScrollRow = 1 Columns("G:G").Select With Selection.Interior .ColorIndex = 6 .Pattern = xlSolid End With ActiveWindow.SmallScroll ToRight:=3 Columns("L:L").Select With Selection.Interior .ColorIndex = 6 .Pattern = xlSolid End With End Sub
Citation :
(Comme je n'y connais rien, si vous la modifier, pouvez vous svp la réinscrire ici au complet?Comme ça je n'aurai qu'à copier/coller. merci!)Relis les règles : nous ne sommes pas une société de services en ingénieurie informatique.
Passons.
Ce code est horrible. (Digne de l'enregistreur de macro, quoi.)
Mais surtout il est trop long.
Et surtout, il n'est pas du tout adapté dans un cas général.
Il faut tout refaire et pas à pas.
Je commence :
Etape 1 : Créer les feuillles S et H.
Dim nouvelle_feuille As Worksheet Set nouvelle_feuille = Worksheets.Add nouvelle_feuille.Name = "H" Set nouvelle_feuille = Worksheets.Add nouvelle_feuille.Name = "S" Set nouvelle_feuille = Nothing
Etape 2:
Citation :
Je sélection le rapport complet et je le copie/colle dans la feuille S. / Dans la feuille S, je supprime les lignes 1 à 3.Mais non. Dis ce que tu veux faire, pas ce que tu fais. En fait, tu veux copier les lignes 4 à n de "Over Under Report" vers S :
Sheets("Feuil1").Range("4:65536").Copy Destination:=Sheets("Feuil2").Cells
Etape 3 :
Citation :
Je fais un tri par Supplier Style afin de supprimer toutes les lignes sans Supplier Style.Ok, c'est un tri :
et une suppression :
Sheets("S").Cells.Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
M'enfin, c'est là que je ne comprends pas. Si tu ne veux pas les supprimer, pourquoi les supprimes-tu ?
Rows("1639:2170" ).Select Range("A2170" ).Activate Selection.Delete Shift:=xlUp
L'étape 3 est correcte. Je veux faire le tri et supprimer les lignes sans Activity Type.
Ce que je comprend du code décrit c'est qu'il supprimera les lignes 1639 à 2170.
Mon problème c'est que la semaine suivante ce ne sera peut-être pas juste ces lignes là qui seront sans Activity Type... vous me suivez? La quantité de lignes sans Activity Type (ou Supplier Style) est variable.
Et puis sinon c'est l'étape suivante que je ne veux pas supprimer des lignes; celles de Replenishment Order. C'est pourquoi j'insère une ligne entre les Replenishment Order et Demand.
Mais même si ça n'allait pas plus loin que d'insérer une ligne noire entre les RO et les demand... mon travail serait déjà tellement facilité. Vraiment! C'est formidable ce que vous faites ici.
Merci
Ce que je comprend du code décrit c'est qu'il supprimera les lignes 1639 à 2170.
Mon problème c'est que la semaine suivante ce ne sera peut-être pas juste ces lignes là qui seront sans Activity Type... vous me suivez? La quantité de lignes sans Activity Type (ou Supplier Style) est variable.
Et puis sinon c'est l'étape suivante que je ne veux pas supprimer des lignes; celles de Replenishment Order. C'est pourquoi j'insère une ligne entre les Replenishment Order et Demand.
Mais même si ça n'allait pas plus loin que d'insérer une ligne noire entre les RO et les demand... mon travail serait déjà tellement facilité. Vraiment! C'est formidable ce que vous faites ici.
Merci
Mouais
Je te relis et je me dis :
Et si tu parcourrais les lignes de "Over Under Report" une par une et que pour chacune tu vérifiais si ActivityTruc ouy SupplierMachin correspond ?
Je te relis et je me dis :
Et si tu parcourrais les lignes de "Over Under Report" une par une et que pour chacune tu vérifiais si ActivityTruc ouy SupplierMachin correspond ?
Dim H As Worksheet Dim ligneH As Long ligneH = 1 Set H = Worksheets.Add H.Name = "H" For Each ligne In Worksheets("Over Under Report").Range("4:65535").Rows If ligne.Cells(1, 1).Value = "ActivityTruc" And ligne.Cells(1, 5).Value = "SupplierMachin" Then ligne.Copy Destination = H.Rows(ligneH) ligneH = ligneH + 1 End If Next
Ah d'accord je comprend là.
Il faudrait avoir un moyen pour que je puisse vous montrer le document de départ et ce à quoi j'arrive à la fin. Parce qu'en fait, cette procédure de tri, coupage et collage, ce n'est pas moi qui l'ai écrite... alors il faudrait vraiment s'assurer qu'au final, le résultat soit le même, peut importe la façon que la macro est écrite.
Des suggestions?
Il faudrait avoir un moyen pour que je puisse vous montrer le document de départ et ce à quoi j'arrive à la fin. Parce qu'en fait, cette procédure de tri, coupage et collage, ce n'est pas moi qui l'ai écrite... alors il faudrait vraiment s'assurer qu'au final, le résultat soit le même, peut importe la façon que la macro est écrite.
Des suggestions?
Bof. Je veux bien t'aider à comprendre comment faire des choses, pas à les faire pour toi. Si tu finis par bien comprendre, ce sera pour moi une satisfaction et pour toi, l'assurance de savoir vérifier par toi-même si le résultat obtenu est celui escompté.
Si tu sais ce que tu veux faire, on va t'aider à l'obtenir.
Si tu ne sais que ce que tu veux obtenir, on ne va pas te le faire.
--------------------------------------------------------
Tu as étudié et testé le bout de code que je t'ai proposé ?
Si tu sais ce que tu veux faire, on va t'aider à l'obtenir.
Si tu ne sais que ce que tu veux obtenir, on ne va pas te le faire.
--------------------------------------------------------
Tu as étudié et testé le bout de code que je t'ai proposé ?
Bah alors de ce que je comprends, je crois qu'il serait préférable de garder toutes les étapes précédentes de la macro... sauf le bout où on lui dit de supprimer les lignes X à Z. On pourrait remplacer cette étapes par le dernier truc que tu disais.. lui faire chercher ligne par ligne les cellules vides et ensuite les supprimer. Ça reviendrait à faire ce que je parlais au début et donnerait un bon résultat vu qu'on ne change pas le reste de la procédure...
Qu'en penses-tu?
Qu'en penses-tu?
1°) La macro d'origine est très moche ! Je peux t'aider à obtenir quelque chose de fonctionnel et très clean. A quoi bon tout copier puis faire le tri plutôt que de trier puis copier seulement le nécessaire ?
2°) C'est à toi de prendre la décision. C'est ton code.
3°) Si je te propose quelque chose, tu disposes. C'est ton code. Je continuerai à t'aider, quelque soit ton choix.
4°) Si je t'impose quelque chose, tu disposes. C'est ton code. Je ne continuerai peut-être pas à t'aider. (Mais il y a d'autres membres dans ce forum, il y a même d'autres forums...)
Bon alors, ma propostion de regarder le code proposé... Ce n'est pas un bon début ?
2°) C'est à toi de prendre la décision. C'est ton code.
3°) Si je te propose quelque chose, tu disposes. C'est ton code. Je continuerai à t'aider, quelque soit ton choix.
4°) Si je t'impose quelque chose, tu disposes. C'est ton code. Je ne continuerai peut-être pas à t'aider. (Mais il y a d'autres membres dans ce forum, il y a même d'autres forums...)
Bon alors, ma propostion de regarder le code proposé... Ce n'est pas un bon début ?
Bon alors pour la macro suivante, j'ai bien vérifié les noms et tout et tout, mais il y a juste une nouvelle feuille nommée H qui se crée, rien ne se colle.
Pour le reste des formules (jusqu'à l'étape 3) ça va bien. Voici ce que ça donne de mon côté. J'ai inversé les lettre de nom de feuille pour la cause, j'ai modifié le range de 4 à 65536 car on me dit erreur 1004 les zones de copies sont de forme et tailles différentes. Je me suis donc dit copions et supprimons... je croyais m'en sortir en utilisant le code plus bas, mais je me suis retrouvé à être dans la feuille H... c'est pourquoi j'ai écris Sheets ("S")... mais ça ne fonctionne toujours pas...
Voilà, désolée du délais, j'étais partie dîner. Merci!
Dim H As Worksheet
Dim ligneH As Long
ligneH = 1
Set H = Worksheets.Add
H.Name = "H"
For Each ligne In Worksheets("Over Under Report" ).Range("4:65535" ).Rows
If ligne.Cells(1, 1).Value = "Activity Type" And ligne.Cells(1, 5).Value = "Supplier Style" Then
ligne.Copy Destination = H.Rows(ligneH)
ligneH = ligneH + 1
End If
Next
Pour le reste des formules (jusqu'à l'étape 3) ça va bien. Voici ce que ça donne de mon côté. J'ai inversé les lettre de nom de feuille pour la cause, j'ai modifié le range de 4 à 65536 car on me dit erreur 1004 les zones de copies sont de forme et tailles différentes. Je me suis donc dit copions et supprimons... je croyais m'en sortir en utilisant le code plus bas, mais je me suis retrouvé à être dans la feuille H... c'est pourquoi j'ai écris Sheets ("S")... mais ça ne fonctionne toujours pas...
Dim nouvelle_feuille As Worksheet
Set nouvelle_feuille = Worksheets.Add
nouvelle_feuille.Name = "S"
Set nouvelle_feuille = Worksheets.Add
nouvelle_feuille.Name = "H"
Set nouvelle_feuille = Nothing
Sheets("Over Under Report").Range("1:65536").Copy Destination:=Sheets("S").Cells
Sheets ("S")
Rows("1:3").Select
Selection.Delete Shift:=xlUp
Voilà, désolée du délais, j'étais partie dîner. Merci!
On a bien dit que les "Activity Type" étaient dans la colonne A (1) et que les "Supplier Style" étaient dans la colonne E. Bon, si tu veux les lignes qui ont "Activity Type" dans la colonne A et "Supplier Style" dans la colonne E, le premier code devrait fonctionner.
Pour le erreur 1004, écris ça :
Pourquoi la ligne 8 ?
Lignes 9 et 10, pourquoi sélectionner un truc pour avoir le plaisir d'utiliser Selection juste après.
Au lieu d'écrire
Bon, alors qu'est-ce qu'on fait ; Copie/Suppression ou Tri/Copie ?
Pour le erreur 1004, écris ça :
pour sélectionner une cellule de destination. Excel devrait s'y retrouver.
Sheets("Over Under Report" ).Range("4:65536" ).Copy Destination:=Sheets("S").Cells.Range("A1")
Pourquoi la ligne 8 ?
Lignes 9 et 10, pourquoi sélectionner un truc pour avoir le plaisir d'utiliser Selection juste après.
Au lieu d'écrire
Truc.Select
Selection.Action ...
Il est plus clair d'écrireSelection.Action ...
Truc.Action ...
Non ?Bon, alors qu'est-ce qu'on fait ; Copie/Suppression ou Tri/Copie ?
Ah bon on dit donc que Supplier Style est dans la colonne A (1) et que Activity Type est dan la colonne E. C'est sûrement pour ça... Je vais revérifier le code.
Pour la ligne 8 et bien c'est que j'ai copié ce que je croyais être votre code (ligne 9 et 10) et je voulais modifier. Ça montre juste que je n'y connais rien
et une suppression :
Code :
Rows("1639:2170" ).Select
Range("A2170" ).Activate
Selection.Delete Shift:=xlUp
On fait le plus cours... j'imagine tri/copie...
Bon je prend le temps de vérifier les trucs de votre message et on se tiens au courant.
Merci!
Pour la ligne 8 et bien c'est que j'ai copié ce que je croyais être votre code (ligne 9 et 10) et je voulais modifier. Ça montre juste que je n'y connais rien
et une suppression :
Code :
Rows("1639:2170" ).Select
Range("A2170" ).Activate
Selection.Delete Shift:=xlUp
On fait le plus cours... j'imagine tri/copie...
Bon je prend le temps de vérifier les trucs de votre message et on se tiens au courant.
Merci!
Dim H As Worksheet Dim ligneH As Long ligneH = 1 Set H = Worksheets.Add H.Name = "H" For Each ligne In Worksheets("Over Under Report" ).Range("4:65535" ).Rows Msgbox "Je suis sur la ligne " & ligne.Row & Chr(13) & _ "Je regarde si je trouve Activity Type dans la cellule " & ligne.Cells(1, 1).Address & Chr(13) & _ "et si je trouve Supplier Style dans la cellule " & ligne.Cells(1, 5).Address & Chr(13) & _ "Si oui, je copierai cette ligne dans la ligne " & ligneH & "de H" If ligne.Cells(1, 1).Value = "Activity Type" And ligne.Cells(1, 5).Value = "Supplier Style" Then ligne.Copy Destination = H.Rows(ligneH) ligneH = ligneH + 1 End If Next
Bah en fait je l'ai fait une couple de fois, mais je me suis pas rendu à la fin... je suppose donc que c'est pour ça que rien ne s'est collé...
Heu...je veux bien faire ctrl + pause... mais je ne connais pas ton bouton pause... c'est quelle lettre?
Anyway j'ai supprimé ton msg box (10 à 14) de la macro, inversé activity type et supplier Style et rien ne se passe quand il termine la macro... on me dit incompatibilité de type et on me montre la ligne
Heu...je veux bien faire ctrl + pause... mais je ne connais pas ton bouton pause... c'est quelle lettre?
Anyway j'ai supprimé ton msg box (10 à 14) de la macro, inversé activity type et supplier Style et rien ne se passe quand il termine la macro... on me dit incompatibilité de type et on me montre la ligne
ligne.Copy Destination = H.Rows(ligneH)
Merci.
La bonne nouvelle c'est que ça marche.
Le hic c'est qu'il copie seulement quand il trouve les mots "Supplier Style" en A et "Activity Type" ent E, par conséquent il copie seulement la ligne de titre. Il faudrait pouvoir lui dire de copier les lignes remplies mais pas les lignes vides... Tu me suis? Sûrement...
Je vais aller diner dans 15 minutes (ici il est 11h15) donc je serai de retour à 12h30.
La bonne nouvelle c'est que ça marche.
Le hic c'est qu'il copie seulement quand il trouve les mots "Supplier Style" en A et "Activity Type" ent E, par conséquent il copie seulement la ligne de titre. Il faudrait pouvoir lui dire de copier les lignes remplies mais pas les lignes vides... Tu me suis? Sûrement...
Je vais aller diner dans 15 minutes (ici il est 11h15) donc je serai de retour à 12h30.
bha alors ca non ?:
Dim H As Worksheet
Dim ligneH As Long
ligneH = 1
Set H = Worksheets.Add
H.Name = "H"
For Each ligne In Worksheets("Over Under Report" ).Range("4:65535" ).Rows
If ligne.Cells(1, 1).Value <> "" And ligne.Cells(1, 5).Value <> "" Then
ligne.Copy Destination:= H.Rows(ligneH).Cells(1, 1)
ligneH = ligneH + 1
End If
Next
Je n'avais pas compris que Supplier Style était le nom de la colonne, je croyais que c'était la valeur à trouver
Comme quoi ton idée de montrer une image était bonne
Citation :
tous les "Supplier Style" #9,19,22,23 et 25Désolé, j'ai aucune idée de ce que tu dis...
Comme nous avons fait H, tu vas faire S. D'accord ! (Tu vois c'est là que j'impose au lieu de ne que proposer
)On utilisera aussi une variable ligneS pour suivre où on en est dans S.
Il faut alors dans la boucle For ajouter un test (If) pour savoir si on est dans le cas #9,19,22,23 ou 25 pour mettre S plutôt que H en destination. Et donc incrémenter ligneS plutôt que ligneH. Est-ce clair pour toi ?
Bon alors maintenant je veux trouver les numéro de supplier style 9,19,22,23 et 25 et les avoir dans la nouvelle feuille S, mais plus dans H.
Avec votre aide, j'ai réussi à écrire:
Voici mes problèmes... je sais pas comment...
1-en partant il copy et non cut/paste (j'ai essayé : ligne.cut.paste destination ect.. mais ça n'a pas marché.
2-ensuite, eh bien yahoo il copie, mais pas seulement les lignes où le "Supplier Style" est 9,19,22,23 ou 25.
3-je sais pas pourquoi, mais on dirait qu'il termine jamais il y a pourtant un End sub à la fin de ma macro.
4- finalement, en plus, il faudrait que la ligne de titre aussi soit copiée.
Bon du moins mon affaire marche (pas bien mais bon lol) alors je suis pas si cruche finalement lol
Vous pouvez m'aider encore svp?
Bon je termine le boulot. À demain matin 8h
Avec votre aide, j'ai réussi à écrire:
ligneS = 1 Set S = Worksheets.Add S.Name = "S" For Each ligne In Worksheets("H").Range("1:65535").Rows If ligne.Cells(1, 1).Value <> "9,19,22,23,25" Then ligne.Copy Destination:=S.Rows(ligneS).Cells(1, 1) ligneS = ligneS + 1 End If Next
Voici mes problèmes... je sais pas comment...
1-en partant il copy et non cut/paste (j'ai essayé : ligne.cut.paste destination ect.. mais ça n'a pas marché.
2-ensuite, eh bien yahoo il copie, mais pas seulement les lignes où le "Supplier Style" est 9,19,22,23 ou 25.
3-je sais pas pourquoi, mais on dirait qu'il termine jamais il y a pourtant un End sub à la fin de ma macro.
4- finalement, en plus, il faudrait que la ligne de titre aussi soit copiée.
Bon du moins mon affaire marche (pas bien mais bon lol) alors je suis pas si cruche finalement lol
Vous pouvez m'aider encore svp?
Bon je termine le boulot. À demain matin 8h
If ligne.Cells(1, 1).Value <> "9,19,22,23,25" Then
Carolyne
... Je te le lis en français :Si la valeur de la cellule 1x1 de la ligne considérée est différente de "9,19, 22,23,25", alors faire ce qui suit !!!!! Meuh non !
Je t'écris ce que je crois être ce que tu veux :
If ligne.Cells(1, 1).Value = 9 Or ligne.Cells(1, 1).Value = 19 Or ligne.Cells(1, 1).Value = 22 Or ligne.Cells(1, 1).Value = 23 Or ligne.Cells(1, 1).Value = 25 Then
--------------------------------
Toujours selon le principe, on réfléchit d'abord et ensuite seulement on fait : Au lieu de copier les lignes de "Over Under Report" dans "H" puis dans "S", on va directement dispacher dans "H" ou dans "S" au départ.
Donc :
* Si on trouve quelque chose dans la cellule 1x5, (Activity Type)
* Si on trouve 9 ou 19 ou 22 ou 23 ou 25 dans la cellule 1x1 (Supplier Style) on copie dans S
* Si on trouve autre chose dans la cellule 1x1, on copie dans H
* Sinon, on ne fait rien
* Si ne on trouve rien dans la cellule 1x5, on ne fait rien.
Hé ça marche!!! J'ai réussis à le virer de bord!!!
Il y a juste à un endroit où j'ai le bon résultat, mais que la formule en donne plus que ce que je voudrais. C'est ma ligne 9... je voulais essayer de copier juste ma ligne de titre dans ma feuille S avant de vous revenir ici...Sauf que il copie l'info sur vraiment plusieurs ligne... mais les commandes d'après les écrases alors mon résultat est bon...
Comment l'auriez vous écris?
Bon voici la mienne:
Il y a juste à un endroit où j'ai le bon résultat, mais que la formule en donne plus que ce que je voudrais. C'est ma ligne 9... je voulais essayer de copier juste ma ligne de titre dans ma feuille S avant de vous revenir ici...Sauf que il copie l'info sur vraiment plusieurs ligne... mais les commandes d'après les écrases alors mon résultat est bon...
Comment l'auriez vous écris?
Bon voici la mienne:
Dim H As Worksheet
Dim ligneH As Long
ligneH = 1
Set H = Worksheets.Add
H.Name = "H"
ligneS = 1
Set S = Worksheets.Add
S.Name = "S"
Sheets("Over Under Report").Range("4:4").Copy Destination:=Sheets("S").Cells
For Each ligne In Worksheets("Over Under Report").Range("4:65535").Rows
If ligne.Cells(1, 5).Value <> "" Then
If ligne.Cells(1, 1).Value = 9 Or ligne.Cells(1, 1).Value = 19 Or ligne.Cells(1, 1).Value = 22 Or ligne.Cells(1, 1).Value = 23 Or ligne.Cells(1, 1).Value = 25 Then
ligne.Copy Destination:=S.Rows(ligneS).Cells(2, 1)
ligneS = ligneS + 1
End If
If ligne.Cells(1, 1).Value <> "" Then
ligne.Copy Destination:=H.Rows(ligneH).Cells(1, 1)
ligneH = ligneH + 1
End If
End If
Next
End Sub
Yeepee !!
J'ai ajouté les définitions (Dim) pour S que tu avais oublié.
J'ai ajouter O pour Over Under Report, c'est juste histoire de te montrer la logique.
Ligne 18 de mon code (ta ligne 9), au lieu de dire Cells, je dis Range("1:1"), la ligne 1 quoi. Du coup, je pense ligne 15 et 16 du code à commencer à la ligne 2 de S et H.
Mais Range("4:4"), c'est la ligne 4, autant écrire Rows(4). C'est que que je fais pour mettre la ligne de titre à H, ligne 19. Utilise la syntaxe qui te paraît la plus simple pour toi.
Dim H As Worksheet Dim S As Worksheet Dim O As Worksheet Dim ligneH As Long Dim ligneS As Long Set H = Worksheets.Add Set S = Worksheets.Add Set O = Worksheets("Over Under Report") H.Name = "H" S.Name = "S" ligneH = 2 ligneS = 2 O.Range("4:4").Copy Destination:=Sheets("S").Range("1:1") O.Rows(4).Copy Destination:=Sheets("H").Rows(1) For Each ligne In O.Range("4:65535").Rows If ligne.Cells(1, 5).Value <> "" Then If ligne.Cells(1, 1).Value = 4392 Or ligne.Cells(1, 1).Value = 4889 Or ligne.Cells(1, 1).Value = 4897 Or ligne.Cells(1, 1).Value = 4955 Or ligne.Cells(1, 1).Value = 5005 Then ligne.Copy Destination:=S.Rows(ligneS) ligneS = ligneS + 1 ElseIf ligne.Cells(1, 1).Value <> "" Then ligne.Copy Destination:=H.Rows(ligneH) ligneH = ligneH + 1 End If End If Next End Sub
J'ai ajouté les définitions (Dim) pour S que tu avais oublié.
J'ai ajouter O pour Over Under Report, c'est juste histoire de te montrer la logique.
Ligne 18 de mon code (ta ligne 9), au lieu de dire Cells, je dis Range("1:1"), la ligne 1 quoi. Du coup, je pense ligne 15 et 16 du code à commencer à la ligne 2 de S et H.
Mais Range("4:4"), c'est la ligne 4, autant écrire Rows(4). C'est que que je fais pour mettre la ligne de titre à H, ligne 19. Utilise la syntaxe qui te paraît la plus simple pour toi.
Sauf que là en page S... le titre est sur ligne 1, j'ai une ligne 2 blanche et l'info débute ligne 3.
Et page H... ligne 1 blanche, 2 titre et 3 les info débutes...
Il sert à quoi le ElseIf en ligne 26?
Bon après tout ça, ça commence à être plus simple et à achever...
Je voudrais trier les "Demand" et les "Customer Order" par Dock Date (1, 6) mais pas les "Replenishment Order". C'est pourquoi je devais insérer une ligne noire entre les "Demand" et les "Replenishment Order" afin de mieux visualiser où m'arrêter de sélectionner.
Et page H... ligne 1 blanche, 2 titre et 3 les info débutes...
Il sert à quoi le ElseIf en ligne 26?
Bon après tout ça, ça commence à être plus simple et à achever...
Je voudrais trier les "Demand" et les "Customer Order" par Dock Date (1, 6) mais pas les "Replenishment Order". C'est pourquoi je devais insérer une ligne noire entre les "Demand" et les "Replenishment Order" afin de mieux visualiser où m'arrêter de sélectionner.
Lassé par la pub ? Créez un compte
- Contenus similaires :
- ForumCréer macro recherche
- ForumExcel créer fichier macro
- ForumExcel macro créer feuille
- ForumExcel macro créer tableau
- ForumCréer bouton macro excel
- ForumExcel macro depuis macro
- ForumMacro excel créer classeur
- ForumMacro pour créer un graphique excel
- ForumCréer nouvelle feuille excel macro
- ForumCréer graphique macro
- Voir plus
![[:spamafote] [:spamafote]](http://m.bestofmedia.com/sfp/design/usr/fr/smilies/3e/46/spamafote.gif)
Désolé.