Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

erreur VBA 1004... encore une..

8 réponses
Avatar
fuzzy
Bonjour,

Ci-joint le code d'une macro d=E9clar=E9e dans un module, j'ai une erreur
1004 syst=E9matiquement =E0 la ligne ou l'on affecte une valeur =E0 "cible"

J'ai essay=E9 de d=E9clarer cette variable ou non, j'ai essay=E9 de mettre
ou non le nom de la sheet devant les ranges,... sans succ=E8s =3D> si qqun
a une id=E9e,

Merci,
FreD.

Sheets("diff=E9rences donn=E9es").Activate
For k =3D 10 To line_planning
If Sheets("diff=E9rences donn=E9es").Range(Cells(k, 9), Cells(k,
9)).Value =3D "NOK" Then
cible =3D Sheets("planning").Range(Cells(k, 6))
colorie cible
End If
Next

8 réponses

Avatar
MichDenis
Utilise cette synntaxe :

cible = Sheets("planning").Range(Sheets("planning").Cells(k, 6))

Ou ceci :

With Sheets("planning")
cible = .Range(.Cells(k, 6))
End if





"fuzzy" a écrit dans le message de news:

Bonjour,

Ci-joint le code d'une macro déclarée dans un module, j'ai une erreur
1004 systématiquement à la ligne ou l'on affecte une valeur à "cible"

J'ai essayé de déclarer cette variable ou non, j'ai essayé de mettre
ou non le nom de la sheet devant les ranges,... sans succès => si qqun
a une idée,

Merci,
FreD.

Sheets("différences données").Activate
For k = 10 To line_planning
If Sheets("différences données").Range(Cells(k, 9), Cells(k,
9)).Value = "NOK" Then
cible = Sheets("planning").Range(Cells(k, 6))
colorie cible
End If
Next
Avatar
fuzzy
..même punition au même endroit avec les 2 solutions.. une autre
idée ?
(c'est vraiment une galère cette erreur...)

On 30 juil, 14:52, "MichDenis" wrote:
Utilise cette synntaxe :

cible = Sheets("planning").Range(Sheets("planning").Cells(k, 6))

Ou ceci :

With Sheets("planning")
cible = .Range(.Cells(k, 6))
End with



Avatar
Modeste
Bonsour® fuzzy avec ferveur ;o))) vous nous disiez :

..même punition au même endroit avec les 2 solutions.. une autre
idée ?
(c'est vraiment une galère cette erreur...)


pourquoi pas simplement :
cible = Sheets("planning").Cells(k, 6)

@+
;o)))

Avatar
fuzzy
Par acquis de conscience j'ai voulu voir si c'était l'affectation qui
posait pb mais non c'est tout bêtement la sélection de la cellule..

donc un simple :
Sheets("planning").Range(Cells(k, 6)).Select
ou
Sheets("planning").Range(Cells(k, 6);Cells(k, 6)).Select ou
Sheets("planning").Range(sheets("planning").Cells(k, 6)).Select ....

ne fonctionne pas.. (ARGHHHHHHHHHH)
Avatar
News CI
Bonjour Fred,

Essaye d'activer la feulle planning avant ton affectation par :
Sheets("planning").Activate

Si cible va contenir un objet Range, il faut mettre Set avant.
L'affectation va devenir (en simplifiant aussi) :
set cible = Sheets("planning").Cells(k, 6)

Salutations,

François,


"fuzzy" a écrit dans le message de news:

Bonjour,

Ci-joint le code d'une macro déclarée dans un module, j'ai une erreur
1004 systématiquement à la ligne ou l'on affecte une valeur à "cible"

J'ai essayé de déclarer cette variable ou non, j'ai essayé de mettre
ou non le nom de la sheet devant les ranges,... sans succès => si qqun
a une idée,

Merci,
FreD.

Sheets("différences données").Activate
For k = 10 To line_planning
If Sheets("différences données").Range(Cells(k, 9), Cells(k,
9)).Value = "NOK" Then
cible = Sheets("planning").Range(Cells(k, 6))
colorie cible
End If
Next
Avatar
fuzzy
En effet avec cette solution je n'ai plus l'erreur 1004 mais la 91 :
"variable objet ou variable de bloc non définie"

Du coup j'ai fait un set de ma variable juste après la déclaration :
Set cible = Range("A1")

et cela fonctionne !! (enfin ça fait un peu bidouille..)

En tout cas merci pour vos idées !



On 30 juil, 15:33, "Modeste" wrote:
Bonsour® fuzzy avec ferveur ;o))) vous nous disiez :

..même punition au même endroit avec les 2 solutions.. une autre
idée ?
(c'est vraiment une galère cette erreur...)


pourquoi pas simplement :
cible = Sheets("planning").Cells(k, 6)

@+
;o)))



Avatar
MichDenis
Effectivement il y avait une coquille dans le code proposée,

With Sheets("planning")
Cible = .Range(.Cells(k, 6).Address)
End With
OU

Cible = Sheets("planning").Range(Sheets("planning").Cells(k, 6).Address)

Explication : L'objet Range demande une adresse pour retourner la valeur
d'une cellule et non la valeur d'une cellule. J'avais omis de
spécifier la propriété Address au deux lignes de code.

La valeur de la propriété par défaut d'un objet range est "Value" et non "Address".

;-))






"MichDenis" a écrit dans le message de news:
%
Utilise cette synntaxe :

cible = Sheets("planning").Range(Sheets("planning").Cells(k, 6))

Ou ceci :

With Sheets("planning")
cible = .Range(.Cells(k, 6))
End if





"fuzzy" a écrit dans le message de news:

Bonjour,

Ci-joint le code d'une macro déclarée dans un module, j'ai une erreur
1004 systématiquement à la ligne ou l'on affecte une valeur à "cible"

J'ai essayé de déclarer cette variable ou non, j'ai essayé de mettre
ou non le nom de la sheet devant les ranges,... sans succès => si qqun
a une idée,

Merci,
FreD.

Sheets("différences données").Activate
For k = 10 To line_planning
If Sheets("différences données").Range(Cells(k, 9), Cells(k,
9)).Value = "NOK" Then
cible = Sheets("planning").Range(Cells(k, 6))
colorie cible
End If
Next
Avatar
Modeste
Bonsour® fuzzy avec ferveur ;o))) vous nous disiez :

En effet avec cette solution je n'ai plus l'erreur 1004 mais la 91 :
"variable objet ou variable de bloc non définie"

Du coup j'ai fait un set de ma variable juste après la déclaration :
Set cible = Range("A1")

et cela fonctionne !! (enfin ça fait un peu bidouille..)


j'en conclue donc comme l'avait bien deviné Denis
que la variable Cible contient une adresse et non une valeur de cellule
par l'utilisation de l'instruction Set, Cible est déclaré par défaut en type
Variant
ce qui n'est pas trés heureux ici !!!

Pour éviter ce genre de errements lors du débuggage
il convient de prendre l'habitude d'ajouter en tete de chaque module
Option Explicit
pour cela , dans VBA Outils> Options>
Onglet Editeur
cocher : Déclaration des variables obligatoire

Définir chaque type de variable
Public (ou Private) Cible As Range

puis dans VBA Outils> Options>
Onglet général
activer : arret sur les erreur non gérées

@+
;o)))