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 :

Besoin de lancer plusieurs fois la macro pour arriver au résultat final


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2016
    Messages : 12
    Points : 11
    Points
    11
    Par défaut Besoin de lancer plusieurs fois la macro pour arriver au résultat final
    Bonjour à tous,

    Je débute sur VBA, mais travaillant en gestion d'entreprise, je pense que ce serait vraiment une plus-value de savoir m'en servir. C'est pourquoi j'ai proposé à la TPE dans laquelle je travaille de monter quelques macros pour le faire gagner du temps.
    Je navigue donc entre les différents forums, je prends un petit peu par ci, par là et je fais des tests sur mes documents. Pour chaque ligne de macro, je gaspille pas mal de temps mais j'imagine qu'il faut en passer par là pour maîtriser l'outil !

    Je suis confronté à un petit soucis, j'ai un doc dans lequel j'aimerais supprimer toutes les lignes dont la celulle dans la colonne AC ne contient pas la mention "Sans suite".

    J'ai donc utilisé la ligne la plus simple que j'ai trouvé sur les forums :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For Each cellule In Range("AC2:AC150")
            If cellule.Value <> "Sans suite" Then Rows(cellule.Row).Delete
    Next
    La ligne fonctionne, seulement je dois la lancer plusieurs fois pour vraiment arriver à supprimer toutes les lignes dont la cellule de la colonne AC ne contient pas "Sans Suite". Avez-vous une idée de la raison ? Si oui, comment je pourrais réussir à lancer une seule fois en me permettant d'en venir à mon résultat final.

    Merci à tous,

    Jeannot

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 664
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 664
    Points : 5 798
    Points
    5 798
    Par défaut
    Bonjour,
    Essaye ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i=150 to 2 step -1
     If range("AC" & i).Value <> "Sans suite" Then Rows(i).Delete
     Next
    Pense à utiliser la balise code (#) pour poster ton code, c'est beaucoup plus lisible.

    Quand tu supprime des lignes, ligne par ligne il faut toujours le faire "à l'envers", par exemple si tes lignes 3 et 4 doivent être supprimée, la macro va supprimer la 3 puis décaler les lignes la 4 devient donc la 3 et est ignorée par la maccro, alors qu'en bouclant à l'envers toutes les lignes sont bien traitées.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2016
    Messages : 12
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par halaster08 Voir le message
    Pense à utiliser la balise code (#) pour poster ton code, c'est beaucoup plus lisible
    Pas de souci !

    Effectivement cette macro marche ! Merci beaucoup. Pourrais-tu m'expliquer comment as-tu procédé ? Je saisie pas l'intérêt de la ligne 1, même si j'ai l'impression que celle elle qui fait tout la différence !!

    Merciii

  4. #4
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 664
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 664
    Points : 5 798
    Points
    5 798
    Par défaut
    J'étais justement en train d'éditer mon message précédent pour l'explication.

    Si tu lance la maccro en mode pas à pas (f8) tu devrais bien voir la différence.

  5. #5
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut
    Bonjour, bonjour !

    Citation Envoyé par Jeannot40260 Voir le message
    La ligne fonctionne, seulement je dois la lancer plusieurs fois pour vraiment arriver à supprimer toutes les lignes
    C'est juste une erreur de conception, pourtant de simple logique !

    Et s'il y a de nombreuses lignes à traiter / supprimer, c'est une méthode à éviter !
    Mieux vaut utiliser une simple formule de calculs pour marquer les lignes à conserver (0) ou à supprimer (1)
    puis trier la plage sur la colonne marqueur puis effacer en une fois le bloc des lignes à 1 …

    Voilà, voilà !

    _________________________________________________________________________________________________________
    Je suis Paris, Nice, Bruxelles, Charlie, …

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2016
    Messages : 12
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par Marc-L Voir le message
    Bonjour, bonjour !

    [INDENT]C'est juste une erreur de conception, pourtant de simple logique !
    Et s'il y a de nombreuses lignes à traiter / supprimer, c'est une méthode à éviter !
    Bonjour,

    Merci de votre réponse. Je pense que mes lacunes en VBA on eu raison de moi. Ce que je ne comprends pas, c'est comment la macro ne traitait pas toutes mes lignes (une soixantaine) quand j'ai mis les cellules à traiter entre les lignes 2 et 150.

    Ce que vous proposer serait une macro du type suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     Columns("T:T").Select
        Selection.AutoFilter
        ActiveSheet.Range("$T$1:$T$44").AutoFilter Field:=1, Criteria1:="Commandé"
        Rows("2:4").Select
        Range("J2").Activate
        Selection.Delete Shift:=xlUp
        ActiveSheet.Range("$T$1:$T$41").AutoFilter Field:=1

  7. #7
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 664
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 664
    Points : 5 798
    Points
    5 798
    Par défaut
    Ce que je ne comprends pas, c'est comment la macro ne traitait pas toutes mes lignes (une soixantaine) quand j'ai mis les cellules à traiter entre les lignes 2 et 150.
    Execute la macro en mode pas à pas (F8) et comprendra mieux.
    Tu fais de la supression ligne par ligne, donc ,si tu commence par les premières lignes, quand tu supprime une ligne le reste des lignes se décale automatiquement, mais le boucle ne vois pas ce détail et continue sur l'indice suivant ce qui reviens a sauter une ligne à chaque fois que tu en supprime une. Donc a chaque fois que tu as deux lignes consécutives a supprimer il ne t'en traite qu'un seule. D'où les restes.
    Dans l'autre sens il y a aussi un décalage mais des lignes déjà traités donc pas de problème.

    Petit schéma d'explication:
    Nom : exemple.png
Affichages : 534
Taille : 5,5 Ko
    C'est plus clair?


    Oui l'utilisation du filtre est une alternative à ce problème, et son utilisation est plus rapide pour un gros volume de données car pas de boucle et une seule suppression.

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2016
    Messages : 12
    Points : 11
    Points
    11
    Par défaut Merci
    Oui Halaster, c'est beaucoup plus clair !

    Je te remercie. Ca va rentrer ! Grâce à vous, j'ai livré ma première macro à mon employer qui est très satisfait ! S'il savait comment je galère !!

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

Discussions similaires

  1. Réponses: 22
    Dernier message: 15/12/2010, 01h15
  2. Réponses: 6
    Dernier message: 13/01/2010, 16h28
  3. [C#][ActiveX] Lancer plusieurs fois le contrôle
    Par Nico1987 dans le forum ASP.NET
    Réponses: 4
    Dernier message: 04/02/2009, 16h15
  4. Lancer plusieurs fois la meme thread
    Par andromeda dans le forum Concurrence et multi-thread
    Réponses: 19
    Dernier message: 26/09/2007, 13h32
  5. Réponses: 23
    Dernier message: 08/02/2006, 09h15

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