RESOLU "couper" de lignes sur autre feuille selon critères - VB/VBA/VBS - Programmation
Marsh Posté le 16-11-2005 à 17:32:47
Salut peanutz,
Pour que l'on puisse t'aider il va falloir que tu sois un peu plus pécise...
Tu utilises quelle version d'excel ?
Ensuite dans le titre du sujet il vaudrait mieux que tu pose la question, car tous les posts sont pour un besoin d'aide.
Si tu nous donnais le code que tu as dejà écrit, ce serait mieux.
Ensuite essaye de préciser un peu ton problème :
les feuilles sur les quelles tu veux écrire existent deja ? faut se placer à la fin pour copier ? tout effacer ? ta colone à insérer elle doit se placer ou ?
un truc pour bien poster est de lire les régles du forum programation ici
bon courage
Marsh Posté le 17-11-2005 à 08:47:01
Merci pour ta réponse Watashi
Voilà ce que j'ai fait :
Sub
Rows("1:1" ).Select
Selection.AutoFilter Field:=15, Criteria1:="<1,5", Operator:=xlAnd
Selection.AutoFilter Field:=18, Criteria1:="<10", Operator:=xlAnd
Cells.Select
Selection.Copy
Sheets.Add
ActiveSheet.Paste
Sheets("Feuil1" ).Select
Sheets("Feuil1" ).Name = "ca<1,5eteff.<10"
Columns("B:B" ).Select
Application.CutCopyMode = False
Selection.NumberFormat = "00000000000000"
Range("A1" ).Select
Sheets("export" ).Select
Selection.ClearContents
Sheets("ca<1,5eteff.<10" ).Select
Rows("1:1" ).Select
Selection.Copy
Sheets("export" ).Select
Rows("1:1" ).Select
Range("H1" ).Activate
ActiveSheet.Paste
ActiveWindow.ScrollColumn = 1
Range("A2" ).Select
Sheets("ca<1,5eteff.<10" ).Select
Range("A2" ).Select
Sheets("export" ).Select
End Sub
Evidemment ça ne fonctionne pas...
C'est sous Excel 2000.
Et je ne sais pas comment intituler mon post !
Merci pour ton lien pour les règles du forum aussi.
Bon, je vais essayer de trouver mieux pour ce script... peut être en utilisant le filtre élaboré ???
Marsh Posté le 17-11-2005 à 09:50:14
bonjour peanutz,
Maintenant je comprends mieux ce que tu veux faire et donc t'aider.
Ton message pourrait s'intituler copie de ligne sur une autre feuille et suppression par exemple.
Pour ta macro tu avais déjà bien avancé, voilà celle que je te propose :
Code :
|
Une chose que je n'ai pas repris c'est ton numberformat sur la colone B. Tu pourras l'ajouter en fin de macro au besoin.
bon courage
Marsh Posté le 17-11-2005 à 12:21:08
ouah impressionnant !
(j'étais loin du compte)
génial mais j'ai oublié de préciser un truc ! les cellules vides de la colonne CA 2004 ne doivent pas être considérées comme < 1,5 !
j'imagine qu'il faut changer qqch par là
Do While Sheets("export" ).Cells(l, 1) <> "" 'fait tant que n'est pas vide
'Si le CA est < à 1.5 et si eff <10
genre ajouter une formule ou ???
oh dieu du vba, as tu une idée ???
Marsh Posté le 17-11-2005 à 14:01:02
peanutz a écrit : (j'étais loin du compte) |
non pas tant que ça tu as essayé et tu es tombée sur les bonnes fonctions...
Code :
|
Ca c'est pour faire toutes les lignes de ton tableau. Tant que la cellule colone A n'est pas vide ça recommnce.
Pour ce qui est de ne pas prendre en compte les CA=0 ou CA="", il faut ça :
Code :
|
peanutz a écrit : oh dieu du vba, as tu une idée ??? |
Ta Déesse te salue:jap: lollllllllll
Marsh Posté le 17-11-2005 à 15:46:44
ok merci pour tout !
de cette expérience magique, je décidai de me mettre sérieusement à la tâche en reprenant ton exemple, car j'ai une quantité phénoménale de tris à faire selon une quantité phénoménale d'autres critères.
donc, pour moi ça donne :
Sub Groupe()
'Tes variable pour les valeur de CA et Effectif
Dim Caconso, infogpe, Siegesocial, NomFeuil
Caconso = oui
infogpe = oui
Siegesocial = oui
NomFeuil = "caconso=" & Caconso & "infogpe=" & infogpe & "siegesocial=" & Siegesocial
'Mise en place de la nouvelle feuille
Sheets.Add after:=Sheets(Worksheets.Count)
ActiveSheet.Name = NomFeuil
'mise en place de la ligne d'intitulé de colone
Sheets("export" ).Activate
Rows(1).Select
Selection.Copy
Sheets(NomFeuil).Select
Range("A1" ).Select
ActiveSheet.Paste
Application.CutCopyMode = False
'Ta variable de ligne pour le test de valeur
Dim l
l = 2 'car ta première ligne ce sont tes intitulés
'ta variable de linge pour la recopie
Dim lig
lig = 2
'on met en place une boucle pour passer tes valeur
'colone 15 CA et colone 21 Eff en revue
Do While Sheets("export" ).Cells(l, 1) <> "" 'fait tant que n'est pas vide
'Si le CAconso est = à oui et si infogpe =oui et si siegesocial=oui
If Sheets("export" ).Cells(l, 25) = Caconso And _
Sheets("export" ).Cells(l, 26) = infogpe And _
Sheets("export" ).Cells(l, 27) = Siegesocial Then
'tu copie la ligne dans la nouvelle feuille
Sheets("export" ).Activate
Rows(l).Select
Selection.Copy
Sheets(NomFeuil).Activate
Cells(lig, 1).Select
ActiveSheet.Paste
Application.CutCopyMode = False
'tu ajoute 1 à ligne pour la prochaine copie
lig = lig + 1
'tu supprime la ligne
Sheets("export" ).Rows(l).Delete
Else
'tu passes à la ligne suivante
l = l + 1
End If
Loop
End Sub
ce code ne fonctionnne que si les cellules contiennent des nombres, ou bien c moi qui comprend vraiment rien ?
pardonne une pauvre pécheresse, déesse !
Marsh Posté le 17-11-2005 à 15:51:16
Je ne suis pas une déesse (désolé...), mais si G tout bien compris ça marche avec toutes sortes de contenus... C juste à base de copier/coller (je sais pas si couper/coller serais pas plus rapide, au lieu de copier/coller/effacer...je dis ça je me suis pas penché sur la question...)
Marsh Posté le 17-11-2005 à 15:56:51
toutes sortes de contenus ?
alors je ne sais pas pourquoi ça va pas.
format de cellule ?
Marsh Posté le 17-11-2005 à 16:15:56
ziold a écrit : C juste à base de copier/coller (je sais pas si couper/coller serais pas plus rapide, au lieu de copier/coller/effacer...je dis ça je me suis pas penché sur la question...) |
C 'est une idée aussi mais couper coller ne supprime pas la ligne il faudrait de nouveau la supprimer la ligne vide ou retrier les données pour enlever les lignes blanches du tableau Pour la rapidité je sais pas ...
peanutz a écrit : toutes sortes de contenus ? |
oui quelque soit ton contenu numérique ou lettré ça marche. Mais
peanutz a écrit : Caconso = oui |
pour définir des variables lettrées il faut des guillemets
Code :
|
bon courage
Marsh Posté le 17-11-2005 à 16:19:25
et ben oui j'y avais pensé.
le pb c qu'il me dit : erreur d'éxecution1004, le nom de la feuille que vs avez tapé n'est pas valide.
au moment de créer la feuille il aime pas les ""
comment la renommer ?
Marsh Posté le 17-11-2005 à 16:39:00
et oui le nombre de lettres pour le nom des onglets est limité à 31 il me semble
Marsh Posté le 17-11-2005 à 16:49:05
AAAHHH !!!! merci du tuyau
et MERCI pour TOUT d'ailleurs...
Marsh Posté le 17-11-2005 à 17:15:47
de rien
marque juste résolu dans le titre de ton post ça pourras en aider d'autres.
Marsh Posté le 18-11-2005 à 09:15:27
watashi a écrit : C 'est une idée aussi mais couper coller ne supprime pas la ligne il faudrait de nouveau la supprimer la ligne vide ou retrier les données pour enlever les lignes blanches du tableau Pour la rapidité je sais pas ... |
Oui bien vu... donc pas mieux
Marsh Posté le 18-11-2005 à 14:12:22
bien bien j'ai pu faire pas mal de tris et je vais gagner un temps fou avec cette macro.
et je vais bientôt pouvoir écrire "résolu" ds le titre...
car je ne sais pas si ça rentre dans ce sujet mais je voudrais savoir encore si...
au lieu de coller mes lignes sélectionnées selon mes critères sur une nouvelle feuille,..
je pouvais les coller suite à une série de données déjà présentes sur une autre feuille....
pour ce faire il me faudrait quelque chose qui lui dise... tant que ce n'est pas vide, ne colle pas, mais dès que c vide, vas-y !
j'abuse ? mais non mais non....
Marsh Posté le 18-11-2005 à 14:20:15
peanutz a écrit : bien bien j'ai pu faire pas mal de tris et je vais gagner un temps fou avec cette macro. |
Pas de problème et ça entre dans le cadre
Code :
|
Le lig =2 est à remplacer par le numéro de première ligne vide soit :
Code :
|
attention à ne pas garder la création de feuille
bon courage
Marsh Posté le 18-11-2005 à 15:10:17
j'arrive pas ! voilà ce que j'ai fait
Sub Groupe2()
'Tes variable pour les valeur de CA Infogpe et Siège social
Dim Caconso, infogpe, Siegesocial
Caconso = "oui"
infogpe = "non"
Siegesocial = "non"
'Position sur la feuille groupe1
Sheets("Groupe1" ).Select
'mise en place de la ligne d'intitulé de colone
Sheets("CAs_OK" ).Activate
Rows(1).Select
Selection.Copy
Sheets("Groupe1" ).Select
Range("A1" ).Select
ActiveSheet.Paste
Application.CutCopyMode = False
'Ta variable de ligne pour le test de valeur
Dim l
l = 2 'car ta première ligne ce sont tes intitulés
'ta variable de linge pour la recopie
Dim lig
lig = Sheets(X).Cells(1, 1).End(xlDown).Row + 1
'on met en place une boucle pour passer tes valeur
Do While Sheets("CAs_OK" ).Cells(l, 1) <> "" 'fait tant que n'est pas vide
'Si le CAconso est = oui et si infogpe = oui et si siegesocial = oui
If Sheets("CAs_OK" ).Cells(l, 25) = Caconso And _
Sheets("CAs_OK" ).Cells(l, 26) = infogpe And _
Sheets("CAs_OK" ).Cells(l, 27) = Siegesocial Then
'tu copie la ligne dans la nouvelle feuille
Sheets("CAs_OK" ).Activate
Rows(l).Select
Selection.Copy
Sheets("Groupe1" ).Activate
Cells(lig, 1).Select
ActiveSheet.Paste
Application.CutCopyMode = False
'tu ajoute 1 à ligne pour la prochaine copie
lig = lig + 1
'tu supprime la ligne
Sheets("CAs_OK" ).Rows(l).Delete
Else
'tu passes à la ligne suivante
l = l + 1
End If
Loop
End Sub
il me dit que l'indice n'appartient pas à la sélection !
Marsh Posté le 18-11-2005 à 15:18:44
ah laisse tomber j'ai trouvé ! ma feuille ne s'appelle pas X ! (lol)
Marsh Posté le 18-11-2005 à 15:25:55
J'avais même pas eu le temps d'ouvrir internet explorer que tu avais trouvé lol
Marsh Posté le 18-11-2005 à 15:30:36
pour que tout soit parfait, il faudrait que tout s'enchaîne.
à la fin de la macro, comment lui dire d'en commencer une autre ?
watashi tu te débrouilles tellement bien ... c tellement génial quand ça marche... j'ai envie de tout automatiser !
c contagieux la prog !
Marsh Posté le 18-11-2005 à 15:30:56
ReplyMarsh Posté le 18-11-2005 à 15:40:29
merci beberf pour le lien, il est sympa et donne de quoi bosser !
Marsh Posté le 18-11-2005 à 15:42:59
Je connaissais pas ce site Je la fafouillerai la semaine prochaine.
peanutz a écrit : pour que tout soit parfait, il faudrait que tout s'enchaîne. |
Oui c'est clair que pas mal de boulot peut être fait en automatisant. Je me debrouilles, mais j'en passe du temps à chercher, à torturer l'aide dans tous les sens...
Sur mon fichier qui me permet de traiter les données j'ai fait un bouton traitement qui me lance 8 macros les unes après les autres
Code :
|
Bon courage
Marsh Posté le 16-11-2005 à 12:41:43
bonjour
je voudrais créer une Macro qui puisse effectuer les choses suivantes :
avec un filtre auto, où figurent les colonnes nb1 et nb2, sélectionner les critères : nb1>=1,5 et nb2>=10
sélectionner toutes les lignes correspondant à ces critères dans la base de données
les copier sur une autre feuille
supprimer les lignes sélectionnées sur la feuille initiale
puis
insérer une colonne intitulée "var" où je pourrais écrire une formule du genre =(B2-C2)/B2
et l'étendre pour toutes les lignes non vides dans ma base de données
est-ce possible ?
merci pour votre aide, je suis vraiment débutante dans les macros. tout ce que j'ai réussi à faire c'est insérier une ligne d'entête, mettre en page et définir les formats de cellule !
"le savoir est la seule matière qui s'accroit quand on la partage" (Socrate)
Message édité par peanutz le 18-11-2005 à 16:49:07