Cellule = variable : concaténer cette variable

Résolu/Fermé
claclou.0204 - 27 juin 2022 à 09:42
f894009 Messages postés 17200 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 11 septembre 2024 - 28 juin 2022 à 10:57
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
A voir également:

2 réponses

yg_be Messages postés 23236 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 2 octobre 2024 Ambassadeur 1 539
27 juin 2022 à 11:58
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 23236 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 2 octobre 2024 1 539
Modifié le 27 juin 2022 à 12:05
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
27 juin 2022 à 12:07
ok merci, je vais essayer :)
0
claclou.0204 > yg_be Messages postés 23236 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 2 octobre 2024
27 juin 2022 à 12:20
ca fonctionne !
Merci beaucoup !!!! :)
0
claclou.0204 > yg_be Messages postés 23236 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 2 octobre 2024
27 juin 2022 à 15:21
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 23236 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 2 octobre 2024 1 539 > claclou.0204
27 juin 2022 à 15:41
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 17200 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 11 septembre 2024 1 708
27 juin 2022 à 11:50
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
27 juin 2022 à 12:07
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 17200 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 11 septembre 2024 1 708 > claclou.0204
27 juin 2022 à 13:39
Re,

Ok, mais marche ou pas?
0
claclou.0204 > f894009 Messages postés 17200 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 11 septembre 2024
27 juin 2022 à 15:22
oui marche
0