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

macro imbriquées

4 réponses
Avatar
Christian Raoux
Salut la liste

J'ai un UserForm qui s'ouvre à la sélection d'une feuille
il est modifier par macro
mais j'ai besoin de condition répetitives pour colorisée des textBox

J'ai dans :
Private Sub Worksheet_Activate()
With UfParametres
.TxbAttib1.Value = Parametres.Range("H2").Text
.TxbCode1.Value = Parametres.Range("I2").Text
.TxbCCoul1.Value = Parametres.Range("I2").Interior.ColorIndex
.TxbAttib2.Value = Parametres.Range("H3").Text
.TxbCode2.Value = Parametres.Range("I3").Text
.TxbCCoul2.Value = Parametres.Range("I3").Interior.ColorIndex
.TxbAttib3.Value = Parametres.Range("H4").Text
.TxbCode3.Value = Parametres.Range("I4").Text
.TxbCCoul3.Value = Parametres.Range("I4").Interior.ColorIndex
.TxbAttib4.Value = Parametres.Range("H5").Text
.TxbCode4.Value = Parametres.Range("I5").Text
.TxbCCoul4.Value = Parametres.Range("I5").Interior.ColorIndex
....
.TxbAttib20.Value = Parametres.Range("H21").Text
.TxbCode20.Value = Parametres.Range("I21").Text
.TxbCCoul20.Value = Parametres.Range("I21").Interior.ColorIndex
End With


ce que je veux faire pour TxbAttib1, TxbCode1, TxbCCoul1 à TxbAttib20,
TxbCode20, TxbCCoul20

If UfParametres.TxbCCoul1.Value = 1 then
UfParametres.TxbAttib1.Backcolor = C1
ElseIf UfParametres.TxbCCoul1.Value = 2 then
UfParametres.TxbAttib1.Backcolor = C2
ElseIf UfParametres.TxbCCoul1.Value = 3 then
UfParametres.TxbAttib1.Backcolor = C3
...
ElseIf UfParametres.TxbCCoul1.Value = 56 then
UfParametres.TxbAttib1.Backcolor = C56
End If

Comment faire pour ne pas réécrir les condition à chaque fois

merci d'avance

christian

4 réponses

Avatar
Denis Michon
Bonjour Christian,

Si j'ai compris, cette section
'----------
If UfParametres.TxbCCoul1.Value = 1 then
UfParametres.TxbAttib1.Backcolor = C1
ElseIf UfParametres.TxbCCoul1.Value = 2 then
UfParametres.TxbAttib1.Backcolor = C2
.../...

est basée sur la valeur de "TxbCCoul1.Value " . As-tu essayé quelque chose dans le genre :

'----------------------------------
Dim A As Integer

With UfParametres
'récupération de la valeur du contrôle "Textbox"
If IsNumeric(.TxbCCoul1.Value) = True Then
A = .TxbCCoul1.Value
Else
MsgBox "donnée entrée non valide"
Exit Sub
End If

'S'assurer que la valeur saisie est conforme
If A >= 1 And A < 57 Then
.Controls("TxbAttib" & A).Backcolor = "C" & A
End If
End With
'----------------------------------

Dans ta procédure tu utilises C1 ... comme je ne sais pas à quoi cela réfère... il n'est pas certain que "C" & A soit
acceptable !


Salutations!




"Christian Raoux" a écrit dans le message de
news:
Salut la liste

J'ai un UserForm qui s'ouvre à la sélection d'une feuille
il est modifier par macro
mais j'ai besoin de condition répetitives pour colorisée des textBox

J'ai dans :
Private Sub Worksheet_Activate()
With UfParametres
.TxbAttib1.Value = Parametres.Range("H2").Text
.TxbCode1.Value = Parametres.Range("I2").Text
.TxbCCoul1.Value = Parametres.Range("I2").Interior.ColorIndex
.TxbAttib2.Value = Parametres.Range("H3").Text
.TxbCode2.Value = Parametres.Range("I3").Text
.TxbCCoul2.Value = Parametres.Range("I3").Interior.ColorIndex
.TxbAttib3.Value = Parametres.Range("H4").Text
.TxbCode3.Value = Parametres.Range("I4").Text
.TxbCCoul3.Value = Parametres.Range("I4").Interior.ColorIndex
.TxbAttib4.Value = Parametres.Range("H5").Text
.TxbCode4.Value = Parametres.Range("I5").Text
.TxbCCoul4.Value = Parametres.Range("I5").Interior.ColorIndex
....
.TxbAttib20.Value = Parametres.Range("H21").Text
.TxbCode20.Value = Parametres.Range("I21").Text
.TxbCCoul20.Value = Parametres.Range("I21").Interior.ColorIndex
End With


