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 :

Erreur sur fonction Application.Match


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    travaux publics
    Inscrit en
    Avril 2014
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : travaux publics
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Avril 2014
    Messages : 1
    Par défaut Erreur sur fonction Application.Match
    Bonjour,

    après moult recherches et lectures de sujets , je vous soumets mon cas. J'essaie de réaliser un petit logiciel de gestion de stock et caisse pour une petite librairie de quartier. Je bloque sur la partie ou je souhaite que la quantité stock soit automatiquement diminuée lorsqu'une opération de caisse est enregistrée. Avec la fonction VlookUp, j'arrive à retrouver la quantité correspondant à l'item selectionné, mais impossible de faire marcher la fonction Application.Match pour récupérer le numéro de la ligne correspondante et donner l'instruction que la quantité se trouvant sur cette ligne et à la colonne donnée soit minorée de x unité.

    Je suis débutant en vba, je vous prie donc de m'excuser pour le codage qui ne doit pas être très beau à voir.

    Je suis disponible pour toute question.

    En pièce jointe le fichier.

    base 3 mars.xlsm

    Cordialement

  2. #2
    Membre Expert Avatar de jerome.vaussenat
    Homme Profil pro
    Formateur Bureautique
    Inscrit en
    Janvier 2011
    Messages
    1 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Formateur Bureautique
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 629
    Par défaut
    Salut,

    Une ou deux remarque(s) sur ton code (Après c'est toi qui vois) :
    Déclare tes variables au début du code. (là, elles sont déclarées dans une boucle ...)
    Pense à indenter correctement ton code (c'est le décalage des lignes quand tu commences une structure (boucle ou test)). Ainsi, ton code sera plus lisible.
    Cà donne çà sur ton code :
    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
    95
    96
    97
    98
    99
    100
    '
    ' caisse Macro
    Dim R As Variant
    Dim Couleur
    Dim Ligne As Long
    Dim Colonne As Integer
    Dim S As Variant
    Dim code As Variant
    Dim form1 As String
    Dim form2 As String
    Dim form3 As String
    Dim form4 As String
    Dim form5 As String
    'dim i as integer
     
    Application.ScreenUpdating = False
     
        i = 5
        Cells(i, 3).Select
        Do
            ActiveCell.Offset(1, 0).Select
        Loop Until ActiveCell = ""
     
        nli = ActiveCell.Row
     
        For i = 5 To nli - 1
     
            Sheets("ventes test").Select
            Rows("4:4").Select
            Selection.insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
            Range("C4").Select
     
            Sheets("Feuil2").Select
            Cells(i, 3).Select
            Selection.Copy
     
            code = Cells(i, 3).Value
     
            R = Application.VLookup(code, Sheets("stock").Range("C4:I2000"), 7, False)
     
            If IsError(R) Then
                MsgBox "Valeur inexistante"
            Else
     
                Sheets("stock").Range("I5") = R - 1
     
                Ligne = Application.Match(code, Sheets("stock").Range("C4:C2000"), 0)
     
                MsgBox Ligne
     
                Colonne = 2
                Résultat = Cells(Ligne, Colonne).Address
                Couleur = Application.WorksheetFunction.Index(WorksheetFunction.VLookup(ActiveCell.Value, ActiveSheet.Range("B4:I2000"), 2, False), 1, 1)
     
                MsgBox Couleur
            End If
     
            Sheets("ventes test").Select
            Range("E4").Select
            Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                :=False, Transpose:=False
            Range("C4").Select
            Application.CutCopyMode = False
            ActiveCell.FormulaR1C1 = Date
     
            Sheets("Feuil2").Select
            Range("H4").Select
            Selection.Copy
            Sheets("ventes test").Select
            Range("D4").Select
            Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                :=False, Transpose:=False
     
        Next
     
        form1 = "=SI(F5>1;"""";SI(C5="""";"""";RECHERCHEV(C5;stock!$C$5:$H$1997;5;FAUX)))"
        form2 = "=SI(F6>1;"""";SI(C6="""";"""";RECHERCHEV(C6;stock!$C$5:$H$1997;5;FAUX)))"
        form3 = "=SI(F7>1;"""";SI(C7="""";"""";RECHERCHEV(C7;stock!$C$5:$H$1997;5;FAUX)))"
        form4 = "=SI(F8>1;"""";SI(C8="""";"""";RECHERCHEV(C8;stock!$C$5:$H$1997;5;FAUX)))"
        form5 = "=SI(F9>1;"""";SI(C9="""";"""";RECHERCHEV(C9;stock!$C$5:$H$1997;5;FAUX)))"
     
        Range("C5").Select
        Sheets("Feuil2").Select
        Range("C5:C8").Select
        Selection.ClearContents
        Range("E13").Select
        Selection.ClearContents
        Range("H4").Select
        Selection.ClearContents
        Range("C5").Select
     
        Range("E5").FormulaLocal = form1
        Range("E6").FormulaLocal = form2
        Range("E7").FormulaLocal = form3
        Range("E8").FormulaLocal = form4
        Range("E9").FormulaLocal = form5
     
       Application.ScreenUpdating = True
     
    End Sub
    Ensuite, même si tu débutes, dans la masure du possible, on évite les .select

    De cette manière, tu peux remplacer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            Sheets("ventes test").Select
            Rows("4:4").Select
            Selection.insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    Par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("ventes test").Rows("4:4").insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    Après, c'est plus une question de philosophie, mais aussi de temps d'exécution de ton code ...

    Pour ton problème, cela vient de la ligne avec le Match.
    ton code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Ligne = Application.Match(code, Sheets("stock").Range("C4:I2000"), 0)
    ma proposition de corection
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Ligne = Application.Match(code, Sheets("stock").Range("C4:C2000"), 0)
    La fonction ne peux travailler que sur UNE colonne.

    Je n'ai pas regarder la suite. Mais avec çà, tu récupère bien l'adresse.

Discussions similaires

  1. [XL-2010] Erreur d'exécution '445' sur fonction : Application.FileSearch
    Par jauffray.delteil dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/02/2013, 12h47
  2. Erreur sur fonction d'extraction des mots
    Par Siguillaume dans le forum Langage
    Réponses: 16
    Dernier message: 11/06/2008, 10h16
  3. Erreur sur Fonction PL/SQL
    Par boudou dans le forum PL/SQL
    Réponses: 2
    Dernier message: 22/10/2007, 08h34
  4. [MySQL] Erreur sur fonction PHP
    Par lothar59 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 04/03/2007, 11h31
  5. Erreur sur fonction
    Par all4linux dans le forum C
    Réponses: 2
    Dernier message: 30/06/2006, 10h40

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