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

WHILE sur VB

3 réponses
Avatar
Yapi
Bonjour,

Je sors tout juste de formation sur VB et je butte sur la macro suivante que
j'essaie de créer

Range("i2").Select
ActiveCell.Value = i
While i = c
ActiveCell.Offset(0, 1) = x
x = x * (-1)
ActiveCell.Offset(1, (-1)).Select
ActiveCell.Value = i
Wend

J'ai dans ma colonne I soit "C" soit "D" avec tri sur cette colonne. Je
cherche à multiplier par -1 la colonne J tant que la colonne I="C".

Exemple
I2=C alors J2=J2*-1 puis je passe sur I3 et tant que la cellule I
selectionnée =C alors l'opération se répète.

Mais je ne parviens pas jusqu'au bout malgré moulte tentatives..

Merci pour votre aide

3 réponses

Avatar
Modeste
Bonsour® Yapi avec ferveur ;o))) vous nous disiez :

Je sors tout juste de formation sur VB et je butte sur la macro suivante que
j'essaie de créer

Range("i2").Select
ActiveCell.Value = i
While i = c
ActiveCell.Offset(0, 1) = x
x = x * (-1)
ActiveCell.Offset(1, (-1)).Select
ActiveCell.Value = i
Wend

J'ai dans ma colonne I soit "C" soit "D" avec tri sur cette colonne. Je
cherche à multiplier par -1 la colonne J tant que la colonne I="C".


La formation me semble insuffisante sur le B.A. BA de VBA !!!!
1 - l'affectation de valeur s'exprime de la gauche vers la droite
Affectation = valeur à affecter
2 - prendre l'habitude de déclarer les variables
3 - les constantes doivent etre déclarées selon leur type
si c= "C", alors c est de type string

Sub Yapi()
Const c As String = "C"
Dim i
Range("i2").Select
'----tant qu'il y a une valeur dans la colonne( I )
While Not IsEmpty(ActiveCell)
' ----si cette valeur est "c" ou "C"
i = UCase(ActiveCell)
If i = c Then
'---- alors on multiplie la valeur en colonne( J ) par -1
ActiveCell.Offset(0, 1) = -1 * ActiveCell.Offset(0, 1)
End If
'---- on selectionne la cellule suivante en colonne( I )
ActiveCell.Offset(1, 0).Select
Wend
End Sub

--
--
@+
;o)))

Avatar
Yapi
Pire que la formation sont les formés... Ok pour la leçon, je vais la digérer
et essayer de l'assimiler.

Merci pour l'info détaillée!

Yapi


Bonsour® Yapi avec ferveur ;o))) vous nous disiez :

Je sors tout juste de formation sur VB et je butte sur la macro suivante que
j'essaie de créer

Range("i2").Select
ActiveCell.Value = i
While i = c
ActiveCell.Offset(0, 1) = x
x = x * (-1)
ActiveCell.Offset(1, (-1)).Select
ActiveCell.Value = i
Wend

J'ai dans ma colonne I soit "C" soit "D" avec tri sur cette colonne. Je
cherche à multiplier par -1 la colonne J tant que la colonne I="C".


La formation me semble insuffisante sur le B.A. BA de VBA !!!!
1 - l'affectation de valeur s'exprime de la gauche vers la droite
Affectation = valeur à affecter
2 - prendre l'habitude de déclarer les variables
3 - les constantes doivent etre déclarées selon leur type
si c= "C", alors c est de type string

Sub Yapi()
Const c As String = "C"
Dim i
Range("i2").Select
'----tant qu'il y a une valeur dans la colonne( I )
While Not IsEmpty(ActiveCell)
' ----si cette valeur est "c" ou "C"
i = UCase(ActiveCell)
If i = c Then
'---- alors on multiplie la valeur en colonne( J ) par -1
ActiveCell.Offset(0, 1) = -1 * ActiveCell.Offset(0, 1)
End If
'---- on selectionne la cellule suivante en colonne( I )
ActiveCell.Offset(1, 0).Select
Wend
End Sub

--
--
@+
;o)))






Avatar
lSteph
Bonjour,
en complément de ce qui visait essentiellement la syntaxe, un petit
point pratique
le .select
à cet effet n'a pas forcément d'utilité, il en a fort rarement
d'ailleurs , il est presque toujours inutile et encombre la fluidité
du code.
(Il est justifié lorsqu'on veut absolument que telle cellule ou plage
soit sélectionnée à l'entrée ou à la sortie de la macro
mais il est inutile pour effectuer une action qui plus est en boucle
sur les cellules.

ainsi,
'...
[i2].select
ActiveCell.value=i
peut se résumer à
[i2].value=i

de même dans l'idée de ce que tu faisais:

Sub zaza()
Dim c As Range
For Each c In Range("j2", [j65536].End(xlUp).Address)
If Not IsEmpty(c) And UCase(c.Offset(0, -1)) = "C" Then
c = c * -1
End If
Next
End Sub

'Cordialement

'LSteph



On 15 juin, 11:58, Yapi wrote:
Bonjour,

Je sors tout juste de formation sur VB et je butte sur la macro suivante que
j'essaie de créer

Range("i2").Select
ActiveCell.Value = i
While i = c
ActiveCell.Offset(0, 1) = x
x = x * (-1)
ActiveCell.Offset(1, (-1)).Select
ActiveCell.Value = i
Wend

J'ai dans ma colonne I soit "C" soit "D" avec tri sur cette colonne. Je
cherche à multiplier par -1 la colonne J tant que la colonne I="C".

Exemple
I2=C alors J2=J2*-1 puis je passe sur I3 et tant que la cellule I
selectionnée =C alors l'opération se répète.

Mais je ne parviens pas jusqu'au bout malgré moulte tentatives..

Merci pour votre aide


+