ce que je veux faire pour TxbAttib1, TxbCode1, TxbCCoul1 à TxbAttib20,
TxbCode20, TxbCCoul20

If UfParametres.TxbCCoul1.Value = 1 then
UfParametres.TxbAttib1.Backcolor = C1
ElseIf UfParametres.TxbCCoul1.Value = 2 then
UfParametres.TxbAttib1.Backcolor = C2
ElseIf UfParametres.TxbCCoul1.Value = 3 then
UfParametres.TxbAttib1.Backcolor = C3
...
ElseIf UfParametres.TxbCCoul1.Value = 56 then
UfParametres.TxbAttib1.Backcolor = C56
End If

Comment faire pour ne pas réécrir les condition à chaque fois

merci d'avance

christian
Avatar
Christian Raoux
C1 à C56 représentes des Public Constantes definies dans les déclarations
du module, definie "As Long"

"C"& A ne marche pas "Imconpatiblité de type"

merci

Christian

"Denis Michon" écrivait
news:9Zbkb.2131$:

Bonjour Christian,

Si j'ai compris, cette section
'----------
If UfParametres.TxbCCoul1.Value = 1 then
UfParametres.TxbAttib1.Backcolor = C1
ElseIf UfParametres.TxbCCoul1.Value = 2 then
UfParametres.TxbAttib1.Backcolor = C2
.../...

est basée sur la valeur de "TxbCCoul1.Value " . As-tu essayé quelque
chose dans le genre :

'----------------------------------
Dim A As Integer

With UfParametres
'récupération de la valeur du contrôle "Textbox"
If IsNumeric(.TxbCCoul1.Value) = True Then
A = .TxbCCoul1.Value
Else
MsgBox "donnée entrée non valide"
Exit Sub
End If

'S'assurer que la valeur saisie est conforme
If A >= 1 And A < 57 Then
.Controls("TxbAttib" & A).Backcolor = "C" & A
End If
End With
'----------------------------------

Dans ta procédure tu utilises C1 ... comme je ne sais pas à quoi cela
réfère... il n'est pas certain que "C" & A soit acceptable !


Salutations!




"Christian Raoux" a écrit dans le message de
news:
Salut la liste

J'ai un UserForm qui s'ouvre à la sélection d'une feuille
il est modifier par macro
mais j'ai besoin de condition répetitives pour colorisée des textBox

J'ai dans :
Private Sub Worksheet_Activate()
With UfParametres
.TxbAttib1.Value = Parametres.Range("H2").Text
.TxbCode1.Value = Parametres.Range("I2").Text
.TxbCCoul1.Value = Parametres.Range("I2").Interior.ColorIndex
.TxbAttib2.Value = Parametres.Range("H3").Text
.TxbCode2.Value = Parametres.Range("I3").Text
.TxbCCoul2.Value = Parametres.Range("I3").Interior.ColorIndex
.TxbAttib3.Value = Parametres.Range("H4").Text
.TxbCode3.Value = Parametres.Range("I4").Text
.TxbCCoul3.Value = Parametres.Range("I4").Interior.ColorIndex
.TxbAttib4.Value = Parametres.Range("H5").Text
.TxbCode4.Value = Parametres.Range("I5").Text
.TxbCCoul4.Value = Parametres.Range("I5").Interior.ColorIndex
....
.TxbAttib20.Value = Parametres.Range("H21").Text
.TxbCode20.Value = Parametres.Range("I21").Text
.TxbCCoul20.Value = Parametres.Range("I21").Interior.ColorIndex
End With


ce que je veux faire pour TxbAttib1, TxbCode1, TxbCCoul1 à TxbAttib20,
TxbCode20, TxbCCoul20

If UfParametres.TxbCCoul1.Value = 1 then
UfParametres.TxbAttib1.Backcolor = C1
ElseIf UfParametres.TxbCCoul1.Value = 2 then
UfParametres.TxbAttib1.Backcolor = C2
ElseIf UfParametres.TxbCCoul1.Value = 3 then
UfParametres.TxbAttib1.Backcolor = C3
...
ElseIf UfParametres.TxbCCoul1.Value = 56 then
UfParametres.TxbAttib1.Backcolor = C56
End If

Comment faire pour ne pas réécrir les condition à chaque fois

merci d'avance

christian




Avatar
Denis Michon
Bonjour Christian,

Si tu acceptes la suggestion

Cette ligne de commande :
.Controls("TxbAttib" & A).Backcolor = "C" & A

