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 :

Syntaxe application.match en remplacement de boucle [XL-MAC 2011]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Janvier 2017
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2017
    Messages : 79
    Par défaut Syntaxe application.match en remplacement de boucle
    Bonjour

    Je souhaite utiliser application.match pour éviter d'avoir recours à une boucle, plus longue en temps de traitement.

    De A1 à A10 j'ai les valeurs 10
    De B5 à B10 j'ai les valeurs 1


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     Sub Applicationmatch()
                                     With Range("a1:b10")
                                     v = Application.Match(1, Range("b:b"), 0)
                                    'Je souhaiterais que la valeur en A soit 1 sur toutes les lignes où la valeur en B est 1
                                    End With
        End Sub
    Comment coder cela svp?

    Merci par avance.
    Cdt

  2. #2
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    bonjour
    je comprends pas bien le rapport entre match est ton souhait
    match c'est pour matcher une occurence rien a voir avec le fait que tu veuille des "1" partout
    soit tu cherche a faire quelque chose et match n'est pas la fonction pour ca
    soit tu n'en dis pas assez
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  3. #3
    Membre Expert Avatar de Transitoire
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Décembre 2017
    Messages
    733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Décembre 2017
    Messages : 733
    Par défaut
    Bonjour,
    Je comprend pas non plus de problème de lenteur qu'il y aurait pour boucler de A1 à A10???
    Cordialement

  4. #4
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    perso je dirais qu'une chose "Autofilter" si tu veux les avoir toutes d'un coup tes "1" ou "10"
    A mediter
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  5. #5
    Membre confirmé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Janvier 2017
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2017
    Messages : 79
    Par défaut
    Bonjour à tous, merci pour vos participations.

    La feuille sur lequel je travaille a plus de 10.000 lignes, une centaine de colonne, je l'ai schématisée.

    Sur un autre macro, j'avais le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      L = Cells(Rows.Count, 1).End(xlUp).Row
                        For i = 1 To L
                                If Cells(i, 2).Value = "1" Then
                                        Cells(i, 2).EntireRow.Delete
                                End If
                            Next
    Le temps de traitement était très long. J'ai alors utilisé application.match en remplacement pour éviter d'utiliser les boucles. C'est devenu bien plus rapide.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    L = Cells(Rows.Count, 1).End(xlUp).Row
     
               With Range("a1:b" & L)
                  V = Application.Match(1, Range("b:b"), 0)
                  Rows(V & ":" & .Rows.Count).EntireRow.Delete
                End With
    Aujourd'hui j'ai la macro ci-dessous utilisant une boucle.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    L = Cells(Rows.Count, 1).End(xlUp).Row
                        For i = 1 To L
                                If Cells(i, 2).Value = 1 Then
                                        Cells(i, 1).Value = 1
                                End If
                            Next
    Les temps de traitement sont longs. Voilà pourquoi je souhaiterais pourvoir utiliser application.match en remplacement, dans le même esprit que le cas précédent.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub Applicationmatch()                               
                                    With Range("a1:b10")
                                     V = Application.Match(1, Range("b:b"), 0)
                                    'Je souhaiterais que la valeur en A soit 1 sur toutes les lignes où la valeur en B est 1
                                    End With
        End Sub
    Mes connaissances actuelles en syntaxe VBA me font défaut..
    Qu'en pensez-vous? A vous lire.

  6. #6
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    bonjour
    sauf erreur de ma part match te donne UNE!! occurence mais pas toute alors a quoi te servirais match !!!?????

    tourne toi vers autofilter ,2 lignes de rien du tout pour filtrer une colonne et c'est bouclé
    je ne peux etre plus clair

    regarde comme c'est simple
    exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub test()
    With ActiveSheet.Range("B1:B10")
        .AutoFilter Field:=1, Criteria1:="1"
        .SpecialCells(xlVisible).Offset(0, -1).Value = 1
        .AutoFilter
    End With
    End Sub
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

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

Discussions similaires

  1. [MySQL] Remplacer une boucle foreach() par for()
    Par Flushovsky dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 05/12/2008, 12h57
  2. Remplacer les boucles for
    Par Lost in dans le forum Images
    Réponses: 7
    Dernier message: 19/07/2008, 16h36
  3. Problème application.match et chiffres
    Par House MD dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 23/11/2007, 12h16
  4. Syntaxe pour un update dans une boucle ..
    Par fmoriet dans le forum SQL Procédural
    Réponses: 0
    Dernier message: 15/11/2007, 09h55

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