VBA Problème avec Find

Bonjour à tous,

je suis bloqué avec l'utilisation d'une cellule identifiée avec l'aide d'un Find.

Le code est le suivant:

Sub InsertionFeuille()
Dim NewSheetName As String
Dim Nb As Integer

NewSheetName = InputBox("Saisir le numéro de la nouvelle feuille insérée: ")

Nb = CopierColler(NewSheetName)
End Sub

Function CopierColler(NomFeuille As String)
Dim cel As Range
Dim i As Long
Dim OldSheetName As String

Set cel = ActiveWorkbook.Worksheets(NomFeuille).Rows(1).Find("Dernier mois", , xlValues, xlWhole)
i = 5

cel.Offset(0, 1).Cut
Range("I3").PasteSpecial

    Do While Range("B" & i) <> ""
        Range("A" & i).Values = Range("M" & i).Values
    Loop

OldSheetName = InputBox("Saisir le numéro de la feuille précédente: ")

ActiveWorkbook.Worksheets("OldSheetName").Range("A1:EY1").Copy
ActiveWorkbook.Feuille.Range("A1").PasteSpecial

ActiveWorkbook.Worksheets("OldSheetName").Range("EZ1:FZ450").Copy
ActiveWorkbook.Feuille.Range("EZ1").PasteSpecial

CopierColler = 1

End Function

J'ai une erreur au niveau de la ligne surlignée du type "91 variable objet". Et malgré divers essais je n'arrive pas à comprendre comment écrire les choses. Je comprends que "cel" ne contient pas l'adresse de la cellule sinon je pnese que ca fonctionnerait mais je sais pas comment y remédier. J'ai d'ailleurs essayé la propriété Address mais sans succès. Quelqu'un peut il m'aider ?

Merci,

SkillzZ

Bonjour,

Il faut tester avant de l'utiliser :

    If Not cel Is Nothing Then

Bonjour tout le monde, bonjour MFerrand,

effectivement ta proposition mais permet de ne plus avoir cette erreur mais j'en ai d'autres maintenant. Je n'arrive pas à donner en A5 la valeur de M5, en A6 la valeur de M6, etc jusqu'à ce que ma condition ne soit plus vérifiée. Par ailleurs je me demande si je ne devrais pas rajouter des "" pour l'objet NomFeuille appelé à l'intérieur de la classe Worksheets().

Si j'utilise le code suivant (seul l'ajout de ligne citée par MFerrand juste au dessus vient le modifier comparé au précédent ainsi que l'ajout des ""):

Sub InsertionFeuille()
Dim NewSheetName As String
Dim Nb As Integer

NewSheetName = InputBox("Saisir le numéro de la nouvelle feuille insérée: ")

Nb = CopierColler(NewSheetName)
End Sub

Function CopierColler(NomFeuille As String)
Dim cel As Range
Dim i As Long
Dim OldSheetName As String

Set cel = ActiveWorkbook.Worksheets("NomFeuille").Rows(1).Find("dernier mois :", , xlValues, xlWhole)
i = 5

    If Not cel Is Nothing Then
        cel.Offset(0, 1).Cut
        Range("I3").PasteSpecial
    End If

    Do While ActiveWorkbook.Worksheets("NomFeuille").Range("B" & i) <> ""
        ActiveWorkbook.Worksheets("omFeuille").Range("A" & i).Values = ActiveWorkbook.Worksheets("NomFeuille").Range("M" & i).Values
    Loop

OldSheetName = InputBox("Saisir le numéro de la feuille précédente: ")

ActiveWorkbook.Worksheets("OldSheetName").Range("A1:EY1").Copy
ActiveWorkbook.Feuille.Range("A1").PasteSpecial

ActiveWorkbook.Worksheets("OldSheetName").Range("EZ1:FZ450").Copy
ActiveWorkbook.Feuille.Range("EZ1").PasteSpecial

CopierColler = 1

End Function

J'obtiens une erreur du type 9 l'indice n'appartient pas à la sélection sur la ligne que je vous ai surlignée. Pourtant il y a bien une cellule contenant "dernier mois :", c'est donc sûrement l'écriture de mon code qui pose problème..

Une idée ?

Je vous remercie,

SkillzZ

Bonjour,

Dan la première version tu as écris :

"dernier mois"

dans la seconde version :

"dernier mois :"

laquelle est la bonne ?

A+

C'est NomFeuille qui pose problème ! Nom de variable, passé en argument de ta fonction et tu le mets entre guillemets ensuite !

Ta feuille ne s'appelle pas "NomFeuille" !

Cordialement.

Merci pour ta réponse rapide, la bonne version est celle avec "dernier mois :".

En enlevant les guillemets autour de NomFeuille, j'ai exactement le même problème en fait. Toujours une erreur de type 9 au même niveau.

L'argument que je rentre dans la fonction est NewSheetName qui est une chaîne de caractères (bien que cette chaîne soit "4" pour ce cas là car la feuille se nomme comme ça, est ce problématique?). Cette façon de faire est-elle correcte ?

Je te remercie pour ta réponse,

SkillzZ

Vérifie le nom sur l'onglet. Et teste dans ta Sub que NewSheetName correspond bien... avec un :

Worksheets(NewSheetName).Activate

par exemple (que tu supprimeras ensuite) : si erreur là c'est que le nom n'est pas bon !...

Effectivement l'erreur apparaît à cet endroit là .. Ca signifie donc que NewSheetName ne peut pas contenir un chiffre comme nom parce qu'il est défini comme un String ?

Le problème est que le nom de cette feuille (et certaines autres) doit nécessairement être un chiffre, au vu de la configuration de mon fichier. Si je déclare NewSheetName comme un Integer, Worksheets() ne voudra jamais récupérer un objet de type Integer j'imagine si ?

Merci MFerrand, si tu as une solution à me proposer pour contourner ce problème je suis preneur..

SkillzZ

Un nom de feuille, même entièrement chiffres, doit être String...

Force avec CStr pour voir.

Là je m'absente... A+

Je ne connais pas cette fonction mais je vais me renseigner! Mille mercis !

A+

J'ai tenté le CStr, malheureusement j'ai un erreur de type By Ref qui je pense, signifie qu'Excel n'a pas réussi à forcer la conversion.

Le fait que mes noms de feuille soient de chiffres est il un obstacle incontournable ?

SkillzZ

Bonjour à tous, Bonjour MFerrand,

un petit UP pour savoir si le fait que les noms de mes feuilles soient des chiffres est un problème incorrigible ?

Je vous remercie, et vous souhaite un bon appétit !

SkillzZ

Bonjour,

Si tu as une erreur ByRef incompatible, c'est simplement que tu as passé l'argument à la fonction avec une variable non explicitement de type String...

Mais ma suggestion était de forcer non au niveau du passage de l'argument, lequel ne provoquait pas d'erreur, mais sur la ligne concernée :

Set cel = ActiveWorkbook.Worksheets(CStr(NomFeuille)).....

Cordialement.

Merci MFerrand, ça a fonctionné ! J'ai réussi à passé cette étape. Génial !

J'ai un autre souci dans la suite du code mais je vais essayer de me débrouiller seul !

En tout cas je te remercie pour ton aide MFerrand !

Bon week-end !

Rechercher des sujets similaires à "vba probleme find"