Code Incrémentation

Ilino

XLDnaute Barbatruc
Bonsoir Forum
Dans ma colonne J ( J3 : J2014) Je saisi des Num dans l’ordre chronologique, je souhaiterai faire un code ( VBA)si je fais rentrer un num après la dernière cellule Non vide de la colonne qu’il soit égale au num précédent ou +1
EXEMPLE :
Dans la dernière cellule non vide de la colonne J est 12 , lors de la saisi dans la cellule suivante normalement je suis autorisé a saisir seulement le même nombre ou plus 1 c a d 12 ou 13

THANKS
 

Ilino

XLDnaute Barbatruc
Re : Code Incrémentation

Re , si vous permettez un autre exemple :

On prend les cellules J15 et J16 comme exemple
Cell J15 = 42
Cell J16 = vide’
Lors de la saisi dans la cell J16 , je suis autorisé a rentre que les nombres 42 ou 43 et ainsi de suite pour le reste
est il possible En VBA ???
Grazie
 

job75

XLDnaute Barbatruc
Re : Code Incrémentation

Bonsoir Ilino,

Je croyais que ton tableau allait jusqu'à la ligne 2013, mais bon...

1) Sélectionne donc la plage J3:J2014.

2) Onglet Données-Validations de données => Autoriser => Personnalisé puis entre la formule :

Code:
=ET(NB.VIDE(J$3:J3)=0;OU(J3=N(J2);J3=N(J2)+1))
Il n'est alors pas possible de laisser une cellule vide entre les données, et on ne peut entrer que 2 valeurs : celle de la cellule précédente ou cette valeur + 1.

Nota : pour un truc aussi simple, surtout pas de VBA :)

Edit : bonsoir Papou-net

A+
 
Dernière édition:

Papou-net

XLDnaute Barbatruc
Re : Code Incrémentation

Bonsoir PAPOU
Merci pour la réponse rapide , mais je pense que le fichier ne contiens aucun module donc ça n'a pas fonctionne
merci

RE :

Si, le code est contenu dans le module Feuil1 : si tu entres des valeurs en colonne J, tu verras le résultat.

Par contre, j'ai commis une petite erreur que je viens de corriger et que je t'envoie sous le format xlsm.

Cordialement.

PS : Salut job75. Ta solution est simple, mais notre ami avait demandé une macro : à lui de voir ce qu'il préfère maintenant.
 

Pièces jointes

  • Exemple Ramo.xlsm
    14.2 KB · Affichages: 41

Ilino

XLDnaute Barbatruc
Re : Code Incrémentation

Bonjour Forum
Merci pour la réponse (formule et code VBA)
Si vous permettez je souhaiterai interpréter ce code ???
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
Application.EnableEvents = False
If Target.Column = 10 And Target.Offset(-1, 0) <> "" And Target.Offset(1, 0) = "" Then
  If Target.Value < Target.Offset(-1, 0).Value Or Target.Value > Target.Offset(-1, 0).Value + 1 Then
    Target = ""
    Target.Select
  End If
End If
Application.EnableEvents = True
End Sub
Merci
 

Papou-net

XLDnaute Barbatruc
Re : Code Incrémentation

Bonjour R@mo,

Voici les lignes commentées une-à-une :

Private Sub Worksheet_Change(ByVal Target As Range)
Target représente la cellule modifiée

La ligne On Error permet au programme de continuer s'il rencontre une erreur. Par exemple, si plusieurs
ligne sont sélectionnées, cela engendre un plantage.
On Error Resume Next

la ligne Application.EnableEvents=False empêche la macro de boucler sur elle-même lorsque ce programme
modifie une cellule. C'est indispensable pour éviter les redondances avec plantage à la clé également.
Application.EnableEvents = False

La condition suivante détecte la colonne de la cellule modifiée (10=colonne J), et la valeur de la cellule
située au-dessus (elle ne doit pas être vide) et la valeur de la cellule située en-dessous (elle doit être vide). Si cette condition n'est pas vérifiée, le programme saute à la ligne End If et se termine.
If Target.Column = 10 And Target.Offset(-1, 0) <> "" And Target.Offset(1, 0) = "" Then

La condition suivante vérifie si la cellule est inférieure à celle du dessus ou si elle est supérieure à
la valeur de cette même cellule augmentée de 1. Si une de ces deux conditions est remplie, la saisie est
effacée et la cellule est re-sélectionnée.
If Target.Value < Target.Offset(-1, 0).Value Or Target.Value > Target.Offset(-1, 0).Value + 1 Then
Target = ""
Target.Select
End If


Cette ligne rétablit la détection d'événement puisque la macro est terminée. Sans cette instruction, la procédure Change ne serait plus active pour la suite.
Application.EnableEvents = True

J'espère avoir été clair et précis dans mes explications. Si tu souhaites d'autres précisions sur les mots-clés utilisés, la touche F1 te précisera les paramètres à employer, notamment en ce qui concerne Offset().

Bonne journée.

Cordialement.
 

job75

XLDnaute Barbatruc
Re : Code Incrémentation

Bonjour Ilino, Papou-net,

Ce code VBA fait exactement la même chose que la validation de données de mon post #5 :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Range
Set r = Intersect(Target, [J3:J2014])
If Not r Is Nothing Then
  Application.EnableEvents = False
  For Each r In r 'si entrées multiples (copier-coller)
    If r <> "" Then If Application.CountBlank(Range("J3", r)) _
      Or r <> Val(r(0)) And r <> Val(r(0)) + 1 _
        Then Application.Undo: Exit For
  Next
  Application.EnableEvents = True
End If
End Sub
Il apporte cependant un plus qui peut justifier son utilisation : le contrôle des données en cas d'entrées multiples, par copier-coller par exemple.

Noter Application.Undo qui annule l'entrée.

Fichier joint.

A+
 

Pièces jointes

  • Incrémentation(1).xls
    98.5 KB · Affichages: 36
  • Incrémentation(1).xls
    98.5 KB · Affichages: 35
  • Incrémentation(1).xls
    98.5 KB · Affichages: 35

Ilino

XLDnaute Barbatruc
Re : Code Incrémentation

Salut Maitre
merci encore pour ces solution , mais je pense que le dernier fichier ne fonctionne pas ???!!!
EDIT: sorry MAITRE j'ai mal détaché ton fichier
all right
 
Dernière édition:

Discussions similaires

Réponses
18
Affichages
397

Statistiques des forums

Discussions
312 493
Messages
2 088 956
Membres
103 990
dernier inscrit
lamiadebz