sera remplacé par :
.Controls("TextBox" & A).Value = C(A)



Une façon de s'en sortir, au lieu d'utiliser des constantes, utilise une variable de type "Array" (tableau) que tu
définis dans le haut d'un module comme Public.

Public C(1 To 56) As Integer

Tu crées une petite procédure pour initialer ce tableau à l'ouvertue de ton classeur ... ou autrement ... selon ton
application


'----------------
Sub InitialerMonTableau()

C(1) = "x"
C(2) = "y"
C(3) = "z"
'.../...etc
C(56) = "zz"

End Sub
'----------------

Et dans le ThisWorkbook de ton classeur Ou dans la procédure "Private Sub UserForm_Initialize()" de ton formulaire.

'--------------------------------
Private Sub Workbook_Open()
InitialerMonTableau
End Sub
'--------------------------------



Salutations!




"Christian Raoux" a écrit dans le message de
news:
C1 à C56 représentes des Public Constantes definies dans les déclarations
du module, definie "As Long"

"C"& A ne marche pas "Imconpatiblité de type"

merci

Christian

"Denis Michon" écrivait
news:9Zbkb.2131$:

Bonjour Christian,

Si j'ai compris, cette section
'----------
If UfParametres.TxbCCoul1.Value = 1 then
UfParametres.TxbAttib1.Backcolor = C1
ElseIf UfParametres.TxbCCoul1.Value = 2 then
UfParametres.TxbAttib1.Backcolor = C2
.../...

est basée sur la valeur de "TxbCCoul1.Value " . As-tu essayé quelque
chose dans le genre :

'----------------------------------
Dim A As Integer

With UfParametres
'récupération de la valeur du contrôle "Textbox"
If IsNumeric(.TxbCCoul1.Value) = True Then
A = .TxbCCoul1.Value
Else
MsgBox "donnée entrée non valide"
Exit Sub
End If

'S'assurer que la valeur saisie est conforme
If A >= 1 And A < 57 Then
.Controls("TxbAttib" & A).Backcolor = "C" & A
End If
End With
'----------------------------------

Dans ta procédure tu utilises C1 ... comme je ne sais pas à quoi cela
réfère... il n'est pas certain que "C" & A soit acceptable !


Salutations!




"Christian Raoux" a écrit dans le message de
news:
Salut la liste

J'ai un UserForm qui s'ouvre à la sélection d'une feuille
il est modifier par macro
mais j'ai besoin de condition répetitives pour colorisée des textBox

J'ai dans :
Private Sub Worksheet_Activate()
With UfParametres
.TxbAttib1.Value = Parametres.Range("H2").Text
.TxbCode1.Value = Parametres.Range("I2").Text
.TxbCCoul1.Value = Parametres.Range("I2").Interior.ColorIndex
.TxbAttib2.Value = Parametres.Range("H3").Text
.TxbCode2.Value = Parametres.Range("I3").Text
.TxbCCoul2.Value = Parametres.Range("I3").Interior.ColorIndex
.TxbAttib3.Value = Parametres.Range("H4").Text
.TxbCode3.Value = Parametres.Range("I4").Text
.TxbCCoul3.Value = Parametres.Range("I4").Interior.ColorIndex
.TxbAttib4.Value = Parametres.Range("H5").Text
.TxbCode4.Value = Parametres.Range("I5").Text
.TxbCCoul4.Value = Parametres.Range("I5").Interior.ColorIndex
....
.TxbAttib20.Value = Parametres.Range("H21").Text
.TxbCode20.Value = Parametres.Range("I21").Text
.TxbCCoul20.Value = Parametres.Range("I21").Interior.ColorIndex
End With


ce que je veux faire pour TxbAttib1, TxbCode1, TxbCCoul1 à TxbAttib20,
TxbCode20, TxbCCoul20

If UfParametres.TxbCCoul1.Value = 1 then
UfParametres.TxbAttib1.Backcolor = C1
ElseIf UfParametres.TxbCCoul1.Value = 2 then
UfParametres.TxbAttib1.Backcolor = C2
ElseIf UfParametres.TxbCCoul1.Value = 3 then
UfParametres.TxbAttib1.Backcolor = C3
...
ElseIf UfParametres.TxbCCoul1.Value = 56 then
UfParametres.TxbAttib1.Backcolor = C56
End If

Comment faire pour ne pas réécrir les condition à chaque fois

merci d'avance

christian




Avatar
Christian Raoux
merci ç a marche bien

A+
Christian


"Denis Michon" écrivait
news:BKckb.2617$:

