Sur mon programme, j'ai trois fonctions qui sont les suivantes:
•sub worksheet_change(Byval target as range) qui effectue une première saisie
•sub saisie2() qui permet une saisie manuelle des cellules restantes
•sub calcul() qui effectue les calculs selon les infos précédemment remplies
Le problème est le suivant:
j'utilise dans la fonction worksheet_change
i = Target.Row afin d'avoir la ligne sélectionnée => date_travaux = Range("AV" & i)
cependant, la valeur de i disparaît dès que je quitte ma fonction sub worksheet_change...
A quoi celà est dû? puis-je parer ce problème et si oui comment?
Merci de l'attention et bonne continuation
Math'
Re : Garder une valeur de variable d'une procédure à l'autre
Salut mathioustone,
À noter que les varibles qui sont déclarer dans une routine se ferment lorsque tu atteint le "End Sub" ou un "Exit Sub". Si tu souhaites les conserver, il faut les déclarer différemment.
Ainsi, si les 3 macros sont dans le même module, alors tu n'as qu'à déclarer ton i en haut du module, au dessus de ton premier Sub
Code:
Dim i as integer
Si les 3 macros se trouvent dans des modules différents, alors utlises ceci
Re : Garder une valeur de variable d'une procédure à l'autre
Bonjour
Sans doute parce que c'est une variable locale à la Sub Worksheet_Change (et non pas fonction).
c'est à dire qu'elle est déclarée dans cette Sub ou nulle part.
Déclarez la en tête du module pour qu'elle soit connue par toutes les procédures de celui ci,
Déclarez la Public, même, si vous voulez qu'elle soit connue dans tous le projet VBA.
Re : Garder une valeur de variable d'une procédure à l'autre
Pour info: mes trois procédures sont dans le même module et les déclarations sont toutes faites dans la zone tout en haut de la page: "déclaration", ainsi:
Dim Reponse, Secteur, surface, COP, N, coeff, R, Dateconstruction, cumac, construction, P, Uw, rendement As Integer
Public i, saisie As Integer
Dim reference, energie, zone, activite As String
' Ecriture
Sub Worksheet_Change(ByVal Target As Range)
i = Target.Row
j = Target.Column
date_travaux = Range("AV" & i)
If Target.Column = Range("AW" & i).Column Then...[...] et mon code continue
End sub
Cependant, ma valeur se perd automatiquement après le "End Sub".
Re : Garder une valeur de variable d'une procédure à l'autre
Bonjour,
Dans le même module oui mais pas dans le même que Worksheet_change, dans un module général avec les macros.
Si tu veux garder i dans le module de la feuille, même déclarée en public, tes macro dans un module général ne pourront l'atteindre qu'en la faisant précéder de la feuille à laquelle elle appartient suivi d'un point.
Code:
Sub MaMacro()
Dim Ligne as Long
Ligne= Sheets("Feuil1").i
End Sub
Parce que le module de code de la feuille est un module 'objet' et i une de ses propriétés.
Petites précision:
dans une ligne comme celle ci-dessous, seulle la dernière variable est de type Integer, Les autres sont des variant. Répéter autant de fois As Integer que de variables. (Idem pour tous les types)
Code:
Dim Reponse, Secteur, surface, COP, N, coeff, R, Dateconstruction, cumac, construction, P, Uw, rendement As Integer
Re : Garder une valeur de variable d'une procédure à l'autre
ok pour la déclaration, mais le code ne va toujours chercher la valeur de ma variable.
J'y ai un peu réfléchis et la procédure: worksheetchange est évenementielle, elle ne s'active que lorsque ma souris sélectionne une cellule puis se remet au repos une fois que le code s'est effectué.
C'est peut-être pourquoi la valeur de ma variable i ne se garde pas.
Pour finir, ta solution Hasco me fait apparaître une erreur d'exécution '438' où la propriété ou la méthode non gérée par à l'objet -_-
Je plane unpeu sur ce coup la :'(
Re : Garder une valeur de variable d'une procédure à l'autre
Bonjour,
Dans le fichier joint un exemple avec une variable pubique déclarée dans Module1
Une variable public déclarée dans le module de code de la feuille 1
une valeur passée en paramètre à une macro de module1.
Toutes les variables sont affichée par la macro.
A+
P.S. c'est à toi normalement de nous passer un fichier exemple!!!!!
Re : Garder une valeur de variable d'une procédure à l'autre
Merci bien pour les infos, voici mon code:
Code:
Dim Reponse As Integer
Public i, saisie As Integer
Dim reference, energie, zone, activite As String
' Ecriture
Sub Worksheet_Change(ByVal Target As Range)
i = Target.Row
j = Target.Column
date_travaux = Range("AV" & i)
If Target.Column = Range("AW" & i).Column Then
Reponse = MsgBox(" Accepter secteur:" & Range("AW" & i).Text & "?", vbYesNo, "Message d'alerte")
If Reponse = vbYes Then
Range("AX" & i).Activate
ElseIf Reponse = vbNo Then
Range("AX" & i).Activate
MsgBox ("Sélectionner un nouveau secteur")
Range("AW" & i).Activate
End If
End If
' [...] code supprimé taille trop importante
If Range("BC" & i) = "Construite avant 1975" Then
construction = 1
ElseIf Range("BC" & i) = "Construite après 1975 et avant 2006" Then
construction = 2
End If
End Sub
Sub saisie2()
If saisie = 1 Then
MsgBox (" Veuillez saisir les paramètres correspondants au certificat choisi puis appuyer sur OK dans la cellule kWh cumac ")
End If
End Sub
Private Sub ok_Click()
If (Not IsEmpty(Range(Cells(i, 49), Cells(i, 52)))) And (Not IsEmpty(Cells(i, 54))) Then
R = Range("BH" & i).Value
COP = Range("BG" & i)
surface = Range("BD" & i).Value
P = Range("BF" & i).Value
Uw = Range("BH" & i).Value
rendement = Range("BI" & i).Value
N = Range("BE" & i).Value
If reference = "BAR-EN-01" Then
end sub
Voila le code en question, mais je n'y comprend toujours rien car les différentes méthodes utilisées sont similaires à celle-ci... Quelques explications seraient les bienvenues ^^ Merc d'avance
Sois tu nous donnes un fichier exemple <50ko sur le forum (pas ailleurs) avec quelques données bidons et anonymes et les macros soit j'abandonne, sinon nous allons tourner en rond et dans 50 messages le problème ne sera pas résolu.
Re : Garder une valeur de variable d'une procédure à l'autre
Bonjour,
Le mieux serait de mettre des points d'arrêts et un espion sur ta variable et de dérouler en pas à pas pour voir à quel moment sa valeur cesse d'être bonne.
Pas exclut qu'il faille mettre Application.EnableEvents = False à certains endroits.
Et puis ne plus laisser Variant la plupart des variables, comme déjà dit par Hasco, les typer explicitement.
Re : Garder une valeur de variable d'une procédure à l'autre
Bonjour
En suivant l'idée de Hasco
Places tes déclarations de variable dans un module
Mais attention cette variable ne sera initialisée quand une cellule de la page aura été modifiée
Alors vérifies la valeur de cette variable dans une macro qui l'utilise
Bonne journée
Re : Garder une valeur de variable d'une procédure à l'autre
ce que je souhaite faire:
lorsque je sélectionne ma cellule et que je change la valeur, ma cible obtient comme valeurs les coordonnées de la cellule: ça ok, à l'aide de sub worksheet_change(byval target as range)
ensuite, j'extrait la ligne des coordonnées: i = target.row
et enfin j'utilise cette donnée dans une autre module, fonction ou procédure ( je sais plus trop lequel utiliser à présent) r = range("A" & i) par exemple.
Le problème est que ( grâce au pas à pas) j'ai pu remarquer que la valeur retourne à son état initial lorsque je quitte la procédure worksheet_change.
j'en conclue que je ne dois donc pas utiliser de procédure mais plutôt une fonction ou un module qui pourront renvoyer cette valeur mais comment établir une fonction ou un module à partir de ma procédure déjà programmée?
HELP je couuuuuule merci d'avance (je peux envoyer le code par mail si besoin est.
Merci à tous pour l'aide fournie
et enfin j'utilise cette donnée dans une autre module, fonction ou procédure ( je sais plus trop lequel utiliser à présent) r = range("A" & i) par exemple.