Erreur Objet 424 après range.find
Bonsoir,
Petit soucis avec ce code :
Sub macorrel()
Dim Ccheuse As Range
Dim Ccheuse2 As Range
Dim Position, Position2, Position3, Position4 As String
Dim n As Long
Dim cor As Double
n = Range("A" & Rows.Count).End(xlUp).Row - 2
With Worksheets("Base Cours").Range("AA1:BO1")
Set Ccheuse = .Find("Clôture " & AI.PA & " ", LookIn:=xlValues)Le problème étant à la dernière ligne (je l'ai coupé) : erreur 424 Object required.
Merci d'avance !
Ps: Le code complet, c'est peut être plus simple à lire :
Sub macorrel()
Dim Ccheuse As Range
Dim Ccheuse2 As Range
Dim Position, Position2, Position3, Position4 As String
Dim n As Long
Dim cor As Double
n = Range("A" & Rows.Count).End(xlUp).Row - 2
With Worksheets("Base Cours").Range("AA1:BO1")
Set Ccheuse = .Find("Clôture " & AI.PA & " ", LookIn:=xlValues)
Set Ccheuse2 = .Find("Clôture " & AIR.PA & "", LookIn:=xlValues)
If Ccheuse Is Nothing Or Ccheuse2 Is Nothing Then
MsgBox " Erreur de saisie"
Else
Ccheuse.Offset(1, 0).Select
Position = ActiveCell.Address
Position2 = ActiveCell.Offset(n, 0).Address
Ccheuse2.Offset(1, 0).Select
Position3 = ActiveCell.Address
Position4 = ActiveCell.Offset(n, 0).Address
End If
End With
cor = WorksheetFunction.correl(Range("" & Position & ":" & Position2 & ""), Range("" & Position3 & ":" & Position4 & ""))
Range("X10") = cor
End SubBonsoir,
juste pour info, lorsque vous écrivez ceci : Dim Position, Position2, Position3, Position4 As String
seul Position4 en dimensionné en String, les trois autres sont en Variant... Pour typer une variable il faut le faire individuellement.
Sinon qu'est-ce AI.PA et AIR.PA ?
@ bientôt
LouReeD
Salut,
Merci pour le problème de déclaration, je pensais l'avoir vu quelque part, mais apparemment pas...
Finalement ma sub macorrel marche quand je le ferme et que je le réouvre
Mais je voulais en fait faire une fonction.
Function macorrel(Titre1 As String, Titre2 As String)
Dim Ccheuse As Range
Dim Ccheuse2 As Range
Dim Position As String
Dim Position2 As String
Dim Position3 As String
Dim Position4 As String
Dim n As Long
Dim cor As Double
n = Range("A" & Rows.Count).End(xlUp).Row - 2
With Worksheets("Base Cours").Range("AA1:BO1")
Set Ccheuse = .Find("Clôture " & Titre1 & "", LookIn:=xlValues)
Set Ccheuse2 = .Find("Clôture " & Titre2 & "", LookIn:=xlValues)
If Ccheuse Is Nothing Or Ccheuse2 Is Nothing Then
MsgBox " Erreur de saisie"
Else
Ccheuse.Offset(1, 0).Select
Position = ActiveCell.Address
Position2 = ActiveCell.Offset(n, 0).Address
Ccheuse2.Offset(1, 0).Select
Position3 = ActiveCell.Address
Position4 = ActiveCell.Offset(n, 0).Address
End If
End With
cor = WorksheetFunction.correl(Range("" & Position & ":" & Position2 & ""), Range("" & Position3 & ":" & Position4 & ""))
Range("X10") = Abs(cor)
End FunctionIdéalement comme ceci.
Quand je compile il n'y a pas de soucis, mais quand je fais tourner la fonction sur la feuille de calcul il me dit " There is a formule with formula".
Pourtant le sub marche bien,je comprends pas trop...
Bonjour
Le point "." n'est il pas interdit dans le nom des variables sous VBA ? Si vraiment une séparation s'impose alors mieux vaut le "_" ou bien le mélange avec des majuscules : AiPa ou Ai_Pa ou AI_PA
Certain diront que les minuscule c'est mieux : aipa ou ai_pa, comme cela si par méconnaissance vous donnez un nom "réservé" par VBA à votre variable cette dernière passera automatiquement à la bonne syntaxe, comme une variable nommée : timer, sui à la validation de la ligne se transforme en Timer...
C'est pourquoi certains font un mélange en mettant une minuscule en premier caractère qui représente ce qu'est la variable puis son nom avec une majuscule. Exemple un variable représentant un objet Range : Dim oMaCellule As Range
Lors de l'écriture vous tapez tout en minuscule et VBA corrigera la casse à la validation de la ligne ce qui permet de voir les fautes de frappe car si vous tappez : omacelllule à la validation il n'y aura pas les majuscules car la variable est inconnue de VBA. (le o pour Objet)
Je suis sur téléphone
@ bientôt
LouReeD
Super ! Merci de ta réponse !
Du coup j'ai bien modifié la casse, cependant le problème persiste. J'ai identifié un couac, quand je n'appelais pas ma fonction dans la version précédente envoyé, en effet je codais comme si c'était un sub ( Ligne en dessous du end with).
Function macorrel(Titre1 As String, Titre2 As String)
Dim Ccheuse As Range
Dim Ccheuse2 As Range
Dim Position As String
Dim Position2 As String
Dim Position3 As String
Dim Position4 As String
Dim n As Long
Dim cor As Double
n = Range("A" & Rows.Count).End(xlUp).Row - 2
With Worksheets("Base Cours").Range("AA1:BO1")
Set Ccheuse = .Find("Clôture " & Titre1 & "", LookIn:=xlValues)
Set Ccheuse2 = .Find("Clôture " & Titre2 & "", LookIn:=xlValues)
If Ccheuse Is Nothing Or Ccheuse2 Is Nothing Then
MsgBox " Erreur de saisie"
Else
Ccheuse.Offset(1, 0).Select
Position = ActiveCell.Address
Position2 = ActiveCell.Offset(n, 0).Address
Ccheuse2.Offset(1, 0).Select
Position3 = ActiveCell.Address
Position4 = ActiveCell.Offset(n, 0).Address
End If
End With
macorrel = WorksheetFunction.correl(Range("" & Position & ":" & Position2 & ""), Range("" & Position3 & ":" & Position4 & ""))
End FunctionDu coup voici la nouvelle version qui pose toujours problème.
Mais je crois que je ne comprends pas comment faire marcher une fonction à deux variable tout simplement.
J'ai fait ceci :
Function add(n As Integer, p As Integer)
add = n * p + 10
End FunctionImpossible de le faire tourner
Cependant cette même fonction sans p marche correctement.
Haha finalement j'ai réussi a faire tourner ma petite fonction add, il faut rentrer des points virgules dans la feuille de calcul ( alors qu'on a rentré une virgule dans la fonction
Désormais la fonction macorrel retourne un #Value ( en utilisant les point virgule dans le tableau )
Bonsoir,
en règle général, voir tout le temps, les fonctions "formules" sur feuille ont des points-virgules pour séparer les paramètres, mais ce sont des virgules sous VBA, il n'y a pas de lien direct entre les deux, seulement des interactions !
Vos formules avec les différentes plages de calcul se "superposent" donc une valeur de cellule dépend d'une autre qui elle même dépend de la première : exemple en A1 : =B1*2 et en B1 : =A1+2, l'une dépend de l'autre et inversement = référence circulaire...
@ bientôt
LouReeD
