VBA - Erreur 1004 suivant la feuille active

Bonjour à tous,

Mon dernier post avant le week-end.. J'ai un souci avec un code VBA:

Mon code fonctionne très bien lorsque je le lance à partir de la feuille qu'il affecte (onglet "Sheet1"). En revanche, si je me positionne dans un autre onglet comme "Sheet2", j'obtiens une erreur de type 1004 sur ma ligne de code suivante:

Set PlageDeRecherche = ThisWorkbook.Sheets("Sheet1").Range(Cells(1, 1), Cells(1, j))

Je voudrais savoir à quoi c'est dû, et comment résoudre ce problème svp. Quelqu'un saurait-il me dire ça ?

Je vous remercie et vous souhaite un bon week-end !

SkillzZ

8exemple.xlsm (23.02 Ko)

bonjour,

la syntaxe correcte pour définir une plage avec range et cells

Set PlageDeRecherche =Range(ThisWorkbook.Sheets("Sheet1").Cells(1, 1),ThisWorkbook.Sheets("Sheet1").Cells(1, j))

ou

with ThisWorkbook.Sheets("Sheet1")
Set PlageDeRecherche =Range(.Cells(1, 1),.Cells(1, j))
end with

Bonjour,

à tester,

Set PlageDeRecherche = ThisWorkbook.Sheets("Sheet1").Range(Cells(1, 1).Address, Cells(1, j).Address)

Bonsoir SkillzZ, le forum,

je te retourne ton fichier modifié :

9exemple.xlsm (22.80 Ko)

* sur "Sheet1" ou "Sheet2", fais Ctrl e

* n'oublie pas d'faire un 2ème test avec un code inexistant,

par exemple "CC_1450T". (oui, sur les 2 feuilles aussi )


Alt F11 pour voir le code VBA, puis revenir sur Excel

si besoin, tu peux demander une adaptation.

merci de me dire si ça te convient.

dhany

Bonjour à tous !

Merci beaucoup à vous 3, dhany, i20100 et h2so4 pour vos réponses ! Je n'ai pas encore testé la solution de i20100 car celle de h2so4 fonctionne et je vais l'utiliser dans un premier temps. En ce qui concerne ta solution dhany, elle marche très bien aussi. Elle est optimale, mais plus complexe, c'est pourquoi je vais d'abord utiliser la solution de h2so4 et tenter de faire fonctionner ma macro dans un premier temps (cette dernière est composée de celle que je vous ai envoyée dans mon fichier). Une fois qu'elle fonctionnera, je me pencherai vers son optimisation et reviendrai utiliser cette solution que tu m'as apportée.

Merci pour votre temps et votre générosité ! Bonne semaine et peut-être, -sûrement-, à bientôt !

SkillzZ

Bonjour SkillzZ, le forum,

tu a écrit :

En ce qui concerne ta solution dhany, elle marche très bien aussi. Elle est optimale, mais plus complexe.

meuh non, c'est tout simple ! la preuve, voici mon code VBA commenté :

Dim Account_Code$, AC_Parent$, CC_Code$, cc$ : déclaration de variables ; Dim cc$ : idem que Dim cc As String

Dim plg As Range, cel As Range, msg$, n%, i& : Dim n% : idem que Dim n As Integer ; Dim i& : idem que Dim i As Long

CC_Code = "CC_1450" : le code qui sera cherché en ligne n° 1 : CC_1450

With Worksheets("Sheet1") .. End With : avec la feuille "Sheet1"

n = .Cells(1, Columns.Count).End(1).Column : End(1) : idem que End(xlToLeft)n = n° dernière colonne, sur la ligne 1

Set plg = .[A1].Resize(, n) : plg = plage des cellules utilisées en ligne 1, ici A1:AF1

Set cel = plg.Find(CC_Code, , -4163, 1, 1) : idem que Set cel = plg.Find(CC_Code, , xlValues, xlWhole, xlByRows)

ainsi, ça cherche CC_1450 en A1:AF1 ; si ça ne le trouve pas, ça affiche le message ci-dessous, puis ça quitte la sub.

    If cel Is Nothing Then
      msg = CC_Code & " n'est pas présent dans " & plg.Address(0, 0)
      MsgBox msg, 48: Exit Sub
    End If

Address(0,0) fait que ça retourne l'adresse sans les signes « $ » ; 48 est pour afficher l'icône « ! » (dans un triangle jaune)


c'est seulement si CC_1450 a été trouvé en A1:AF1 qu'on fait la suite.

n = cel.Column : n = n° colonne de la cellule où a été trouvé CC_1450 ; ici, c'est donc 10 : en colonne J

i = .Cells(Rows.Count, n).End(3).Row : End(3) : idem que End(xlUp)i = n° dernière ligne, en colonne n

ici, en colonne 10, dernière cellule utilisée = J3 ➯ dernière ligne = 3

cc = .Cells(i, n) : cc = code de la cellule J3 : CC1452 ; y'a plus qu'à l'afficher :

    msg = CC_Code & " a été trouvé en colonne " & n & vbLf & vbLf _
      & "dernière valeur de la colonne " & n & " :" & vbLf & cc
    MsgBox msg, 64

64 est pour afficher l'icône « i » (information)

dhany

Salut dhany,

Merci beaucoup pour les explications c'est top. Ca va m'aider !!

Très bonne journée, à toi !

SkillzZ

Bonsoir SkillzZ,

tu a écrit :

Merci beaucoup pour les explications c'est top. Ça va m'aider !!

j'suis ravi qu'tu aies apprécié mes explications, et qu'elles vont te servir !

merci d'avoir passé le sujet en résolu, et bonne soirée !

dhany

Rechercher des sujets similaires à "vba erreur 1004 suivant feuille active"