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 Sub

Bonsoir,

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 En fait oui le problème venait bine du AI.PA et AIR.PA qui est en fait du texte.
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 Function

Idé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 Function

Du 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 Function

Impossible de le faire tourner Pourtant c'est ultra simpliste. Ma feuille de calcul m'affiche une erreur #Value.
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 )

image

Soit...

Je pense que j'appelle mal ma fonction du coup, en faisant tourner le code avec les variables pré-rentrés il n'y avait aucun probléme.

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

Rechercher des sujets similaires à "erreur objet 424 range find"