VB code mal ecrit

Bonjour a tous.

J'ai ecrit un code qui repete un double filtre auto (une colonne non vide et une avec une certaine valeur), puis copy toutes les lignes qui en resultent et enfin qui paste dans une autre feuille

Windows("Classeur1").Activate

    Sheets("DATA").Select
    Rows("1:1").Select

    Selection.AutoFilter
    Selection.AutoFilter Field:=5, Criteria1:="B"
    Selection.AutoFilter Field:=7, Criteria1:="<>"
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    Sheets("SW_Boys_Freestyle_50m").Select
    Range("A1").Select
    Selection.Paste

        Sheets("DATA").Select
        Application.CutCopyMode = False
        Selection.AutoFilter

apres j'incremente mes fields et je copy paste sur la feuille suivante.

et ce sur 90 feuilles...

le soucis c'est que mon code tournait bien sur des pages de test vides (ou presque) mais qu'avec des donnees dedans ca bloque a 25% du process

bien sur je pourrait decouper mon code en 5 morceaux et les exe les uns apres les autres mais j'ai peur qu'avec toutes les donnees (1500 lignes*50 colonnes, pleins de formules...) ca ne marche pas meme avec un decoupage en 10

comment ecrire ca plus proprement ?

j'avais l'idee de mettre des if

if la colonne filtree qui m'interesse est non vide then faire le copy paste ifnot passer au champs suivant

mais je ne sais pas comment l'ecrire

merci a tous pour votre aide

Salut UltrA_KichE,

Je ne suis qu'un débutant et suis probablement à coté de la plaque.

Cependant, je vois que tu fais beaucoup de copier coller et j'ai eu un problème récemment en copiant beaucoup de donnés.

Je te conseille de vider le presse papier après avoir coller tes donnés (dans ta boucle). Il parait que

Application.CutCopyMode = False 

permet d'éviter de devoir vider le presse papier mais ça ne fonctionnait pas chez moi.

(Qu'on me corrige si je me trompe)

'Cette méthode sert à vider le presse papier
Sub ViderPressePapier()
    Dim oDataObject As DataObject

    Set oDataObject = New DataObject
    oDataObject.SetText ""
    oDataObject.PutInClipboard

    Set oDataObject = Nothing
End Sub

En espérant que ça puisse t'aider,

A+

1fredlundi.doc (10.19 Ko)

Bonsoir,

Je n'ai pas trop compris les explications et sans fichier ce n'est pas facile de te proposer ce que tu veux.

essaie toutefois ton code revu comme suit :

....
Workbooks("Classeur1.xls").Activate
Sheets("DATA").Select
With Rows("1:1")
    .AutoFilter
    .AutoFilter Field:=5, Criteria1:="B"
    .AutoFilter Field:=7, Criteria1:="<>"
Range(Selection, Selection.End(xlDown)).Copy Sheets("SW_Boys_Freestyle_50m").Range("A1")
Application.CutCopyMode = False
    .AutoFilter
End With
....

Amicalement

Dan

0recopiage-v2.xlsm (24.27 Ko)

Bonsoir Dan,

notre ami UltrA_KichE, doublonne les postes, voir ce fil avec fichier

https://www.excel-pratique.com/forum/viewtopic.php?t=14107

J'aime pas trop ses manières !

Amicalement

Claude.

re,

Génial !

s'inscrire c'est bien, demander aussi mais lire la charte c'est bien aussi pour le respect du forum et de ceux qui y participent. --> https://www.excel-pratique.com/forum/viewtopic.php?t=13

Merci Claude.

Dan

Ô honorable Dan et maître dubois

je n'ai pas chercher à doubloner mon topic.

en fait chronologiquement, j'ai posé une question spécifique par rapport au grand nombre de répétition dans mon premier code

j'ai eu des suggestions j'ai essayé mais ça ne marchait pas

alors j'ai proposé ce topic pour reprendre les choses à 0, en me disant que la logique même de ma macro n'était pas bonne

Toutes mes excuses si je vous ai offensé.

Vous pouvez lock ce topic et on continue sur l'autre.

Merci de vos suggestions j'essaye de les appliquer dès tout de suite

Bonsoir,

Tu peux essayer avec ce petit code à faire evoluer selon tes besoins :

Sub proposition()

Dim fin As String

fin = Range("A65536").End(xlUp).Row 'fin te donne la derniere ligne non vide de ton fichier

For a = 3 To fin                       'ici a représente la premiere ligne

If Cells(a, 3) = "b" Then         'donc a=ligne le 3 represente la troisieme colonne = C
'si la condition est respectée alors je copie toute la ligne
Rows(a).Copy Worksheets("Feuil2").Range("A65536").End(xlUp).Offset(1, 0)
End If
Next

End Sub

Amitié

Air_2

Rechercher des sujets similaires à "code mal ecrit"