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

Worksheet_Change(ByVal Target As Excel.Range) + probleme

8 réponses
Avatar
Ced
Bonjour,

J'ai un problème avec ce code :

en fait, j'ai declaré mes "range" qui sont en fait des cellules
je fais des unions de cellule : Application.Union ...

et dans le : Call Init_Range je prépare mes plages.
et en fait ca buggg

si je met les lignes de code qu'il y a dans le Call Init_Range à la place du
Call Init_Range et bien la ca marche.

Je comprends rien.

Merci




'*************************************************

Public Nb_Page As Integer

Public PlageY As Range, PlageCible As Range
'local technique
Public PlageLT As Range
Public PlageLT1 As Range, PlageLT2 As Range, PlageLT3 As Range, PlageLT4 As
Range
Public PlageLT5 As Range, PlageLT6 As Range, PlageLT7 As Range, PlageLT8 As
Range
Public PlageLT9 As Range
'Station de vanne
Public PlageSV As Range
Public PlageST1 As Range, PlageST2 As Range, PlageST3 As Range, PlageST4 As
Range
Public PlageST5 As Range, PlageST6 As Range, PlageST7 As Range, PlageST8 As
Range
Public PlageST9 As Range

' ** le code
Public Sub Worksheet_Change(ByVal Target As Excel.Range)

Call Init_Range

Set PlageLT = Application.Union(PlageLT1, PlageLT2, PlageLT3, PlageLT4,
PlageLT5)
Set PlageSV = Application.Union(PlageSV1, PlageSV2, PlageSV3, PlageSV4,
PlageSV5, PlageSV6, PlageSV7, PlageSV8)

Set PlageY = Application.Union(PlageLT, PlageSV)

Set PlageCible = Application.Intersect(PlageY, Target)
'Set PlageCible2 = Application.Intersect(PlageZ, Target)

If Not PlageCible Is Nothing Then
For Each PlageY In PlageCible.Cells
Call prog_poste
'ActiveSheet.Cells(1, 1).AddComment "modifié le" & Now
'PlageY.Delete
Next
End If

' dans un module a part
Sub Init_Range()


Set PlageLT1 = ActiveSheet.Range("d9") 'puissance froid
Set PlageLT2 = ActiveSheet.Range("e9") 'puissance chaud
Set PlageLT3 = ActiveSheet.Range("d11") 'nombre
Set PlageLT4 = ActiveSheet.Range("d13") 'température
Set PlageLT5 = ActiveSheet.Range("d14") 'humidité
'Set PlageLT6 = ActiveSheet.Range("d13") 'thermostat
'Set PlageLT7 = ActiveSheet.Range("d14") 'control HR
'Set PlageLT = Application.Union(PlageLT1, PlageLT2, PlageLT3, PlageLT4,
PlageLT5)

Set PlageSV1 = ActiveSheet.Range("f25") 'débit amon station
Set PlageSV2 = ActiveSheet.Range("f26") 'NBR stations vannes
Set PlageSV3 = ActiveSheet.Range("f27") 'type regul
Set PlageSV4 = ActiveSheet.Range("f28") 'reglage debit amont station
Set PlageSV5 = ActiveSheet.Range("g28") 'reglage debit aval station
Set PlageSV6 = ActiveSheet.Range("f29") 'circulateur
Set PlageSV7 = ActiveSheet.Range("f30") 'type degivrage
Set PlageSV8 = ActiveSheet.Range("g30") 'type reglage degivrage

'Set PlageSV = Application.Union(PlageSV1, PlageSV2, PlageSV3, PlageSV4,
PlageSV5)

End Sub





End Sub

--
ced

8 réponses

Avatar
MichDenis
Bonjour Ced,

La déclaration de tes variables public ne correspondent pas
aux variables que tu définies dans ta procédure "Init_Range"
Toutes les variables dont le nom débute par : "PlageST" porte
le nom de "PlageSV" dans ta procédure "Init_Range"

Pour éviter cet écueil lorsque tu programmes, place dans le
haut du module : Option Explicit





"Ced" a écrit dans le message de groupe de discussion :

