IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Macro filtre copie erronée


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2009
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 46
    Par défaut Macro filtre copie erronée
    Bonjour Forum

    Je n'arrive pas à localiser l'erreur sur la macro suivante:


    Pourquoi les lettres autres que P, T, M, O sont prisent en considération
    Crdt

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Bonjour

    C'est plus productif de placer le code de la macro sur le forum, plutôt que de placer ton fichier en pièce jointe.

    Il faudrait détailler ce que tu souhaites réaliser. Voici ta macro:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Sub copie()
    Dim plage As Range, cel As Range
    Dim dlg As Integer
    Set plage = Range("C2:C" & Range("C65536").End(xlUp).Row)
    For Each cel In plage
    Select Case cel.value
    Case Is = "T": course = "Trot"
    Case Is = "O": course = "Obstacle"
    Case Is = "P": course = "Plat"
    Case Is = "M": course = "Monte"
    End Select
    dlg = Worksheets(course).Range("A65536").End(xlUp).Row + 1
    Range(Cells(cel.Row, 1), Cells(cel.Row, 7)).Copy Worksheets(course).Range("A" & dlg)
    Next
    Sheets("Courses").Range("A2:G" & Range("A65536").End(xlUp).Row).ClearContents
    End Sub
    Je suppose que tu souhaites que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dlg = Worksheets(course).Range("A65536").End(xlUp).Row + 1
    Range(Cells(cel.Row, 1), Cells(cel.Row, 7)).Copy Worksheets(course).Range("A" & dlg)
    ne soit réalisé que pour les lettres T, O, P, M

    Dès lors, si c'est cela, tu peux utiliser ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Sub copie()
    Dim plage As Range, cel As Range
    Dim dlg As Integer
    Set plage = Range("C2:C" & Range("C65536").End(xlUp).Row)
    For Each cel In plage
    Select Case cel
        Case "T": course = "Trot"
        Case "O": course = "Obstacle"
        Case "P": course = "Plat"
        Case "M": course = "Monte"
        Case Else: course = ""
    End Select
    if course<>"" then
        dlg = Worksheets(course).Range("A65536").End(xlUp).Row + 1
        Range(Cells(cel.Row, 1), Cells(cel.Row, 7)).Copy
        Worksheets(course).Range("A" & dlg)
    end if
    Next
    Sheets("Courses").Range("A2:G" & Range("A65536").End(xlUp).Row).ClearContents
    End Sub
    Tu peux aussi te passer de is = dans le case, ce n'est pas nécessaire.

    Note que je n'ai pas vu la déclaration de Course. Si tu travailles sans la déclaration explicite de tes variables, tu devras affronter pas mal de problèmes de débogage un jour ou l'autre.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  3. #3
    Membre averti
    Inscrit en
    Octobre 2009
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 46
    Par défaut
    Re
    Merci Pierre Fauconnier, mais ya un probleme,
    quand je clique sur sauver c'est la premiere ligne qui est simplement selectionnée! est un message d'erreur s'affiche:

    Erreur d'execution '438'
    Proprieté ou methode non gérée par cet objet
    Voir la ligne soulignée qui est en jaune en debogage:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Sub copie()
    Dim plage As Range, cel As Range
    Dim dlg As Integer
    Set plage = Range("C2:C" & Range("C65536").End(xlUp).Row)
    For Each cel In plage
    Select Case cel
        Case "T": course = "Trot"
        Case "O": course = "Obstacle"
        Case "P": course = "Plat"
        Case "M": course = "Monte"
        Case Else: course = ""
    End Select
    If course <> "" Then
        dlg = Worksheets(course).Range("A65536").End(xlUp).Row + 1
        Range(Cells(cel.Row, 1), Cells(cel.Row, 7)).Copy
        Worksheets(course).Range ("A" & dlg)
    End If
    Next
    Sheets("Course").Range("A2:G" & Range("A65536").End(xlUp).Row).ClearContents
    End Sub
    J'ai changé le nom de la feuille courses vers course
    Crdt

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Désolé. Il y a un _ qui s'est perdu en route.

    Les bonnes lignes sont
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Range(Cells(cel.Row, 1), Cells(cel.Row, 7)).Copy _
    Worksheets(Course).Range ("A" & dlg)
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  5. #5
    Membre averti
    Inscrit en
    Octobre 2009
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 46
    Par défaut
    Re

    Merci Pierre

    C'est réglé le probleme, sauf que!
    Si je voulais que les lignes autres que PTMO ne disparaissent pas mais restent dans la feuille course?

    Possible?

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Tu as une ligne avec ClearContents en dehors de la boucle. Il faudrait la placer à l'intérieur de For... Next, juste avant le Next et l'adapter pour qu'elle ne nettoie que les lignes qui contiennent T,O, P ou M...

    Attention que ClearContents vide les lignes, mais ne les supprime pas...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Macro filtres successifs d'un TCD selon une plage de cellules, +copy-paste
    Par Faust13 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 14/08/2017, 20h42
  2. Macro qui copie une page et la modifie
    Par craac dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 05/10/2007, 10h14
  3. macro filtre auto
    Par Jojonini dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 06/09/2007, 11h43
  4. Liaison ou macros de copie-mise en page, il faut choisir
    Par dilejeu dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/06/2007, 11h50
  5. Macro de copie de céllules
    Par Zotto dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 30/04/2007, 14h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo