Probleme avec la formule Intersect en VBA
Bonjour à tous,
Je recherche à verifier q'une cellule appartient bien à une plage definie.
Pour cela, j'utilise le code suivant et fais appel à la fonction "Intersect" :
Sub Verifierplage()
I = Right(Workbooks("Creationdecoupage").Worksheets("page de garde").Cells(6, 2).Value, 5)
j = Right(Workbooks("Creationdecoupage").Worksheets("Code").Cells(3, 5).Value, 5)
k = Right(Workbooks("Creationdecoupage").Worksheets("code").Cells(3, 6).Value, 5)
If Not Application.Intersect(Cells(1, I), Range("Cells(1, j):Cells(1, k)")) Is Nothing Then
MsgBox "Cellule fait partie de Plage"
End If
End Sub
Bonsoir,
Il est bien en posant une question de dire que cela de fonctionne pas (au moins) et où !
Bien aussi d'utiliser la balise code dans un post, et d'indenter son code, c'est toujours nettement plus lisible pour les intervenants, et ça aide à voir plus vite ce qui ne va pas !
Sinon :
-Intersect n'est pas une fonction mais une méthode de l'objet Application (il n'est pas inutile de le vérifier avant d'appeler tout "fonction"...)
-Il est souhaitable de déclarer ses variables en tête de procédure, et de les typer sauf cas particulier.
-Le mélange majuscule-minuscule pour des variables d'utilisation semblable fait un peu désordre, mais ce n'est là qu'une question d'esthétique !
Par contre leur initialisation montre qu'on leur affecte des chaînes 5 caractères, mais ensuite elles sont utilisées comme s'il s'agissait de variables integer (déclaration et type aurait été fort utile pour y voir clair dans cet imboglio).
Et :
Range("Cells(1, j):Cells(1, k)")là, hormis l'incertitude déjà évoquée, il y a au moins 2 erreurs de syntaxe dans l'expression ! Belle accumulation
Cordialement.
Bonjour,
Merci pour vos remarques. En effet, il y avait bien un problème avec les types de variables utilisés.
Je vous remets donc le code corrigé, qui fonctionne
Sub Verifierplage()
Dim I As String
Dim J As String
Dim K As String
Dim L As Long
Dim M As Long
Dim N As Long
I = Right(Workbooks("Creationdecoupage").Worksheets("page de garde").Cells(6, 2).Value, 5)
J = Right(Workbooks("Creationdecoupage").Worksheets("Code").Cells(3, 5).Value, 5)
K = Right(Workbooks("Creationdecoupage").Worksheets("code").Cells(3, 6).Value, 5)
L = I
M = J
N = K
If Application.Intersect(Worksheets("TEST").Cells(L, 1), Worksheets("TEST").Range(Cells(M, 1), Cells(N, 1))) Is Nothing Then
MsgBox "Cellule ne fait pas partie de la plage"
End If
End SubCordialement
Jean