Bonjour,

J'ai un problème avec ce code :

en fait, j'ai declaré mes "range" qui sont en fait des cellules
je fais des unions de cellule : Application.Union ...

et dans le : Call Init_Range je prépare mes plages.
et en fait ca buggg

si je met les lignes de code qu'il y a dans le Call Init_Range à la place du
Call Init_Range et bien la ca marche.

Je comprends rien.

Merci




'*************************************************

Public Nb_Page As Integer

Public PlageY As Range, PlageCible As Range
'local technique
Public PlageLT As Range
Public PlageLT1 As Range, PlageLT2 As Range, PlageLT3 As Range, PlageLT4 As
Range
Public PlageLT5 As Range, PlageLT6 As Range, PlageLT7 As Range, PlageLT8 As
Range
Public PlageLT9 As Range
'Station de vanne
Public PlageSV As Range
Public PlageST1 As Range, PlageST2 As Range, PlageST3 As Range, PlageST4 As
Range
Public PlageST5 As Range, PlageST6 As Range, PlageST7 As Range, PlageST8 As
Range
Public PlageST9 As Range

' ** le code
Public Sub Worksheet_Change(ByVal Target As Excel.Range)

Call Init_Range

Set PlageLT = Application.Union(PlageLT1, PlageLT2, PlageLT3, PlageLT4,
PlageLT5)
Set PlageSV = Application.Union(PlageSV1, PlageSV2, PlageSV3, PlageSV4,
PlageSV5, PlageSV6, PlageSV7, PlageSV8)

Set PlageY = Application.Union(PlageLT, PlageSV)

Set PlageCible = Application.Intersect(PlageY, Target)
'Set PlageCible2 = Application.Intersect(PlageZ, Target)

If Not PlageCible Is Nothing Then
For Each PlageY In PlageCible.Cells
Call prog_poste
'ActiveSheet.Cells(1, 1).AddComment "modifié le" & Now
'PlageY.Delete
Next
End If

' dans un module a part
Sub Init_Range()


Set PlageLT1 = ActiveSheet.Range("d9") 'puissance froid
Set PlageLT2 = ActiveSheet.Range("e9") 'puissance chaud
Set PlageLT3 = ActiveSheet.Range("d11") 'nombre
Set PlageLT4 = ActiveSheet.Range("d13") 'température
Set PlageLT5 = ActiveSheet.Range("d14") 'humidité
'Set PlageLT6 = ActiveSheet.Range("d13") 'thermostat
'Set PlageLT7 = ActiveSheet.Range("d14") 'control HR
'Set PlageLT = Application.Union(PlageLT1, PlageLT2, PlageLT3, PlageLT4,
PlageLT5)

Set PlageSV1 = ActiveSheet.Range("f25") 'débit amon station
Set PlageSV2 = ActiveSheet.Range("f26") 'NBR stations vannes
Set PlageSV3 = ActiveSheet.Range("f27") 'type regul
Set PlageSV4 = ActiveSheet.Range("f28") 'reglage debit amont station
Set PlageSV5 = ActiveSheet.Range("g28") 'reglage debit aval station
Set PlageSV6 = ActiveSheet.Range("f29") 'circulateur
Set PlageSV7 = ActiveSheet.Range("f30") 'type degivrage
Set PlageSV8 = ActiveSheet.Range("g30") 'type reglage degivrage

'Set PlageSV = Application.Union(PlageSV1, PlageSV2, PlageSV3, PlageSV4,
PlageSV5)

End Sub





End Sub

--
ced
Avatar
Ced
Bonjour,

Merci Michdenis

J'ai remis comme t'as dit mon truc en forme
J'ai mis l'option explicit.

Alors en fait, j'avais mi mon init_range dans un module a part.
Et c'est la que ca marche pas.
si je le met dans l'espace code de la feuille, la ca va.
Bizare !!!


--
ced


"MichDenis" a écrit :

Bonjour Ced,

La déclaration de tes variables public ne correspondent pas
aux variables que tu définies dans ta procédure "Init_Range"
Toutes les variables dont le nom débute par : "PlageST" porte
le nom de "PlageSV" dans ta procédure "Init_Range"

