Réaliser un test dans une macro
Bonjour à tous,
Contexte:
Pour lancer une analyse je dois sélectionner un cellule dans laquelle doit se trouver une valeur, et je souhaite pouvoir sélectionner cette valeur de différent endroit dans mon classeur sans restriction.
Problème:
Mon analyse se base sur un type de valeur précis, je dois donc m'assurer que la valeur de la cellule sélectionnée est comprise dans une liste de valeur avant de lancer l'analyse.
Question:
Je me suis dis que je devrais utiliser la fonction Match, j'ai donc écrit le code suivant:
Sub test1()
'
'Cette macro a pour objet de mettre à jour les tables d'analyse à partir d'une cellule sélectionnée, si la valeur de cette sélection correspond à une valeur dans la "Table_Valeur" colonne "Code ISIN"
'
'Demande confirmation du lancement de l'analyse
Beep
If MsgBox("Souhaitez-vous lancer l'analyse de la valeur sélectionnée?", vbQuestion + vbYesNo + vbDefaultButton1 + vbSystemModal, "Sélection pour analyse") = vbYes Then
'
'Copier la cellule sélectionnée
Selection.Copy
'
'Coller la sélection dans le formulaire
Range("Valeur_sélectionnée").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
'
'Tester si la sélection correspond au code ISIN d'une valeur retenue
Dim VAL1 As Variant
VAL1 = Application.WorksheetFunction.Match(Range("Valeur_sélectionnée"), Range("Table_Valeurs[Code ISIN]"), 0)
If Range("Valeur-sélectionnée") = Range(VAL1) Then
'
'Raffraichir l'onglet après copie afin de raffraichir les zones de "nom" associées à la valeur (secteur, industrie, ind. nat.)
Sheets("C00-Sélection valeur").Calculate
'etc....
End If
End If
End Sub
je bute sur la syntaxe de l'égalité
If Range("Valeur-sélectionnée") = Range(VAL1) Then
Pourriez-vous m'aider à éclaircir cette difficulté?
D'avance merci pour vos contributions.
Cordialement
Bonjour,
La fonction MATCH renvoie la position de la valeur recherchée dans Table_Valeurs[Code ISIN].
VAL1 étant de type variant, si la valeur n'est pas trouvée, VAR1 sera vide et la fonction MATCH renverra une valeur d'erreur.
Tu peux faire ce test
Sub test1()
Dim VAL1 As Variant
'Cette macro a pour objet de mettre à jour les tables d'analyse à partir d'une cellule sélectionnée, _
si la valeur de cette sélection correspond à une valeur dans la "Table_Valeur" colonne "Code ISIN"
'Demande confirmation du lancement de l'analyse
Beep
If MsgBox("Souhaitez-vous lancer l'analyse de la valeur sélectionnée?", vbQuestion + vbYesNo + vbDefaultButton1 + vbSystemModal, "Sélection pour analyse") = vbYes Then
Selection.Copy
Range("Valeur_sélectionnée").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
'Tester si la sélection correspond au code ISIN d'une valeur retenue
On Error Resume Next
VAL1 = Application.WorksheetFunction.Match(Range("Valeur_sélectionnée"), Range("Table_Valeurs[Code ISIN]"), 0)
If Not IsEmpty(VAL1) Then
'Raffraichir l'onglet après copie afin de raffraichir les zones de "nom" associées à la valeur (secteur, industrie, ind. nat.)
MsgBox "Trouvé en position " & VAL1
'Sheets("C00-Sélection valeur").Calculate
Else
MsgBox "Pas trouvé !"
End If
On Error GoTo 0
End If
End Sub
A+
Bonjour frangy,
Merci pour ta contribution et tes explications très claires.
Le test fonctionne parfaitement maintenant.
A bientôt
Cordialement