Problème syntaxe Vlookup

Bonjour à tous,

J'ai un petit souci de syntaxe (je pense) avec mon code Vlookup.

Cette syntaxe ne fonctionne pas :

If CodeJour = 1 And WorksheetFunction.VLookup(Range("A" & I).Value, Sheets("Base").Range("A1:S2000"), 19, False) = 503 Then
image

J'ai également essayé avec :

If CodeJour = 1 And WorksheetFunction.VLookup(Range("RV").Value, Sheets("Base").Range("A1:S2000"), 19, False) = 503 Then

Et toutes sortes d'autres syntaxes, sans que cela ne fonctionne mieux...

Pourtant quand j'utilise :

If CodeJour = 1 And WorksheetFunction.VLookup(Range("A2").Value, Sheets("Base").Range("A1:S2000"), 19, False) = 503 Then

Cela marche bien, donc le problème doit bien se situer à ce niveau.

Sub samedi_AP()

Dim OS As Worksheet '(Onglet Source)
Dim I As Long
Dim MyDate, CodeJour
Dim RV As Range

Set OS = Sheets("Prep import") 'définit l'onglet source OS

I = 2
Set RV = Cells(I, 1)
'msgbox RV

    Do While Cells(I, 1) <> ""

        MyDate = OS.Cells(I, 4)
        CodeJour = Weekday(MyDate, 2)

        If CodeJour = 1 And WorksheetFunction.VLookup(Range("A" & I).Value, Sheets("Base").Range("A1:S2000"), 19, False) = 503 Then

            Rows(I).Offset(1, 0).EntireRow.Insert
            Cells(I + 1, 1) = Cells(I, 1)
            Cells(I + 1, 3) = "AP"
            Cells(I + 1, 4) = Cells(I, 4) - 2
            Cells(I + 1, 5) = Cells(I, 4) - 2
            Cells(I + 1, 11) = 1
            I = I + 1
        End If
        I = I + 1
    Loop

End Sub

Merci d'avance,

Bonjour

Ce que vous cherchez c'est si la colonne S dans la feuille BASE comporte le chiffre 503 ?

Cordialement

Bonjour Dan,

Pas tout à fait. Je vais joindre le fichier pour plus de clarté mais je suis contraint de supprimer la feuille Base car elle contient des informations confidentielles.

Dans le fichier ci-joint:

Ma macro "Samedi_AP" (bouton Rajout AP samedis) me permet de rajouter une ligne et des informations à chaque fois qu'une date en colonne D est un lundi avec :

If CodeJour = 1

Je voudrais rajouter une seconde condition : que la rechercheV de mon matricule dans la feuille base renvoie 503 (en colonne S), d'où le :

If CodeJour = 1 And WorksheetFunction.VLookup(Range("A2").Value, Sheets("Base").Range("A1:S2000"), 19, False) = 503 Then

Merci.

Bonjour

Dommage que je n'ai pas pu voir comment est constitué votre feuille BASE. J'ai supposé ceci:

- La colonne A comporte les matricules mentionnés dans la colonne A de la feuille Pre import
- La colonne S comporte la valeur 503 que vous cherchez. Cette valeur est mentionnée en colonne S pour certains matricule

Essayez en modifiant le code comme ceci :

CodeJour = Weekday(MyDate, 2)

On Error Resume Next

ligne = Sheets("BASE").Range("A:A").Find(OS.Range("A" & I).Value, LookIn:=xlValues, lookat:=xlWhole).Row

If CodeJour = 1 And Sheets("BASE").Range("S" & ligne) = 503 Then

.....

Cordialement

Bonjour et merci pour ton retour.

J'ai supposé ceci:

- La colonne A comporte les matricules mentionnés dans la colonne A de la feuille Pre import

- La colonne S comporte la valeur 503 que vous cherchez. Cette valeur est mentionnée en colonne S pour certains matricule

C'est exactement ça.

J'ai essayé avec ton code. Voici le résultat :

    Do While Cells(I, 1) <> ""

        MyDate = OS.Cells(I, 4)
        CodeJour = Weekday(MyDate, 2)

        On Error Resume Next

        ligne = Sheets("Base").Range("A:A").Find(OS.Range("A" & I).Value, LookIn:=xlValues, lookat:=xlWhole).Row
        MsgBox "matricule recherché:" & ligne

        If CodeJour = 1 And Sheets("BASE").Range("S" & ligne) = 503 Then

            Rows(I).Offset(1, 0).EntireRow.Insert
            Cells(I + 1, 1) = Cells(I, 1)
            Cells(I + 1, 3) = "AP"
            Cells(I + 1, 4) = Cells(I, 4) - 2
            Cells(I + 1, 5) = Cells(I, 4) - 2
            Cells(I + 1, 11) = 1
            I = I + 1
        End If
        I = I + 1
    Loop

End Sub

Le problème est que ma condition est confirmée pour toutes les autres lignes car ma macro garde en mémoire le matricule en A2 au lieu de le mettre à jour à chaque I = I + 1

Voici le fichier. J'ai laissé un onglet base avec une seule ligne. Elle contient normalement tous nos salariés.

Bonjour

Essayez plutôt comme ceci :

Sub samedi_AP()

Dim OS As Worksheet '(Onglet Source)
Dim I As Long
Dim MyDate As Date
Dim CodeJour
Dim ligne As Integer

Set OS = Sheets("Prep import") 'définit l'onglet source OS

I = 2

Do While OS.Cells(I, 1) <> ""

    MyDate = OS.Cells(I, 4)
    CodeJour = Weekday(MyDate, 2)

    On Error Resume Next
    ligne = Sheets("Base").Range("A:A").Find(OS.Range("A" & I).Value, LookIn:=xlValues, lookat:=xlWhole).Row
    If Err.Number = 0 Then
        If CodeJour = 1 And Sheets("BASE").Range("S" & ligne) = 503 Then
            Rows(I).Offset(1, 0).EntireRow.Insert
            Cells(I + 1, 1) = Cells(I, 1)
            Cells(I + 1, 3) = "AP"
            Cells(I + 1, 4) = Cells(I, 4) - 2
            Cells(I + 1, 5) = Cells(I, 4) - 2
            Cells(I + 1, 11) = 1
            I = I + 1
        End If
    End If
    ligne = 0
    I = I + 1
Loop
End Sub

Si questions, dites moi

Cordialement

Ca marche parfaitement merci !

Pour aller plus loin, j'ai souhaité trouver "le prochain samedi à partir de MyDate" (variable date définie dans mon code). J'ai fait des tests avec weekday mais je n'ai rien réussi de probant...

Par exemple si my date = 09/07/20 => renvoyer 11/07/20

Auriez vous une piste pour moi plus propre que faire If weekday(mydate) = 1  then mydate = mydate +6 etc...

Merci

Edit : je note une idée que je viens d'avoir pour la tester demain.

prochain_samedi = mydate - weekday(mydate,6)+8

Bonjour

Code à essayer

MyDate = MyDate + (6 - Weekday(MyDate, vbMonday))

Cordialement

Hello,

Je viens de voir par hasard que j'avais oublié de répondre .

Le code ci-dessous m'a bien permis de renvoyer le samedi suivant "mydate".

prochain_samedi = mydate - weekday(mydate,6)+8

J'ai pu finir le reste tout seul.

Merci Dan pour ton aide.

Rechercher des sujets similaires à "probleme syntaxe vlookup"