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 :

probleme fonction Match/Boucle [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté Avatar de vanhoa
    Homme Profil pro
    Analyste Financier
    Inscrit en
    Octobre 2013
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Analyste Financier
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 117
    Par défaut probleme fonction Match/Boucle
    Bonjour,

    Je vous explique mon probleme.

    Sur la ligne 1, j'ai le nom des mois (Jan, Fev, Mar.... Dec) qui sont mis au hasard les un apres les autres. Sur la ligne 2 j'ai disons 4 prenoms (Jean, Paul, Martin, Sophie) qui alternent successivement, et au hasard.
    J'aurais donc par exemple (je ne connais pas sur combien de colonne s'etend ma ligne!)
    Ligne 1: Mar - Dec - Fev - Sep - Apr - Jan - Fev - Apr - Jun - Jun - Nov
    Ligne 2: Paul - Jean - Soph - Mart - Paul - Jean - Jean - Paul - Mart - Soph - Mart

    Attention, dans mon exemple, je ne commence pas forecement par la colonne A, il peut y avoir des cellules vides, on va dire que sur toute la ligne 1 et toute la ligne 2 on a au hasard, soit cellule vide, soit un mois(pour ligne1) ou prenom(pour ligne2)

    J'ai cree un Userform qui me donne 2 listes deroulantes, la premiere choisi le mois et la deuxieme le prenom. Quand je valide, cela cree 2 variables notees "var1" et "var2".
    A la suite je continue mon code, et mon but est de trouver quel est le numero de ma colonne pour laquelle j'ai en meme temps var1 et var2.
    exemple pour var1 j'ai choisi "Fev" et var2 "Jean"
    J'ai pense passer par une boucle Do Loop avec la fonction Match:

    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
    21
    22
    23
    24
     
    'mon code quand j'active le formulaire
     
    Private Sub CommandButton1_Click()
     
        Dim var1 As String, var2 As String
            var1 = ComboBox1.Value
            var2 = ComboBox2.Value
     
        Unload Me
     
        Dim xa As Integer, xb As Integer
     
            xa = 1
            xb = 0
     
            Do
     
                xb = xb + 1
                xa = WorksheetFunction.Match(var1, Worksheets("Sheet3").Range(Cells(1, xb), Cells(2, 1000)), 0)
     
            Loop While Cells(2, xa).Value <> var2
     
    End Sub
    1er probleme:
    Si j'ai var1 = Fev et var2 = Jean, j'aimerais pouvoir recuperer la valeur de xa = 7
    Car l'association Fev et Jean est en 7eme position.
    Malheureusement, j'obitent dans un premier temps 3, comme si ca faisait seulement ma fonction Match, sans prendre en compte ma boucle. Ensuite, si je retente de valider mon formulaire, j'obtiens le message d'erreur suivant:
    Debug: unable to get the match property of the worksheetfunction class

    2eme probleme:
    Dans le code, on remarque que mes 2 lignes contenant les mois et prenoms sont dans le Sheet3. Mais si ma cellule active est dans un autre Sheet, par exemple Sheet1, j'ai une erreur: Run-time error '1004': Application-defined or object-defined error.
    Est-ce que c'est parce que j'utilise un Userform?

    Voila, merci beaucoup pour votre aide!!

    Van Hoa

  2. #2
    Expert confirmé Avatar de illight
    Homme Profil pro
    Analyste décisionnel
    Inscrit en
    Septembre 2005
    Messages
    2 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste décisionnel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 344
    Par défaut
    Personnellement, j'aurai pas fait comme ça, et je serait passé par une bête combinaison avec des If et des For Un truc dans ce genre :


    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
     
    Private Sub CommandButton1_Click()
    Dim var1 As String, var2 As String
    'recuperation des valeurs
    var1 = ComboBox1.Value
    var2 = ComboBox2.Value
    Unload Me
    Dim i As Long
    sheets("Feuil3").select
    'on boucle jusqu'à la dernière cellule non vide sur la ligne 1
    For i = 1 To sheets("Feuil3").Range("XX1").End(xlToLeft).Column
        If sheets("Feuil3").Cells(1, i).Value = var1 Then
            If sheets("Feuil3").Cells(2, i).Value = var2 Then
                'si les 2 valeurs correspondent, un msgbox apparait pour le numéro de colonne et on sort de la boucle
                MsgBox i
                Exit For
            End If
        End If
    Next i
    End Sub
    Après question subsidiraire : si jamais tu as plusieurs colonnes qui correspondent à tes 2 valeurs, tu dois récupérer toutes les colonnes, ou juste la première fois ? Si c'est le premier cas, il suffit d'enlever le Exit for de ma macro, et mettre ta valeur...ou tu veux
    1. Avant de poster, et http://www.developpez.com/sources/
    2. Lors du post, n'oubliez pas, si besoin les balises CODE => voir ici pour l'utilisation
    3. N'oubliez pas le
    4. N'oubliez pas le si la réponse vous a été utile !

  3. #3
    Membre émérite
    Homme Profil pro
    retraité
    Inscrit en
    Mai 2006
    Messages
    542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mai 2006
    Messages : 542
    Par défaut
    Bonjour à tous
    Bonjour vanhoa, illight

    Tout dépend du nombre de cellules, mais avec un find ce serait peut-être plus rapide.

    Eric

  4. #4
    Membre expérimenté Avatar de vanhoa
    Homme Profil pro
    Analyste Financier
    Inscrit en
    Octobre 2013
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Analyste Financier
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 117
    Par défaut
    Merci beaucoup!! ca marche! et c'est vrai que c'est plus simple!

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

Discussions similaires

  1. [XL-2010] Probleme fonction match
    Par tomy7 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 17/12/2010, 15h02
  2. Probleme dans une boucle for, faisant appel a une fonction
    Par mapotam dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 22/01/2010, 21h41
  3. [XSLT] probleme avec la fonction matches()
    Par IndyGroumpf dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 14/10/2007, 19h13
  4. probleme fonction gethostbyname
    Par oclone dans le forum Développement
    Réponses: 6
    Dernier message: 14/04/2005, 10h31
  5. probleme fonction syntaxe
    Par gIch dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 28/02/2005, 09h52

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