VBA pour faire une suite logique +1 si valeur en colonne D

bonjour le forum,

j'aimerai faire un code vba si il y à une valeur en colonne D2, D3.... ecrire en E2 "2" en E3 "3"...

merci

Franck

https://www.excel-pratique.com/~files/doc/macro_somme.xls

Bonjour,

Formule à mettre en E1 et à recopier en bas :

=NBVAL($D$1:D1)

ou bien :

=SI(D1<>"";NBVAL($D$1:D1);"")

à choisir selon le résultat que tu préfères. Je ne pense pas qu'il faut absolument utiliser le VBA pour ce faire. C'est toi qui décides.

Cdlt,

Bonjour le forum,

Salut Raja,

J'ai besoin d'une VBA car sinon le fait de glisser une formule du type :

=SI(D1<>"";NBVAL($D$1:D1);"")

=NBVAL($D$1:D1)

Cela prend trop de place en volume, car je suis obligé de glisser ma formule jusqu'a la ligne 65536 ce qui grossit énormémént mon fichier.

Merci de votre aide.

Amicalement

Franck

bonjour le forum,

Personne à trouvé un code pour me dépanner?

merci

Re,

Sauf si tu constitues une liste (menu Données/Liste) avec ton tableau(les formules de calcul déjà en place), les mises à jour ne pose aucun problème. Les formules en place sont copiées automatiquement à chaque création d'une ligne.

Cdlt,

Bonsoir,

en supposant que E1 = 1, utilise cette macro

Sub incremente()
'macro par Dan pour clyver - xl pratique le 02/04/08
Dim i As Integer
For i = 2 To Range("D65536").End(xlUp).Row
If Range("D" & i) > 0 Then Range("E" & i) = Range("E" & i - 1) + 1
Next
End Sub

Macro placer dans un module en VBA

A te relire

Dan

bonjour le forum!

merci de votre aide ça fonctionne tres bien merci bonne journée!

par contre est il possible de mettre a jour automatiquement, en gros j'active C3 appeler la macro (Sub incremente())

If Target.Address = Range("C3").Address Then

Zone = Range("B65535").End(xlUp).Row - 6

Sheets("Données").Range("A" & Sheets("Données").Range("A65535").End(xlUp).Offset(1, 0).Row, "D" & Sheets("Données").Range("A65535").End(xlUp).Offset(1 + Zone, 0).Row).Value = Sheets("Equipements").Range("B6", Sheets("Equipements").Range("E6").Offset(Zone, 0)).Value

Sheets("Equipements").Range("C6", Sheets("Equipements").Range("D6").Offset(Zone, 0)).ClearContents

End If

End Sub

la marco (Sub incremente()) se trouve actuelment sur la feuille "Données"

Merci

re,

Oui c'est possible mais donne moi ton code complet car là il manque quelque chose et surtout dis moi où ce code est placé dans ton fichier.

A te relire

Dan

re le forum Excel-Pratique!

le code sur feuil1 (Equipements)

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address = Range("C3").Address Then

Zone = Range("B65535").End(xlUp).Row - 6

Sheets("Données").Range("A" & Sheets("Données").Range("A65535").End(xlUp).Offset(1, 0).Row, "D" & Sheets("Données").Range("A65535").End(xlUp).Offset(1 + Zone, 0).Row).Value = Sheets("Equipements").Range("B6", Sheets("Equipements").Range("E6").Offset(Zone, 0)).Value

Sheets("Equipements").Range("C6", Sheets("Equipements").Range("D6").Offset(Zone, 0)).ClearContents

End If

End Sub

sur feuil2 (Données)

Sub incremente()

'macro par Dan pour clyver - xl pratique le 02/04/08

Dim i As Integer

For i = 2 To Range("D65536").End(xlUp).Row

If Range("D" & i) > 0 Then Range("E" & i) = Range("E" & i - 1) + 1

Next

End Sub

pour faire simple une archive de la feuil1 (Equipements) se fait lorsque je change la valeur en 'C3" et la copie en feuil2 (Données).

voilouu

merci

re,

Mets ceci :

code feuil équipements

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim zone As Integer
If Target = Range("C3") Then
Call incremente
zone = Range("B65535").End(xlUp).Row - 6
Sheets("Données").Range("A" & Sheets("Données").Range("A65535").End(xlUp).Offset(1, 0).Row, "D" & Sheets("Données").Range("A65535").End(xlUp).Offset(1 + zone, 0).Row).Value = Sheets("Equipements").Range("B6", Sheets("Equipements").Range("E6").Offset(zone, 0)).Value
Sheets("Equipements").Range("C6", Sheets("Equipements").Range("D6").Offset(zone, 0)).ClearContents
End If
End Sub

dans un module (donc pas dans la feuille "données"

Sub incremente()
'macro par Dan
Dim i As Integer
With Sheets("donnees")
For i = 2 To .Range("D65536").End(xlUp).Row
If .Range("D" & i) > 0 Then .Range("E" & i) = .Range("E" & i - 1) + 1
Next
End With
End Sub

Amicalement

Dan

bonjour le forum,

Il y a un pb lorsque je change C3 (pb exectution de la macro)

merci

re,

Quel pb ?

Dan

re bonsoir,

impossible de lancer la macro

re,

Si tu changes ta valeur en C3 et que cela ne fonctionne pas, c'est que ta macro est mal placée dans ton fichier.

Ne peux-tu pas mettre ton fichier ici ?

Dan

bonsoir Dan

voici le fichier en PJ :

https://www.excel-pratique.com/~files/doc/equipements.xls

merci

re,

Tu n'as pas suivi mes instructions...

La macro "incremente" est placée dans la feuille "donnees" alors que je te disais de la placer dans un module.

Mets la en dessous de la macro SUB DATE qui se trouve dans le module 1.

A te relire

Dan

re bonsoir

J'ai bien copier la marco dans un module, même renomé "donnees en Données"

tjs un bug il ouvre debug sur :

If Target = Range("C3") Then (en jaune)

merci

f.

re,

Remplace tes macros comme sit :

Feuille Equipement

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim zone As Integer
If stopevt = True Then Exit Sub
If Target = Range("C3") Then
Call incremente
zone = Range("B65535").End(xlUp).Row - 6
Sheets("Donnees").Range("A" & Sheets("Donnees").Range("A65535").End(xlUp).Offset(1, 0).Row, "D" & Sheets("Donnees").Range("A65535").End(xlUp).Offset(1 + zone, 0).Row).Value = Sheets("Equipements").Range("B6", Sheets("Equipements").Range("E6").Offset(zone, 0)).Value
stopevt = True
Sheets("Equipements").Range("C6", Sheets("Equipements").Range("D6").Offset(zone, 0)).ClearContents
stopevt = False
End If
End Sub

Module 1:

Public stopevt As Boolean
Sub date_()
Selection.FormulaR1C1 = "=NOW()"
End Sub
Sub incremente()
'macro par Dan
Dim i As Integer
With Sheets("donnees")
For i = 2 To .Range("D65536").End(xlUp).Row
If .Range("D" & i) > 0 Then .Range("E" & i) = .Range("E" & i - 1) + 1
Next
End With
End Sub

A te relire

Dan

re bonsoir,

le module Sub incremente()

ne se fait pas automatiquement.

je suis tjrs obligé de l'activer avec alt+F8

merci

re,

Déplace l'instruction "CALL INCREMENTE" pour la mettre juste avant END SUB

Dan

Rechercher des sujets similaires à "vba suite logique valeur colonne"