Pour éviter cet écueil lorsque tu programmes, place dans le
haut du module : Option Explicit





"Ced" a écrit dans le message de groupe de discussion :

Bonjour,

J'ai un problème avec ce code :

en fait, j'ai declaré mes "range" qui sont en fait des cellules
je fais des unions de cellule : Application.Union ...

et dans le : Call Init_Range je prépare mes plages.
et en fait ca buggg

si je met les lignes de code qu'il y a dans le Call Init_Range à la place du
Call Init_Range et bien la ca marche.

Je comprends rien.

Merci




'*************************************************

Public Nb_Page As Integer

Public PlageY As Range, PlageCible As Range
'local technique
Public PlageLT As Range
Public PlageLT1 As Range, PlageLT2 As Range, PlageLT3 As Range, PlageLT4 As
Range
Public PlageLT5 As Range, PlageLT6 As Range, PlageLT7 As Range, PlageLT8 As
Range
Public PlageLT9 As Range
'Station de vanne
Public PlageSV As Range
Public PlageST1 As Range, PlageST2 As Range, PlageST3 As Range, PlageST4 As
Range
Public PlageST5 As Range, PlageST6 As Range, PlageST7 As Range, PlageST8 As
Range
Public PlageST9 As Range

' ** le code
Public Sub Worksheet_Change(ByVal Target As Excel.Range)

Call Init_Range

Set PlageLT = Application.Union(PlageLT1, PlageLT2, PlageLT3, PlageLT4,
PlageLT5)
Set PlageSV = Application.Union(PlageSV1, PlageSV2, PlageSV3, PlageSV4,
PlageSV5, PlageSV6, PlageSV7, PlageSV8)

Set PlageY = Application.Union(PlageLT, PlageSV)

Set PlageCible = Application.Intersect(PlageY, Target)
'Set PlageCible2 = Application.Intersect(PlageZ, Target)

If Not PlageCible Is Nothing Then
For Each PlageY In PlageCible.Cells
Call prog_poste
'ActiveSheet.Cells(1, 1).AddComment "modifié le" & Now
'PlageY.Delete
Next
End If

' dans un module a part
Sub Init_Range()


Set PlageLT1 = ActiveSheet.Range("d9") 'puissance froid
Set PlageLT2 = ActiveSheet.Range("e9") 'puissance chaud
Set PlageLT3 = ActiveSheet.Range("d11") 'nombre
Set PlageLT4 = ActiveSheet.Range("d13") 'température
Set PlageLT5 = ActiveSheet.Range("d14") 'humidité
'Set PlageLT6 = ActiveSheet.Range("d13") 'thermostat
'Set PlageLT7 = ActiveSheet.Range("d14") 'control HR
'Set PlageLT = Application.Union(PlageLT1, PlageLT2, PlageLT3, PlageLT4,
PlageLT5)

Set PlageSV1 = ActiveSheet.Range("f25") 'débit amon station
Set PlageSV2 = ActiveSheet.Range("f26") 'NBR stations vannes
Set PlageSV3 = ActiveSheet.Range("f27") 'type regul
Set PlageSV4 = ActiveSheet.Range("f28") 'reglage debit amont station
Set PlageSV5 = ActiveSheet.Range("g28") 'reglage debit aval station
Set PlageSV6 = ActiveSheet.Range("f29") 'circulateur
Set PlageSV7 = ActiveSheet.Range("f30") 'type degivrage
Set PlageSV8 = ActiveSheet.Range("g30") 'type reglage degivrage

'Set PlageSV = Application.Union(PlageSV1, PlageSV2, PlageSV3, PlageSV4,
PlageSV5)

End Sub





End Sub

--
ced





Avatar
MichDenis
Si c'est le cas, voici ce qui se passe...
Sauf les modules standard, les autres modules "Feuil", "ThisWorkbook",
sont des modules de classe. Lorsque l'on insère dans un tel module une
déclaration de variable "Public toto as string", toto n'est pas une variable
au sens propre du terme, mais une "PROPRIÉTÉ" du module de la feuille
où elle fut déclarée. Si tu veux y faire référence dans un autre module, tu
dois obligatoirement la faire précéder du nom du module où elle a été créée.

