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 :

Simple test VBA [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Inscrit en
    Décembre 2007
    Messages
    1 235
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 1 235
    Par défaut Simple test VBA
    Bonjour,

    Je souhaiterais réaliser un test, je pense qu'il s'agit dune boucle, afin d'écrire une valeur dans une cellule en fonction du résultat d'une autre.

    Par exemple :

    Parcours toutes les cellules de la colonne A, si tu trouves la valeur X alors écris dans la colonne B sur la même ligne Y.

    Je souhaiterais répeter ce test pour différentes conditions.

    Merci d'avance.

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    Voici une boucle. S'il y a beaucoup de valeurs X, il est préférable de faire un filtre automatique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub Boucle()
        Dim C As Range, ResAdr As String
        Set C = Columns(1).Find("X", , , xlWhole)
        If C Is Nothing Then Exit Sub
        ResAdr = C.Address
        Do
            C.Offset(, 1) = "Y"
            Set C = Columns(1).FindNext(C)
        Loop While C.Address <> ResAdr
    End Sub

  3. #3
    Membre éprouvé
    Inscrit en
    Décembre 2007
    Messages
    1 235
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 1 235
    Par défaut
    Bonjour et merci pour la réponse,

    Si je veux tester plusieurs valeurs, dois-je dupliquer la boucle autant de fois que j'ai de valeurs?

    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
     
     
        Dim C As Range, ResAdr As String
     
        Set C = Columns(1).Find("X", , , xlWhole)
           If C Is Nothing Then Exit Sub
                 ResAdr = C.Address
              Do
                 C.Offset(, 1) = "Y"
                 Set C = Columns(1).FindNext(C)
             Loop While C.Address <> ResAdr
     
     
        Set C = Columns(1).Find("Z", , , xlWhole)
           If C Is Nothing Then Exit Sub
                 ResAdr = C.Address
              Do
                 C.Offset(, 1) = "A"
                 Set C = Columns(1).FindNext(C)
             Loop While C.Address <> ResAdr
    Car j'ai fais le test avec une valeur, ça fonctionne mais avec plusieurs tests je ne suis pas sur que cela fonctionne de la manière dont je l'ai configurer.

    Je réessaye...

  4. #4
    Membre éprouvé
    Inscrit en
    Décembre 2007
    Messages
    1 235
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 1 235
    Par défaut
    Cela fonctionne, merci beaucoup.

  5. #5
    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 heu
    Bonjour
    moi je delimiterais la limite de la recherche en terme de ligne pluto que la colonne en entier
    a la place de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set C = Columns(1).Find
    met ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set C = range("a1:a"& range("a"&rows.count).end(xlup).row).Find........
    ensuite je preciserais le sheets au cas ou ta recherche ne s'effectuerait pas sur le sheets actif
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    with sheets("toto")
    Set C = .range("a1:a"& .range("a"&rows.count).end(xlup).row).Find.......
    'suite du code 
    end with
    Au plaisir
    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

  6. #6
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour Patrick,

    N'étant pas convaincu par ton argumentaire, je viens faire des mesures :
    Avec un seul "X en position A1000000, les temps d'exécution sont identiques (0,1562 sec). Avec un seul X en position A300, les résultats sont surprenants :
    ta méthode (plage limitée) : 0,0234 sec
    la colonne entière : 0,0078 sec.
    les mesures ont été répétées mais elles ne s'écartent pratiquement pas de celles indiquées.
    De plus, si tu tiens à préciser la feuille, il faut indiquer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set C = .Range("a1:a" & .Range("a" & .Rows.Count).End(xlUp).Row).Find("X", , , xlWhole)
    au lieu de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set C = .Range("a1:a" & .Range("a" & Rows.Count).End(xlUp).Row).Find("X", , , xlWhole)

  7. #7
    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
    bonsoir daniel

    effectivement c'est surprenant
    je n'ai pas mis le point a rows.count car on s'en fou c'est la limite la plus basse de n'importe quels sheets
    soit 65536 pour 2003
    plus de 10000 pour 2007 je crois
    a moins que ca déclenche une erreur de type 1004 je n'ai pas tester
    peut être a tu raison je te fais confiance
    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. envoi mail simple en vba
    Par micom59 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 23/07/2009, 11h34
  2. test vba excel soustraction cellule
    Par marie33000 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 07/04/2009, 18h55
  3. impossible de faire fonctionner le plugin 'Simple Test'
    Par titou_777 dans le forum Eclipse PHP
    Réponses: 0
    Dernier message: 25/02/2009, 15h37
  4. simple requête vba
    Par eddy verpoorter dans le forum VBA Access
    Réponses: 5
    Dernier message: 17/11/2007, 16h55

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