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 trop longue si 2 conditions


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Responsable en conduite du changement
    Inscrit en
    Février 2020
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 54
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Responsable en conduite du changement
    Secteur : Transports

    Informations forums :
    Inscription : Février 2020
    Messages : 21
    Par défaut macro trop longue si 2 conditions
    Bonjour à tous
    Voici mon petit problème.
    J'ai besoin que excel reconnaisse si dans une cellule, les mots sont barrés. S'ils sont barrés, il me met 1 dans la case sinon rien.
    J'ai fait ma macro qui fonctionne et qui reconnait bien les mots barrés mais si jamais on remet le mot normalement, le 1 reste dans la colonne. J'ai donc voulu rajouter une condition lui disant que si le mot est normal, il ne mette rien dans la cellule et la…. catastrophe, la macro met un temps infini à calculer… j'ai donc du rater quelque chose. je vous mets ma formule

    Code vba : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub Macro1()
    Dim i As Long
     
    LastRow = Cells(Rows.Count, 1).End(xlUp).Row
     
    For i = 1 To LastRow
        If Cells(i, 12).Font.Strikethrough = True Then
            Cells(i, 10) = "1"
        End If
       Next i
    End Sub

    Quelqu'un aurait une idée pour qu'en rajoutant la 2ème condition, la macro ne mette pas une éternité à calculer ? (elle devrait lire environ 2000 lignes)

    Et pourriez vous me dire comment faire pour qu'elle se déclenche dès que la cellule est changée svp?

    Merci à tous pour votre aide

  2. #2
    Membre émérite
    Homme Profil pro
    Responsable des études(en disponibilité)
    Inscrit en
    Juin 2007
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable des études(en disponibilité)
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 367
    Par défaut
    Tu devrais publier ton code avec la condition ajoutée.

    si j'ai bien compris ton souhait.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub Macro1()
    Dim i As Long
     LastRow = Cells(Rows.Count, 1).End(xlUp).Row
     For i = 1 To LastRow
        If Cells(i, 12).Font.Strikethrough = True Then
            Cells(i, 10) = "1"
            Else
             Cells(i, 10).ClearContents
        End If
       Next i
    End Sub
    si le traitement est long et qu'il y a beaucoup de ligne
    en passant par une variable tableau pour tout écrire en une seule fois
    diminuerait le temps de traitement.

  3. #3
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je passerais par une fonction personnalisée renvoyant une valeur booléenne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Function IsStrikethrough(c As Range) As Boolean
      IsStrikethrough = c.Font.Strikethrough
    End Function
    et ensuite, tu insères la fonction en une seule instruction en VBA dans toute la colonne sans boucle

    Exemple si la plage à contrôler est la colonne F2:F30000 et que la colonne où se trouve la formule est la G
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub T()
      Dim rngColumn As Range
      Dim Addr As String
      Set rngColumn = shtTarget.Range("G2:G30000")
      Addr = "F2"
      rngColumn.Formula = "=IsStrikethrough(" & Addr & ")"
      Set rngColumn = Nothing
    End Sub
    A lire éventuellement
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  4. #4
    Membre averti
    Femme Profil pro
    Responsable en conduite du changement
    Inscrit en
    Février 2020
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 54
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Responsable en conduite du changement
    Secteur : Transports

    Informations forums :
    Inscription : Février 2020
    Messages : 21
    Par défaut
    Bonjour vous deux et merci pour vos réponses

    Alors a_diard : ta formule ne fonctionne pas. Elle ralentit encore plus et elle fait buguer ma 2 ème macro.

    pour Philippe : je suis débutante et je ne comprends pas tout ce que tu as écrit. J'ai copié collé ta formule et il me met un message d'erreur objet requis et erreur d'exécution 424. la colonne à vérifier est L (de la ligne 2 à 2000) et la colonne qui recevra les 1 est la J.


    En tout cas je vous remercie beaucoup pour votre aide

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    je suis débutante et je ne comprends pas tout ce que tu as écrit. J'ai copié collé ta formule et il me met un message d'erreur objet requis et erreur d'exécution 424. la colonne à vérifier est L (de la ligne 2 à 2000) et la colonne qui recevra les 1 est la J.
    Que n'as-tu pas compris ?
    Où as-tu copié la fonction personnalisée que j'ai publiée ?
    As-tu lu les billets que je t'ai conseillé de lire ?

    Plutôt qu'écrire "1", c'est déjà mieux d'écrire 1 et encore plus d'écrire VRAI ou FAUX ce que je préconise et ce que fait la fonction que j'ai publiée et qui est nommée IsStrikethrough. Celle-ci renvoyant VRAI si la police de la cellule référencée dans l'argument C est barrée et FAUX dans le cas contraire.

    En plus des billets que j'ai référencés, je te conseille vivement la lecture de Les fonctions personnelles dans Excel
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  6. #6
    Membre averti
    Femme Profil pro
    Responsable en conduite du changement
    Inscrit en
    Février 2020
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 54
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Responsable en conduite du changement
    Secteur : Transports

    Informations forums :
    Inscription : Février 2020
    Messages : 21
    Par défaut
    Philippe

    Oui j'ai lu ce que tu as mis mais comme je t'ai dis je débute et je ne comprends pas comment faire.
    J'ai mis ta formule pour créer la fonction mais après je ne comprends pas comment intégrer la formule dans la cellule. Je te mets une partie de mon fichier. J'ai besoin du 1 car j'ai besoin d'extraire les données après…
    Fichiers attachés Fichiers attachés

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

Discussions similaires

  1. [XL-2010] Macro trop longue : WRAPTEXT
    Par Oliv- dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 16/06/2017, 09h57
  2. Comment dire? macro trop longue et
    Par Adamas2008 dans le forum Macros et VBA Excel
    Réponses: 25
    Dernier message: 15/04/2015, 13h45
  3. [IDE] E2222 : Expansion de macro trop longue
    Par Didier44 dans le forum C++Builder
    Réponses: 2
    Dernier message: 27/01/2012, 09h05
  4. [XL-2007] Macro trop longue, simplification
    Par laduche31 dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 12/12/2011, 14h40
  5. [AC-2003] Tuer une macro trop longue à s'exécuter
    Par reeenooo dans le forum VBA Access
    Réponses: 5
    Dernier message: 30/10/2009, 18h43

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