Exemple : Dans ton module Feuil1,
Déclaration : Public Toto as String
Si tu utilises "Toto" dans un module standard, tu dois appelée "Toto"
de cette manière : Feuil1.toto pour faire référence au "toto" que tu as créé
en feuil1. Si tu utilises "Toto" tout seul dans un autre module, cela devient
une variable qui n'a rien à voir avec le "toto" de la feuil1. À cet égard, si tu
avais mis en haut de ton module standard : "option explicit", tu aurais eu
le message suivant : "Variable non définie".

L'autre alternative beaucoup plus simple, tu déclares les variables "Public" dans un
module standard et tu pourrais les utiliser n'importe où dans ton projet vba sans
avoir à les faire précéder du nom du module où elles furent crées

Si tu désires que Option explicit s'inscrive automatiquement dans tous tes
modules : Dans la fenêtre de l'éditeur de code /menu / outils / onglet éditeur /
et tu coches : "déclaration des variables obligatoires.




"Ced" a écrit dans le message de groupe de discussion :

Bonjour,

Merci Michdenis

J'ai remis comme t'as dit mon truc en forme
J'ai mis l'option explicit.

Alors en fait, j'avais mi mon init_range dans un module a part.
Et c'est la que ca marche pas.
si je le met dans l'espace code de la feuille, la ca va.
Bizare !!!


--
ced


"MichDenis" a écrit :

Bonjour Ced,

La déclaration de tes variables public ne correspondent pas
aux variables que tu définies dans ta procédure "Init_Range"
Toutes les variables dont le nom débute par : "PlageST" porte
le nom de "PlageSV" dans ta procédure "Init_Range"

Pour éviter cet écueil lorsque tu programmes, place dans le
haut du module : Option Explicit





"Ced" a écrit dans le message de groupe de discussion :

Bonjour,

J'ai un problème avec ce code :

en fait, j'ai declaré mes "range" qui sont en fait des cellules
je fais des unions de cellule : Application.Union ...

et dans le : Call Init_Range je prépare mes plages.
et en fait ca buggg

si je met les lignes de code qu'il y a dans le Call Init_Range à la place du
Call Init_Range et bien la ca marche.

Je comprends rien.

Merci




'*************************************************

Public Nb_Page As Integer

Public PlageY As Range, PlageCible As Range
'local technique
Public PlageLT As Range
Public PlageLT1 As Range, PlageLT2 As Range, PlageLT3 As Range, PlageLT4 As
Range
Public PlageLT5 As Range, PlageLT6 As Range, PlageLT7 As Range, PlageLT8 As
Range
Public PlageLT9 As Range
'Station de vanne
Public PlageSV As Range
Public PlageST1 As Range, PlageST2 As Range, PlageST3 As Range, PlageST4 As
Range
Public PlageST5 As Range, PlageST6 As Range, PlageST7 As Range, PlageST8 As
Range
Public PlageST9 As Range

' ** le code
Public Sub Worksheet_Change(ByVal Target As Excel.Range)

Call Init_Range

Set PlageLT = Application.Union(PlageLT1, PlageLT2, PlageLT3, PlageLT4,
PlageLT5)
Set PlageSV = Application.Union(PlageSV1, PlageSV2, PlageSV3, PlageSV4,
PlageSV5, PlageSV6, PlageSV7, PlageSV8)

Set PlageY = Application.Union(PlageLT, PlageSV)

Set PlageCible = Application.Intersect(PlageY, Target)
'Set PlageCible2 = Application.Intersect(PlageZ, Target)

If Not PlageCible Is Nothing Then
For Each PlageY In PlageCible.Cells
Call prog_poste
'ActiveSheet.Cells(1, 1).AddComment "modifié le" & Now
'PlageY.Delete
Next
End If

' dans un module a part
Sub Init_Range()


