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
J'ai également essayé avec :
If CodeJour = 1 And WorksheetFunction.VLookup(Range("RV").Value, Sheets("Base").Range("A1:S2000"), 19, False) = 503 ThenEt 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 ThenCela 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 SubMerci 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 SubLe 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 SubSi 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