Initialisation cellule par un Cells ou target.offset. Quelle différence

Bonjour

Dans l'exemple ci dessous, je travaille sur une cellule chargée dans une variable.

WRKMINI = Cells(WRKLIGNE, 24)

Dans la suite du traitement j'ai les ordres suivants:

If Cells(WRKLIGNE, 24) <> WRKMINI Then
Cells(WRKLIGNE, 22) = Cells(3, 5)
End If

J'ai supprimé tous les ordres intermédiaires pour être certain que je ne modifie pas la variable intermédiaire.

Il se trouve que systématiquement la cellule 22 est réinitialisée avec le contenu de la cellule (3,5)

Pour moi, la variable WRKMINI est sensée avoir la même valeur que la cellule d'origine.

Où ce situe mon erreur ?

Cordialement

Bonjour

Vu les lignes de code que vous donnez, je ne comprends pas le pourquoi de votre IF. A moins que la cellule 24 ne change entre la définition de votre variable Wrkmini et la ligne IF ?

Crdlt

Je fais une suite à ma demande.

J'ai trouvé la solution. Mes variables étaient de type Integer. Je les ai changés en type Currency et ça fonctionne.

Par contre je ne vois toujours pas la différence entre initialiser une variable avec

WRKMINI = Cells(WRKLIGNE, 24)

ou

WRKMINI = Target.Offset(WRKLIGNE, 24)

Est ce un problème de performance, habitude de rédaction, ... ?

Cordialement

Jacques Julien

Pour répondre à Dan.

J'avais des instructions entre le if et le chargement. Mais la cellule était toujours mise à jour, alors que mes tests faisaient que cela ne devait pas être.

J'ai donc supprimé toutes les instructions intermédiaires pour certains tests.

Même là, ma cellule se mettait à jour. Le problème venait d'ailleurs. J'ai donc lu les chapitres sur les variables et j'ai trouvé le pourquoi du comment.

Cordialement

Jacques Julien

1. Par contre je ne vois toujours pas la différence entre initialiser une variable avec

WRKMINI = Cells(WRKLIGNE, 24)

ou

WRKMINI = Target.Offset(WRKLIGNE, 24)

Est ce un problème de performance, habitude de rédaction, ... ?

avec la première instruction, vous déclarez attribuer une valeur à la variable qui vient de la cellule ligne "wrkligne" en colonne 24 tandis qu'avec la deuxième instruction la valeur attribuée à la variable dépend de la cellule cliquée (Target) et de son Offset qui vous déplace le Target de la valeur de wrkligne et de 24 colonnes plus loin.

exemple : mettons que wrkligne = 1 (ligne 1)
Cas 1 : WRKMINI sera égal à la valeur de la cellule X1 (ligne 1, colonne 24)
Cas 2 : Vous cliquez sur B10, WRKMINI va lire la valeur Target (donc B10) mais dû à votre OFFSET, la variable WRKLIGNE (valeur 1) sera déplacée de la ligne 10 + 1 , colonne 2 (B) + 24 . WRKMINI aura donc la valeur de Z11.

2. Même là, ma cellule se mettait à jour. Le problème venait d'ailleurs. J'ai donc lu les chapitres sur les variables et j'ai trouvé le pourquoi du comment.

Faut aussi voir où vous déclarez vos variables. Dans le code ou ailleurs ? Cela a son importance cela.

merci pour l'information.

je déclare les variables dans le code.

Dim WRKLIGNE As Integer
Dim WRKMINI As Currency
Dim WRKMAXI As Currency

au départ les 3 variables étaient de type Integer, mais 2 variables contenaient des valeurs monétaires. Avec les décimales, ça ne le faisait pas bien.

Je débute, donc je fais au plus simple et surtout j'essaie de faire clair pour arriver à m'y retrouver plus tard. J'ai écris des millions de lignes de code en RPG durant ma carrière. Le plus complexe n'est pas d'écrire du code, mais c'est de le faire suffisamment clair pour qu'il puisse être maintenu simplement.

Cordialement

Jacques Julien

Re

Ok mais n'oubliez pas qu'il n'est pas toujours nécessaire de créer une variable. De cette sorte on est plus direct et on s'évite trop d'analyse lorsque l'on veut changer dans le code plus tard.

Cordialement

Rechercher des sujets similaires à "initialisation target offset quelle difference"