Set PlageLT1 = ActiveSheet.Range("d9") 'puissance froid
Set PlageLT2 = ActiveSheet.Range("e9") 'puissance chaud
Set PlageLT3 = ActiveSheet.Range("d11") 'nombre
Set PlageLT4 = ActiveSheet.Range("d13") 'température
Set PlageLT5 = ActiveSheet.Range("d14") 'humidité
'Set PlageLT6 = ActiveSheet.Range("d13") 'thermostat
'Set PlageLT7 = ActiveSheet.Range("d14") 'control HR
'Set PlageLT = Application.Union(PlageLT1, PlageLT2, PlageLT3, PlageLT4,
PlageLT5)

Set PlageSV1 = ActiveSheet.Range("f25") 'débit amon station
Set PlageSV2 = ActiveSheet.Range("f26") 'NBR stations vannes
Set PlageSV3 = ActiveSheet.Range("f27") 'type regul
Set PlageSV4 = ActiveSheet.Range("f28") 'reglage debit amont station
Set PlageSV5 = ActiveSheet.Range("g28") 'reglage debit aval station
Set PlageSV6 = ActiveSheet.Range("f29") 'circulateur
Set PlageSV7 = ActiveSheet.Range("f30") 'type degivrage
Set PlageSV8 = ActiveSheet.Range("g30") 'type reglage degivrage

'Set PlageSV = Application.Union(PlageSV1, PlageSV2, PlageSV3, PlageSV4,
PlageSV5)

End Sub





End Sub

--
ced





Avatar
Ced
OK

Merci, ca marche now ..
j'ai transféré mes public range ...etc ... dans mon module et en effet, ca
marche.
Bon, j'ai pas tout compris car je ne connais pas les subtilités des termes
de la programmation. Faut que je me trouve un cours qq part.

Par contre,
je fais appel à mon range_init mainteannt dans mon module.

Y a t'il possibilité que, quand la PlageY = nothing, il appel Range_init et
que quand le PlageY est défini, qu'il ne l'appel pas?

J'ai fait donc :
If PlageY = Nothing Then Call Init_Range et ca marche pas
if PlageY = "nothing" then call Init_Range et ca marche pas.
Je sais pas trop.

Merci encore ...


--
ced


"MichDenis" a écrit :

Si c'est le cas, voici ce qui se passe...
Sauf les modules standard, les autres modules "Feuil", "ThisWorkbook",
sont des modules de classe. Lorsque l'on insère dans un tel module une
déclaration de variable "Public toto as string", toto n'est pas une variable
au sens propre du terme, mais une "PROPRIÉTÉ" du module de la feuille
où elle fut déclarée. Si tu veux y faire référence dans un autre module, tu
dois obligatoirement la faire précéder du nom du module où elle a été créée.

Exemple : Dans ton module Feuil1,
Déclaration : Public Toto as String
Si tu utilises "Toto" dans un module standard, tu dois appelée "Toto"
de cette manière : Feuil1.toto pour faire référence au "toto" que tu as créé
en feuil1. Si tu utilises "Toto" tout seul dans un autre module, cela devient
une variable qui n'a rien à voir avec le "toto" de la feuil1. À cet égard, si tu
avais mis en haut de ton module standard : "option explicit", tu aurais eu
le message suivant : "Variable non définie".

L'autre alternative beaucoup plus simple, tu déclares les variables "Public" dans un
module standard et tu pourrais les utiliser n'importe où dans ton projet vba sans
avoir à les faire précéder du nom du module où elles furent crées

Si tu désires que Option explicit s'inscrive automatiquement dans tous tes
modules : Dans la fenêtre de l'éditeur de code /menu / outils / onglet éditeur /
et tu coches : "déclaration des variables obligatoires.




"Ced" a écrit dans le message de groupe de discussion :

Bonjour,

Merci Michdenis

J'ai remis comme t'as dit mon truc en forme
J'ai mis l'option explicit.

Alors en fait, j'avais mi mon init_range dans un module a part.
Et c'est la que ca marche pas.
si je le met dans l'espace code de la feuille, la ca va.
Bizare !!!


