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 :

Fonction Match : incompréhension.


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Juin 2020
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2020
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Fonction Match : incompréhension.
    Bonjour tout le monde,

    Je viens vous appeler au secours concernant la fonction match en VBA.
    L'objectif est de restituer la valeur de la cellule renvoyée dans la plage destination. Celà fonctionne pour d'autre champs dans le même fichier, même manip. Mais pour l'un d'entre eux je'y parviens pas.
    Je joins le fichier en PJ. L'objectif est de renvoyé la valeur de la colonne Décision" de l'onglet sélection vers la colonne info 1 (L) de l'onglet synth, si le nom correspond.
    J'ai rendu le fichier neutre en intitulés car c'est pour du scolaire et confidentiel.

    Lorsque j'utilise le code ci dessous, pas d'anomalie, mais rien ne se passe...
    J'ai vérifié, ce n'est pas à cause de la reconnaissance de correspondance (enfin jen e pense pas), car cela fonctionne avec la formule Equiv qui correspond à Match.
    Pouvez vous m'aider svp ?

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    Sub info()
    Dim Selection As Worksheet
    Dim Synth As Worksheet
    Dim Sreinfo1 As Range
    Dim Destinfo1 As Range
    Dim cel As Range
    Dim Ligne As Range
     
    Set Selection = Worksheets("Selection")
    Set Synth = Worksheets("Synth")
     
     
     
     
    'défini les plages
    With Selection
     
    Set Sreinfo1 = .Range(.Cells(4, 1), .Cells(.Rows.Count, 1).End(xlUp))
     
    End With
     
    With Synth
    Set Destinfo1 = .Range(.Cells(2, 3), .Cells(.Rows.Count, 3).End(xlUp))
    End With
     
     
     
     
    'parcour la plage de la feuille de destination
    For Each cel In Destinfo1
     
    'gestion de l'erreur de la valeur non trouvé
    On Error Resume Next
    Ligne = Application.WorksheetFunction.Match(cel.Value, Sreinfo1, 0) + 3 'rajoute 3 car départ de plage en ligne 4
     
    'si pas d'erreur, récupère les valeurs en colonnes E:G et les inscrit en colonne AN:AP
    If Err.Number = 0 Then
     
    cel.Offset(, 9).Value = Selection.Cells(Ligne, 1).Offset(, 2).Value
     
    End If
     
    Next cel
     
    End Sub
    Merci par avance pour votre aide!
    Fichiers attachés Fichiers attachés

  2. #2
    Membre émérite
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 814
    Points : 2 949
    Points
    2 949
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    La fonction Match retourne un Double. Un nombre qui peut-êtr très grand.
    Donc, à ne pas déclarer As Range...
    Remplacer :
    par :
    Cordialement,
    Franck

  3. #3
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    Par défaut
    Bonjour le Fil,
    Bonjour Frank,

    J'ajouterais qu'il faut faire attention aux noms choisis pour les variables ...
    Utiliser Selection, c'est chercher le bâton pour se faire battre !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Sub info()
    Dim Selection As Worksheet
    '...
    Set Selection = Worksheets("Selection")
    A lire (en particulier le point 4) : https://docs.microsoft.com/fr-fr/off...c-naming-rules
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  4. #4
    Membre émérite
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 814
    Points : 2 949
    Points
    2 949
    Billets dans le blog
    10
    Par défaut
    Citation Envoyé par Patrice740 Voir le message
    Bonjour le Fil,
    Bonjour Frank,

    J'ajouterais qu'il faut faire attention aux noms choisis pour les variables ...
    Utiliser Selection, c'est chercher le bâton pour se faire battre !
    Salut Patrice,

    Cordialement,
    Franck

  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
    12 755
    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 : 12 755
    Points : 28 606
    Points
    28 606
    Billets dans le blog
    53
    Par défaut
    Bonjour Franck,
    La fonction Match retourne un Double
    Pour moi, c'est plutôt un entier Long que cette fonction renvoie
    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 émérite
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 814
    Points : 2 949
    Points
    2 949
    Billets dans le blog
    10
    Par défaut
    Bonjour Philippe,

    Pour moi, c'est plutôt un entier Long que cette fonction renvoie
    Et bien, pour moi également.
    Enfin, jusqu'à ce que je lise ceci :
    https://docs.microsoft.com/fr-fr/off...h#return-value

    Idem pour l'explorateur d'objet de l'éditeur :
    Function Match(Arg1, Arg2, [Arg3]) As Double
    Membre de Excel.WorksheetFunction
    C'est d'autant plus surprenant que son utilisation pour les variables tableaux [j'ai déjà eu cette discussion avec Pierre Fauconnier] est limité à 65536.

    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
    25
    26
    Sub TestMatch()
    Dim ListTooLong(65536) As String, ListGood(65535) As String, ListCellules(1 To 100000, 1 To 1) As String, i As Long, msg As String
        For i = 0 To 65535
            ListGood(i) = "List " & i
        Next
        msg = "Si la variable tableau contient moins de 65536 valeurs, Match fonctionne : " & _
                Application.WorksheetFunction.Match("List 65527", ListGood, 0)
        For i = 0 To 65536
            ListTooLong(i) = "List " & i
        Next i
        On Error Resume Next
        Debug.Print Application.WorksheetFunction.Match("List 65527", ListTooLong, 0)
        If Err.Number > 0 Then
            msg = msg & vbCrLf & "___________________________________________" & vbCrLf & vbCrLf & _
                "Si la variable tableau contient plus de 65536 valeurs, Match ne fonctionne pas : " & vbCrLf & Err.Description
        End If
        On Error GoTo 0
        For i = 1 To 100000
            ListCellules(i, 1) = "List " & i
        Next i
        Range("A1").Resize(UBound(ListCellules, 1), 1) = ListCellules
        msg = msg & vbCrLf & "___________________________________________" & vbCrLf & vbCrLf & _
                    "Dans la feuille de calcul avec plus de 65536 valeurs, Match fonctionne : " & _
                            Application.WorksheetFunction.Match("List 99527", Range("A1:A100000"), 0)
        MsgBox msg
    End Sub
    Pour le coup, un Long devrait donc faire l'affaire...
    Cordialement,
    Franck

  7. #7
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 755
    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 : 12 755
    Points : 28 606
    Points
    28 606
    Billets dans le blog
    53
    Par défaut
    Bonjour Franck,
    J'ai lu l'article que tu as référencé et franchement je ne comprend pas.
    La fonction Match devant renvoyer une position relative dans une plage de cellules (Ligne ou Colonne) et les variable donc une valeur entière positive compris entre 1 et 1 048 576, on ne risque pas de dépasser la valeur maximale d'un type Long (Max -2 147 483 648 et 2 147 483 647)
    Personnellement, je déclare toujours mes variables en Long pour ces cas là, et je n'ai jamais rencontré de souci
    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

Discussions similaires

  1. [XL-2007] Incompréhension fonction match() et *
    Par EmmanuelleC dans le forum Excel
    Réponses: 2
    Dernier message: 23/07/2009, 09h25
  2. [XSLT] probleme avec la fonction matches()
    Par IndyGroumpf dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 14/10/2007, 19h13
  3. [Fonction][VBA]incompréhension sur datediff
    Par portecd dans le forum VBA Access
    Réponses: 2
    Dernier message: 12/04/2007, 13h57
  4. [PB 9] Fonction Match
    Par sbouvetJD dans le forum Powerbuilder
    Réponses: 1
    Dernier message: 29/03/2007, 15h59
  5. [VBA-E] Recherche de valeur fonction Match
    Par Dextro dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 28/02/2007, 19h09

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