Cellule = variable : concaténer cette variable

Résolu
claclou.0204 -  
f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Je déclare au tout début de mon module en public la variable qui correspond à ma cellule( je la nomme c1 cette variable), c1 = Stock.Worksheets("ASM").Cells(134, 10)
Comme je l'utilise dans plusieurs procédures, la déclarer me permet de ne pas rallonger mes codes avec : Stock.Worksheets("ASM").Cells(134, 10) à chaque fois ...

Ainsi, je la déclare dans l'onglet "déclarations" au début de mon module en public bien sûr.
Dans la 1ère procédure j'affecte à cette variable sa valeur c'est à dire : c1 = Stock.Worksheets("ASM").Cells(134, 10)

et puis la ligne du dessous je soustrait à c1 une valeur mais ca ne marche pas ...
Par contre si je n'utilise pas c1 mais Stock.Worksheets("ASM").Cells(134, 10) ca fonctionne...
Je ne sais pas pourquoi

avez vous une solution à ce problème ?
Merci d'avance

Voici mon code :



Public c1 As Integer

---------------------------------------------------

Sub petitMikadocentral()
Dim Nom As Workbook 'Mon classeur
Dim Stock As Workbook 'L'autre classeur
Dim quantité As Integer


Set Nom = ActiveWorkbook
Set Stock = Workbooks.Open("C:\Users\clari\Documents\STAGE\Missions\Mission n°2\ASM-gestion stock.xlsm")

quantité = Nom.Worksheets("Feuil1").Cells(5, 8)
c1 = Stock.Worksheets("ASM").Cells(134, 10)

'platine : C1

c1 = c1 - quantité * Nom.Worksheets("Feuil1").Cells(4, 4)


Nom.Worksheets("Feuil1").Cells(5, 8) = 0



End Sub

2 réponses

yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 
bonjour,
je pense qu'il faut plutôt faire ainsi:
Public c1 As range
set c1 = Stock.Worksheets("ASM").Cells(134, 10)

Il faut déclarer la variable comme un ensemble de cellules, pas comme un entier. Et associer la variable c1 à la cellule, faire correspondre la variable à la cellule.
Les autres instructions (sans le
set
) utilisent alors le contenu de la cellule, soit pour la modifier, soit pour la consulter.
1
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
Si
c1
est de type
range
, l'instruction
c1 = c1 - quantité * Nom.Worksheets("Feuil1").Cells(4, 4)

est équivalente à:
c1.value = c1.value - quantité * Nom.Worksheets("Feuil1").Cells(4, 4)
0
claclou.0204
 
ok merci, je vais essayer :)
0
claclou.0204 > yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention  
 
ca fonctionne !
Merci beaucoup !!!! :)
0
claclou.0204 > yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention  
 
une autre question...
j'aimerai déclarer mes deux classeurs en début de module pour éviter de les déclarer et affecter dans chaque procédure

je fais
Public Nom As Workbook
Public Stock As Workbook

et dans seulement la 1ère procédure
je mets :

Set Nom = ActiveWorkbook
Set Stock = Workbooks.Open("C:\Users\clari\Documents\STAGE \Missions\Mission n°2\ASM-gestion stock.xlsm")
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > claclou.0204
 
Si "Nom" c'est pour le workbook dans lequel se trouve le code VBA, préférable:
set Nom= thisworkbook

Quand on travaille avec plusieurs classeurs, "activeworkbook" n'est pas toujours ce qu'on avait pensé au départ.

Quelle est la question? workbooks.open() devrait bien fonctionner pour ouvrir le second classeur. Si il est dans le même dossier que le premier, il est parfois préférable d'utiliser
thisworkbook.path
plutôt que de préciser le chemin dans le code. Utile si l'endroit change.
0
f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
Bonjour,

Votre code "marche" tres bien.
Quand vous ecrivez ca ne marche pas, c'est quoi le marche pas?

Par contre c1, si vous l'utilisez en tant que c1 = Stock.Worksheets("ASM").Cells(134, 10) dans d'autres modules, il ne faut pas faire de calcul du genre c1= c1 - quantité * Nom.Worksheets("Feuil1").Cells(4, 4), car c1 n'est plus egal a son affectation de depart
0
claclou.0204
 
oui mais justement je ne veux pas qu'après avoir fait une procédure ( dans laquelle c1 change) c1 revienne à sa valeur de départ mais que dans la procédure suivante c1 soit égale à sa nouvelle valeur.
0
f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713 > claclou.0204
 
Re,

Ok, mais marche ou pas?
0
claclou.0204 > f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention  
 
oui marche
0