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 :

Aide Application Match [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    300
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 300
    Par défaut Aide Application Match
    Bonjour

    Voilà je me sert d'un code qui me permet de retrouver une date, mais vu que je l'ai recopier, je n'arrive pas forcément à l'utiliser car je ne la comprend pas.

    Index = Application.Match(TheDate, .Range(.Cells(3, 1), .Cells(3, .Columns.Count)), 0)

    TheDate = Valeur cherchée
    Le dernier "0", = recherche la première valeur qui est exactement égale à valeur cherchée

    .Range(.Cells(3, 1), .Cells(3, .Columns.Count) : Ceci je n'arrive pas à le traduire afin de l'appliquer à ma nouvelle Macro.

    Si quelqu'un peux m'expliquer comment fonctionne la matrice de recherche cela m'aiderais à avancer.

    Voici en suite la macro que j'aimerais utiliser

    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    Sub location()
    Dim TheDate As Long, Index As Variant
     
    Application.ScreenUpdating = False
    Worksheets("Articles").Activate
    Code = "LCHAP300" 'Code AGLM
    Cde3 = "1" 'Command.TB3 'Valeur de la TB3 de l'USF Command
    DatCde = "02/01/2013" 'Command.Lab_DatCde.Caption
    DatRet = "05/01/2013" 'Command.Lab_DateRetour.Caption
     
    'If Command.TB3 = "" Then
    'Else
    Worksheets("Articles").Activate
     
        With Sheets("Articles")
                'Chercher son nom dans la feuille Conso colonne B
                Set c = .Range("B2:B" & .Cells(.Rows.Count, 1).End(xlUp).Row).Find( _
                                What:=Code, _
                                After:=.Range("B2"), _
                                LookIn:=xlValues, _
                                LookAt:=xlWhole, _
                                SearchOrder:=xlByRows, _
                                SearchDirection:=xlNext, _
                                MatchCase:=False)
        Columns(2).Find(Code, , , , , Previous).Select
                c.Value = Code
     
     
            MsgBox "Quantité commandé : " & Cde3
     
            If c(1, 8).Value = "" Then
                c(1, 8) = Cde3 'Nbre ce Chapiteaux Cdé
                c(1, 7).FormulaR1C1 = "=[@[Stock Total]]-[@[Qté Sortie]]" 'DIspo = Stock Total - Qté Sortie
            Else
                c(1, 8) = c(1, 8) + Cde3 'Qté Sortie + Cde en cours
                c(1, 7).FormulaR1C1 = "=[@[Stock Total]]-[@[Qté Sortie]]" 'DIspo = Stock Total - Qté Sortie
            End If
     
           ' MsgBox Datecde
            If DatCde = "" Then
                Else: c(1, 9) = CDate(DatCde) ' Affiche la Date de Sortie
            End If
     
            'MsgBox DateRet
            If DatRet = "" Then
                Else: c(1, 10) = CDate(DatRet) ' Affiche la date Retour
            End If
     
     c(1, 11).Select
     ActiveCell.FormulaR1C1 = _
            "=IF([@[Date de Retour]]="""","""",[@[Date de Retour]]-[@[Date de Sortie]])" ' Nbre de Jour de Loc = Date de Sortie - Date de Retour
      Temps = c(1, 11)
     
    'Recherche Date du début
     
    TheDate = CDate(c(1, 9))  '(Command.Lab_DatCde)
     'MsgBox TheDate
        With Worksheets("Articles")
     
            Index = Application.Match(TheDate, .Range(.Cells(2, 1), .Cells(2, .Columns.Count)), 0)
     
     
            If IsError(Index) Then
     
                MsgBox "Résultat négatif. Rien trouvé.", _
                       vbOKOnly + vbInformation, _
                       "Résultat"
            Else
               .Cells(2, Index).Select 'Sélectionne la date
            End If
     
        End With
    'Fin Call Croisement
    '------------------Recherche la Date du Jour----------------
     
    '---------------------------Sélectionne la cellule à l'intersection Ligne/Colonne----------
     
    Set Date_Loc = ActiveCell
    col = Date_Loc.Column
     
    Set Personnel = Range("B5:B1000").Find(Command.TB_Code)
    ligne = Personnel.Row
    Cells(ligne, col).Select
    Application.ScreenUpdating = True
     
     For i = 1 To Temps
    ActiveCell = CDec(c(1, 7))
    ActiveCell.Offset(0, 1).Select
    Next i
     
    End With
    Application.ScreenUpdating = True
    Worksheets("Planning").Activate
    End Sub

    Merci d'avance

    Didier

  2. #2
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Le second paramètre de cette fonction sert à indiquer la zone de recherche.

    Sinon si c'est pour du VBA voir aussi l'aide de la fonction Find

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    300
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 300
    Par défaut
    Find, fonctionne mal pour les dates je trouve.

  4. #4
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Bonjour,

    Comme quoi une ligne de code simple peut se révéler complexe….
    D’abord comprendre la gestion des dates sous Excel et la notion de numéros de série.
    Comprendre et gérer les dates sous Excel et en VBA

    Les dates sont des nombres qui sont des Long si on se cantonne aux dates (sans heures).

    Ensuite pour trouver une occurrence dans une colonne ou une ligne, Match est l’équivalent de la fonction de feuille « Equiv » voir l’aide à cette fonction Feuille qui est plus claire que celle de Match.

    Avec des dates en données, les choses se compliquent forcément, et c’est pourquoi pour s’affranchir des soucis dus aux formats, interprétation etc. il est conseillé de passer par la valeur native de la date => son numéro de série.

    voici un exemple de code qui se rapproche de ton cas en structure.
    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
    Option Explicit
     
    Sub Gogo()
    Dim datCible As Date
    Dim tboDates() As Variant
    Dim varNumCol As Variant ' prend valeur d'erreur si recherche non aboutie
     
    tboDates = Range("A1:H1") 'on met en tableau les dates de la ligne 1
    datCible = tboDates(1, 6) ' tboDates(1, 1) pour ne pas trouver  ' on désigne une date cherchée dans notre liste
    ' on cherche la date voulue dans la ligne 4 qui est le résultat de formules / dates
    ' CLng(datCible) renvoie le Numéro de série de la date en convertissant sa valeur en nombre (pas OK si heures)
    ' On s'affranchit ainsi des formats et autres
    varNumCol = Application.Match(CLng(datCible), Range(Cells(4, 1), Cells(4, Columns.Count).End(xlToLeft)))
    ' la syntaxe Application.Match nous permet le traitement de l'erruer retournée s'il n'existe pas d'occurence
    If IsError(varNumCol) Then MsgBox "Pas d'occurence trouvée" Else MsgBox "N° Col = " & varNumCol
     
    End Sub
    On pourrait aussi faire plus direct, mais moins lisible en changeant ces 2 lignes dans le code et en utilisant le pouvoir d'interprétation du VBA.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim lngDateCible As Long
    varNumCol = Application.Match(lngDateCible, Range(Cells(4, 1), Cells(4, Columns.Count).End(xlToLeft)))
    Voir le classeur joint pour démo du code
    DGSoluce.xls

    cordialement,

    Didier

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 29/01/2009, 15h31
  2. Besoins d'aide application telephone mobile
    Par joplass63 dans le forum Java ME
    Réponses: 2
    Dernier message: 03/04/2008, 08h55
  3. Besoin d'aide, application vb6
    Par howcom2890 dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 17/03/2008, 22h18
  4. 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
  5. [Debutant] AIDE Application Client/serveur Sqlserver express 2005
    Par TimeForHeroes dans le forum Accès aux données
    Réponses: 2
    Dernier message: 30/10/2007, 07h03

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