--
ced


"MichDenis" a écrit :

> Bonjour Ced,
>
> La déclaration de tes variables public ne correspondent pas
> aux variables que tu définies dans ta procédure "Init_Range"
> Toutes les variables dont le nom débute par : "PlageST" porte
> le nom de "PlageSV" dans ta procédure "Init_Range"
>
> Pour éviter cet écueil lorsque tu programmes, place dans le
> haut du module : Option Explicit
>
>
>
>
>
> "Ced" a écrit dans le message de groupe de discussion :
>
> Bonjour,
>
> J'ai un problème avec ce code :
>
> en fait, j'ai declaré mes "range" qui sont en fait des cellules
> je fais des unions de cellule : Application.Union ...
>
> et dans le : Call Init_Range je prépare mes plages.
> et en fait ca buggg
>
> si je met les lignes de code qu'il y a dans le Call Init_Range à la place du
> Call Init_Range et bien la ca marche.
>
> Je comprends rien.
>
> Merci
>
>
>
>
> '*************************************************
>
> Public Nb_Page As Integer
>
> Public PlageY As Range, PlageCible As Range
> 'local technique
> Public PlageLT As Range
> Public PlageLT1 As Range, PlageLT2 As Range, PlageLT3 As Range, PlageLT4 As
> Range
> Public PlageLT5 As Range, PlageLT6 As Range, PlageLT7 As Range, PlageLT8 As
> Range
> Public PlageLT9 As Range
> 'Station de vanne
> Public PlageSV As Range
> Public PlageST1 As Range, PlageST2 As Range, PlageST3 As Range, PlageST4 As
> Range
> Public PlageST5 As Range, PlageST6 As Range, PlageST7 As Range, PlageST8 As
> Range
> Public PlageST9 As Range
>
> ' ** le code
> Public Sub Worksheet_Change(ByVal Target As Excel.Range)
>
> Call Init_Range
>
> Set PlageLT = Application.Union(PlageLT1, PlageLT2, PlageLT3, PlageLT4,
> PlageLT5)
> Set PlageSV = Application.Union(PlageSV1, PlageSV2, PlageSV3, PlageSV4,
> PlageSV5, PlageSV6, PlageSV7, PlageSV8)
>
> Set PlageY = Application.Union(PlageLT, PlageSV)
>
> Set PlageCible = Application.Intersect(PlageY, Target)
> 'Set PlageCible2 = Application.Intersect(PlageZ, Target)
>
> If Not PlageCible Is Nothing Then
> For Each PlageY In PlageCible.Cells
> Call prog_poste
> 'ActiveSheet.Cells(1, 1).AddComment "modifié le" & Now
> 'PlageY.Delete
> Next
> End If
>
> ' dans un module a part
> Sub Init_Range()
>
>
> Set PlageLT1 = ActiveSheet.Range("d9") 'puissance froid
> Set PlageLT2 = ActiveSheet.Range("e9") 'puissance chaud
> Set PlageLT3 = ActiveSheet.Range("d11") 'nombre
> Set PlageLT4 = ActiveSheet.Range("d13") 'température
> Set PlageLT5 = ActiveSheet.Range("d14") 'humidité
> 'Set PlageLT6 = ActiveSheet.Range("d13") 'thermostat
> 'Set PlageLT7 = ActiveSheet.Range("d14") 'control HR
> 'Set PlageLT = Application.Union(PlageLT1, PlageLT2, PlageLT3, PlageLT4,
> PlageLT5)
>
> Set PlageSV1 = ActiveSheet.Range("f25") 'débit amon station
> Set PlageSV2 = ActiveSheet.Range("f26") 'NBR stations vannes
> Set PlageSV3 = ActiveSheet.Range("f27") 'type regul
> Set PlageSV4 = ActiveSheet.Range("f28") 'reglage debit amont station
> Set PlageSV5 = ActiveSheet.Range("g28") 'reglage debit aval station
> Set PlageSV6 = ActiveSheet.Range("f29") 'circulateur
> Set PlageSV7 = ActiveSheet.Range("f30") 'type degivrage
> Set PlageSV8 = ActiveSheet.Range("g30") 'type reglage degivrage
>
> 'Set PlageSV = Application.Union(PlageSV1, PlageSV2, PlageSV3, PlageSV4,
> PlageSV5)
>
> End Sub
>
>
>
>
>
> End Sub
>
> --
> ced
>
>
>




