Incrémentation valeur VBA

gvives

XLDnaute Occasionnel
Bonjour à tous,

Une petite question en VBA...

Je souhaite dans une feuil1 qu'à chaque fois qu'un utilisateur saisie un libellé dans la colonne A que dans la colonne B une valeur s'incrémente + 50 par exemple :

Range (A1) = Toto - Range(B1) = 50 ; Range (A2) = Titi - Range(B2) = 100 ; Range (A3) = Tata - Range(B3) = 150 et ainsi de suite...

J'ai commencé un code mais il ne fonctionne pas correctement :

Private Sub worksheet_change(ByVal target As Range)
For Each Cell In Columns(2)
If Cell <> "" Then
Cell.Offset(1, 0) = Cell.Offset(1, -1) + 50
End If
Next
End Sub

Pourriez vous me donner un coup de mains :)

Merci d'avance...
 

Papou-net

XLDnaute Barbatruc
Re : Incrémentation valeur VBA

Bonjour gvives,

Je verrais la chose comme ceci:

Code:
Private Sub worksheet_change(ByVal target As Range)
Application.EnableEvents = False
For Each Cell In Columns(1).SpecialCells(xlCellTypeConstants)
   If Cell <> "" Then
     Cell.Offset(0, 1) = Iif(Cell.Row = 1, 50, Cell.Offset(-1, 1) + 50
   End If
Next
Application.EnableEvents = True
End Sub
A vérifier (pas testé).

Cordialement.
 

gvives

XLDnaute Occasionnel
Re : Incrémentation valeur VBA

C'est bon j'ai adapté le code et ça marche ;)

Private Sub worksheet_change(ByVal target As Range)
Application.EnableEvents = False
For Each Cell In Columns(2).SpecialCells(xlCellTypeConstants)
If Cell <> "" Then
If Cell.Row = 1 Then
Cell.Offset(0, 1) = 50
Else
Cell.Offset(0, 1) = Cell.Offset(-1, 1) + 50
End If
End If
Next
Application.EnableEvents = True
End Sub

Merci beaucoup encore !!

Bonne journée
 

job75

XLDnaute Barbatruc
Re : Incrémentation valeur VBA

Bonjour gvives, re Papou-net,

Dans la fonction IIf il faut savoir que tous les arguments sont toujours calculés.

D'où bug si l'un renvoie une erreur...

Pas de problème avec If...Then...Else :

Code:
Private Sub worksheet_change(ByVal target As Range)
Application.EnableEvents = False
For Each Cell In Columns(1).SpecialCells(xlCellTypeConstants)
   If Cell <> "" Then
     If Cell.Row = 1 Then Cell.Offset(0, 1) = 50 Else Cell.Offset(0, 1) = Val(Cell.Offset(-1, 1)) + 50
   End If
Next
Application.EnableEvents = True
End Sub
Edit : ah très bien, gvives a été plus rapide que moi :)

A+
 
Dernière édition:

Matheop

XLDnaute Occasionnel
Re : Incrémentation valeur VBA

Salut le fil,

Hum et sinon pourquoi tu ne passes tout simplement pas par une formule Excel?

=SI(A2<>"";B1+50;"")

(formule à placer en B2 et à extrapoler sur toute la colonne B)

Pour une cellule en B:
Si la valeur dans la cellule A est non nulle, alors tu prends la valeur voisine d'une case au-dessus (pour B2, tu prends B1 + 50) à laquelle tu ajoutes 50 sinon tu laisses la case vide.

Cordialement,
Mat'
 

gvives

XLDnaute Occasionnel
Re : Incrémentation valeur VBA

Bonjour Papou-net,
Bonjour Job75,
Bonjour Matichoux,

Merci Job 75 pour l'explication, j'avoue avoir utilisé sans savoir la fonction IF ... ELSE... et sans savoir pourquoi cela avait fonctionné.

Matichoux, je n'ai pas utilisé les formules Excel car je souhaite disposer d'un fichier vierge de formule et passer que par le VBA (pour éviter la case provenant des utilisateurs et limiter l'usage des cellules protégées)...

Encore merci à tous pour votre aide...

Bonne journée !!
 

Statistiques des forums

Discussions
312 294
Messages
2 086 920
Membres
103 404
dernier inscrit
sultan87