Bonjour Christian,

Si tu acceptes la suggestion

Cette ligne de commande :
.Controls("TxbAttib" & A).Backcolor = "C" & A

sera remplacé par :
.Controls("TextBox" & A).Value = C(A)



Une façon de s'en sortir, au lieu d'utiliser des constantes, utilise
une variable de type "Array" (tableau) que tu définis dans le haut
d'un module comme Public.

Public C(1 To 56) As Integer

Tu crées une petite procédure pour initialer ce tableau à l'ouvertue
de ton classeur ... ou autrement ... selon ton application


'----------------
Sub InitialerMonTableau()

C(1) = "x"
C(2) = "y"
C(3) = "z"
'.../...etc
C(56) = "zz"

End Sub
'----------------

Et dans le ThisWorkbook de ton classeur Ou dans la procédure "Private
Sub UserForm_Initialize()" de ton formulaire.

'--------------------------------
Private Sub Workbook_Open()
InitialerMonTableau
End Sub
'--------------------------------



Salutations!




"Christian Raoux" a écrit dans le message de
news:
C1 à C56 représentes des Public Constantes definies dans les
déclarations du module, definie "As Long"

"C"& A ne marche pas "Imconpatiblité de type"

merci

Christian

"Denis Michon" écrivait
news:9Zbkb.2131$:

Bonjour Christian,

Si j'ai compris, cette section '----------
If UfParametres.TxbCCoul1.Value = 1 then
UfParametres.TxbAttib1.Backcolor = C1
ElseIf UfParametres.TxbCCoul1.Value = 2 then
UfParametres.TxbAttib1.Backcolor = C2 .../...

est basée sur la valeur de "TxbCCoul1.Value " . As-tu essayé quelque
chose dans le genre :

'----------------------------------
Dim A As Integer

With UfParametres
'récupération de la valeur du contrôle "Textbox"
If IsNumeric(.TxbCCoul1.Value) = True Then
A = .TxbCCoul1.Value
Else
MsgBox "donnée entrée non valide"
Exit Sub
End If

'S'assurer que la valeur saisie est conforme
If A >= 1 And A < 57 Then
.Controls("TxbAttib" & A).Backcolor = "C" & A
End If
End With
'----------------------------------

Dans ta procédure tu utilises C1 ... comme je ne sais pas à quoi cela
réfère... il n'est pas certain que "C" & A soit acceptable !


Salutations!




"Christian Raoux" a écrit dans le message
de news: Salut la
liste

J'ai un UserForm qui s'ouvre à la sélection d'une feuille
il est modifier par macro
mais j'ai besoin de condition répetitives pour colorisée des textBox

J'ai dans :
Private Sub Worksheet_Activate()
With UfParametres
.TxbAttib1.Value = Parametres.Range("H2").Text
.TxbCode1.Value = Parametres.Range("I2").Text
.TxbCCoul1.Value = Parametres.Range("I2").Interior.ColorIndex
.TxbAttib2.Value = Parametres.Range("H3").Text
.TxbCode2.Value = Parametres.Range("I3").Text
.TxbCCoul2.Value = Parametres.Range("I3").Interior.ColorIndex
.TxbAttib3.Value = Parametres.Range("H4").Text
.TxbCode3.Value = Parametres.Range("I4").Text
.TxbCCoul3.Value = Parametres.Range("I4").Interior.ColorIndex
.TxbAttib4.Value = Parametres.Range("H5").Text
.TxbCode4.Value = Parametres.Range("I5").Text
.TxbCCoul4.Value = Parametres.Range("I5").Interior.ColorIndex ....
.TxbAttib20.Value = Parametres.Range("H21").Text
.TxbCode20.Value = Parametres.Range("I21").Text
.TxbCCoul20.Value = Parametres.Range("I21").Interior.ColorIndex
End With


ce que je veux faire pour TxbAttib1, TxbCode1, TxbCCoul1 à
TxbAttib20, TxbCode20, TxbCCoul20

If UfParametres.TxbCCoul1.Value = 1 then
UfParametres.TxbAttib1.Backcolor = C1
ElseIf UfParametres.TxbCCoul1.Value = 2 then
UfParametres.TxbAttib1.Backcolor = C2
ElseIf UfParametres.TxbCCoul1.Value = 3 then
UfParametres.TxbAttib1.Backcolor = C3 ...
ElseIf UfParametres.TxbCCoul1.Value = 56 then
UfParametres.TxbAttib1.Backcolor = C56
End If

Comment faire pour ne pas réécrir les condition à chaque fois

merci d'avance

christian