Avatar
MichDenis
| J'ai fait donc :
| If PlageY = Nothing Then Call Init_Range et ca marche pas
| if PlageY = "nothing" then call Init_Range et ca marche pas.
| Je sais pas trop.


if PlageY is nothing then cal Init_Range




"Ced" a écrit dans le message de groupe de discussion :

OK

Merci, ca marche now ..
j'ai transféré mes public range ...etc ... dans mon module et en effet, ca
marche.
Bon, j'ai pas tout compris car je ne connais pas les subtilités des termes
de la programmation. Faut que je me trouve un cours qq part.

Par contre,
je fais appel à mon range_init mainteannt dans mon module.

Y a t'il possibilité que, quand la PlageY = nothing, il appel Range_init et
que quand le PlageY est défini, qu'il ne l'appel pas?

J'ai fait donc :
If PlageY = Nothing Then Call Init_Range et ca marche pas
if PlageY = "nothing" then call Init_Range et ca marche pas.
Je sais pas trop.

Merci encore ...


--
ced


"MichDenis" a écrit :

Si c'est le cas, voici ce qui se passe...
Sauf les modules standard, les autres modules "Feuil", "ThisWorkbook",
sont des modules de classe. Lorsque l'on insère dans un tel module une
déclaration de variable "Public toto as string", toto n'est pas une variable
au sens propre du terme, mais une "PROPRIÉTÉ" du module de la feuille
où elle fut déclarée. Si tu veux y faire référence dans un autre module, tu
dois obligatoirement la faire précéder du nom du module où elle a été créée.

Exemple : Dans ton module Feuil1,
Déclaration : Public Toto as String
Si tu utilises "Toto" dans un module standard, tu dois appelée "Toto"
de cette manière : Feuil1.toto pour faire référence au "toto" que tu as créé
en feuil1. Si tu utilises "Toto" tout seul dans un autre module, cela devient
une variable qui n'a rien à voir avec le "toto" de la feuil1. À cet égard, si tu
avais mis en haut de ton module standard : "option explicit", tu aurais eu
le message suivant : "Variable non définie".

L'autre alternative beaucoup plus simple, tu déclares les variables "Public" dans un
module standard et tu pourrais les utiliser n'importe où dans ton projet vba sans
avoir à les faire précéder du nom du module où elles furent crées

Si tu désires que Option explicit s'inscrive automatiquement dans tous tes
modules : Dans la fenêtre de l'éditeur de code /menu / outils / onglet éditeur /
et tu coches : "déclaration des variables obligatoires.




"Ced" a écrit dans le message de groupe de discussion :

Bonjour,

Merci Michdenis

J'ai remis comme t'as dit mon truc en forme
J'ai mis l'option explicit.

Alors en fait, j'avais mi mon init_range dans un module a part.
Et c'est la que ca marche pas.
si je le met dans l'espace code de la feuille, la ca va.
Bizare !!!


--
ced


"MichDenis" a écrit :

