VBA - Erreur de Syntaxe If then Imbriqué
Bonjour à tous,
Je construit une macro qui doit :
- me dire si un code situé dans une feuille est aussi présent dans une seconde feuille
- Dans le cas ou celui ci est présent dans les deux feuilles, chercher si une date présente dans la feuille 1 est située entre deux dates présente dans la feuille 2
Pour ça j'ai donc essayer d'imbriquer deux si, mais ma macro me ressort toujours une erreur de syntaxe quand j'essaie d'imbriquer ceux ci et je ne vois pas d'où ca vient, est ce que quelqu'un saut me dire pourquoi ?
Merci d'avance ! :)
Sub TestV2()
Dim FL1 As Worksheet
Dim FL2 As Worksheet
Dim c As Range, Donnee As String
Dim d As Range, Donnee2 As String
Set FL1 = Worksheets("TEST") 'Le fichier o? on colle
Set FL2 = Worksheets("CHERCHE") 'Le fichier o? on cherche
For NoLig = 2 To FL1.Range("B65535").End(xlUp).Row
Donnee = FL1.Cells(NoLig, 2) 'ajout?
With FL2.Range("B1:B" & FL2.Range("B5535").End(xlUp).Row) 'tu d?signes ta plage de recherche
Set c = .Find(Donnee, LookIn:=xlValues)
If Not c Is Nothing Then
FL1.Cells(NoLig, 17) = "Date ? contr?ler"
Else
FL1.Cells(NoLig, 17) = "Ok"
End If
Set c = Nothing
End With
If FL1.Range("B1:B" & FL1.Range("B5535").End(xlUp).Row) = FL2.Range("B1:B" & FL2.Range("B5535").End(xlUp).Row) Then
If FL1.Range("o1:o" & FL1.Range("B5535").End(xlUp).Row)<= FL2.Range("g1:g" & FL2.Range("B5535").End(xlUp).Row)
And FL1.Range("o1:o" & FL1.Range("B5535").End(xlUp).Row)=> FL2.Range("g1:g" & FL2.Range("B5535").End(xlUp).Row)
Then FL1.Cells(NoLig, 18) = "Anomalie"
Else: FL1.Cells(NoLig, 18) = "Ok"
Else: FL1.Cells(NoLig, 18) = "Non pr?sent"
End If
End If
Next
End SubBonjour Dorian,
Que veux-tu faire avec ces lignes ?
If FL1.Range("B1:B" & FL1.Range("B5535").End(xlUp).Row) = FL2.Range("B1:B" & FL2.Range("B5535").End(xlUp).Row) Then
If FL1.Range("o1:o" & FL1.Range("B5535").End(xlUp).Row)<= FL2.Range("g1:g" & FL2.Range("B5535").End(xlUp).Row)
And FL1.Range("o1:o" & FL1.Range("B5535").End(xlUp).Row)=> FL2.Range("g1:g" & FL2.Range("B5535").End(xlUp).Row)Sinon les conditions c'est : If ... Then ... Else... Endif
Et les instructions doivent se suivre
@+
Bonjour,
Ce sont ces lignes qui doivent premièrement chercher les corrélation des codes en colonne B des feuilles 1 et 2. Si corrélation je voudrais tester si la date feuille 1 ( colone o ) est située entre la date de début et la date de fin ( colonne f et g)
Dorian
Re,
Quand est-ce que
FL1.Cells(NoLig, 18) = "Anomalie" ?
FL1.Cells(NoLig, 18) = "Ok" ?
FL1.Cells(NoLig, 18) = "Non pr?sent" ?
Sinon un début de code
Sub TestV2()
Dim FL1 As Worksheet
Dim FL2 As Worksheet
Dim c As Range, Donnee As String
Dim d As Range, Donnee2 As String
Dim dLig1 As Long, dLig2 As Long, NoLig As Long
Set FL1 = Worksheets("TEST") 'Le fichier o? on colle
dLig1 = FL1.Range("B" & Rows.Count).End(xlUp).Row
Set FL2 = Worksheets("CHERCHE") 'Le fichier o? on cherche
dLig2 = FL2.Range("B" & Rows.Count).End(xlUp).Row
For NoLig = 2 To dLig1
Donnee = FL1.Cells(NoLig, 2) 'ajout?
' Pour la plage de recherche
With FL2.Range("B1:B" & dLig2)
Set c = .Find(Donnee, LookIn:=xlValues)
If Not c Is Nothing Then
FL1.Cells(NoLig, 17) = "Date ? contr?ler"
Else
FL1.Cells(NoLig, 17) = "Ok"
End If
Set c = Nothing
End With
' Tester date
If FL1.Range("O" & NoLig) >= FL2.Range("F" & NoLig) And _
FL1.Range("O" & NoLig) <= FL2.Range("G" & NoLig) Then
' La date est située dans la plage
Else
' La date n'est pas dans la plage
End If
Next
End Sub@+
Alors :
1 . FL1.Cells(NoLig, 18) = "Anomalie" ?
1. Quand : pour un code similaire ( colonne b feuille1 et 2) la date de feuille 1 (col O) est située entre celles de la feuille 2 (colonne f et g)
2 . FL1.Cells(NoLig, 18) = "Ok" ?
2. Quand : pour un code similaire ( colonne b feuille1 et 2) la date de feuille 1 (col O) n'est pas située entre celles de la feuille 2 (colonne f et g)
3 .FL1.Cells(NoLig, 18) = "Non pr?sent" ?
3 : Quand pas de correspondance de code dans les feuilles ( non nécessaire comme info mais c'était pour "compléter" mon else)
Merci pour lé début de code, je regarde ça !
J'ai pu ajouter le Then et Else que je souhaite afin que soit renvoyé ce qu'il faut dans la colonne 18, cependant le If n'a pas l'air de fonctionner comme il faut. De ce que je vois, il ne va pas chercher la correspondance entre les code de la feuille 1 pour aller chercher les dates des lignes présentant le même code. Est ce quelqu'un saurait comment rajouter cette variable : aller chercher les colonnes feuille2 ou on a le meme code que en ligne 1 ? Pour ensuite lancer mon if
Merci d'avance !
' Tester date
If FL1.Range("O" & NoLig) >= FL2.Range("F" & NoLig) And _
FL1.Range("O" & NoLig) <= FL2.Range("G" & NoLig) Then
' La date est située dans la plage
FL1.Cells(NoLig, 18) = "Anomalie"
Else
' La date n'est pas dans la plage
FL1.Cells(NoLig, 18) = "Ok"
End If
Next
End Sub