> Bonjour Ced,
>
> La déclaration de tes variables public ne correspondent pas
> aux variables que tu définies dans ta procédure "Init_Range"
> Toutes les variables dont le nom débute par : "PlageST" porte
> le nom de "PlageSV" dans ta procédure "Init_Range"
>
> Pour éviter cet écueil lorsque tu programmes, place dans le
> haut du module : Option Explicit
>
>
>
>
>
> "Ced" a écrit dans le message de groupe de discussion :
>
> Bonjour,
>
> J'ai un problème avec ce code :
>
> en fait, j'ai declaré mes "range" qui sont en fait des cellules
> je fais des unions de cellule : Application.Union ...
>
> et dans le : Call Init_Range je prépare mes plages.
> et en fait ca buggg
>
> si je met les lignes de code qu'il y a dans le Call Init_Range à la place du
> Call Init_Range et bien la ca marche.
>
> Je comprends rien.
>
> Merci
>
>
>
>
> '*************************************************
>
> Public Nb_Page As Integer
>
> Public PlageY As Range, PlageCible As Range
> 'local technique
> Public PlageLT As Range
> Public PlageLT1 As Range, PlageLT2 As Range, PlageLT3 As Range, PlageLT4 As
> Range
> Public PlageLT5 As Range, PlageLT6 As Range, PlageLT7 As Range, PlageLT8 As
> Range
> Public PlageLT9 As Range
> 'Station de vanne
> Public PlageSV As Range
> Public PlageST1 As Range, PlageST2 As Range, PlageST3 As Range, PlageST4 As
> Range
> Public PlageST5 As Range, PlageST6 As Range, PlageST7 As Range, PlageST8 As
> Range
> Public PlageST9 As Range
>
> ' ** le code
> Public Sub Worksheet_Change(ByVal Target As Excel.Range)
>
> Call Init_Range
>
> Set PlageLT = Application.Union(PlageLT1, PlageLT2, PlageLT3, PlageLT4,
> PlageLT5)
> Set PlageSV = Application.Union(PlageSV1, PlageSV2, PlageSV3, PlageSV4,
> PlageSV5, PlageSV6, PlageSV7, PlageSV8)
>
> Set PlageY = Application.Union(PlageLT, PlageSV)
>
> Set PlageCible = Application.Intersect(PlageY, Target)
> 'Set PlageCible2 = Application.Intersect(PlageZ, Target)
>
> If Not PlageCible Is Nothing Then
> For Each PlageY In PlageCible.Cells
> Call prog_poste
> 'ActiveSheet.Cells(1, 1).AddComment "modifié le" & Now
> 'PlageY.Delete
> Next
> End If
>
> ' dans un module a part
> Sub Init_Range()
>
>
> Set PlageLT1 = ActiveSheet.Range("d9") 'puissance froid
> Set PlageLT2 = ActiveSheet.Range("e9") 'puissance chaud
> Set PlageLT3 = ActiveSheet.Range("d11") 'nombre
> Set PlageLT4 = ActiveSheet.Range("d13") 'température
> Set PlageLT5 = ActiveSheet.Range("d14") 'humidité
> 'Set PlageLT6 = ActiveSheet.Range("d13") 'thermostat
> 'Set PlageLT7 = ActiveSheet.Range("d14") 'control HR
> 'Set PlageLT = Application.Union(PlageLT1, PlageLT2, PlageLT3, PlageLT4,
> PlageLT5)
>
> Set PlageSV1 = ActiveSheet.Range("f25") 'débit amon station
> Set PlageSV2 = ActiveSheet.Range("f26") 'NBR stations vannes
> Set PlageSV3 = ActiveSheet.Range("f27") 'type regul
> Set PlageSV4 = ActiveSheet.Range("f28") 'reglage debit amont station
> Set PlageSV5 = ActiveSheet.Range("g28") 'reglage debit aval station
> Set PlageSV6 = ActiveSheet.Range("f29") 'circulateur
> Set PlageSV7 = ActiveSheet.Range("f30") 'type degivrage
> Set PlageSV8 = ActiveSheet.Range("g30") 'type reglage degivrage
>
> 'Set PlageSV = Application.Union(PlageSV1, PlageSV2, PlageSV3, PlageSV4,
> PlageSV5)
>
> End Sub
>
>
>
>
>
> End Sub
>
> --
> ced
>
>
>




Avatar
MichDenis
Call avec 2 L
if PlageY is nothing then call Init_Range
Avatar
Ced
Merci
beaucoup

--
ced


"MichDenis" a écrit :

Call avec 2 L
if PlageY is nothing then call Init_Range





Avatar
LSteph
Bonjour,

outre les ressources de http://www.excelabo.net

des cours complets ici:

http://excel.developpez.com/cours/?page=prog

'lSteph

Ced a écrit :

de la programmation. Faut que je me trouve un cours qq part.