XL 2016 [ Résolu ] Formule VBA Incrément collone

tsaout

XLDnaute Nouveau
Dans un fichier excel je souhaiterais que la colonne A s'incrémente de 1 sans forcément de limite a chaque saisie dans la ligne.
Le but est que l'utilisateur arrive sur le fichier rentre les informations dont il dispose dans une ligne et à la saisie d'informations dans la dite ligne afficher l'ID incrémenter
 

job75

XLDnaute Barbatruc
Bonjour tsaout, bienvenue sur XLD,

Comme dans la vraie vie, en entrant on dit bonjour, la Charte du forum le rappelle.

Organisez votre tableau en tableau structuré (menu Insertion => Tableau), voyez le fichier joint.

S'il y a des données en colonne A effacez-les et entrez en A2 la formule :
Code:
=MAX(A$1:DECALER([@Titre1];-1;))+1
A+
 

Pièces jointes

  • Incrémentation(1).xlsx
    10.9 KB · Affichages: 13

tsaout

XLDnaute Nouveau
Bonjour, désolé pour le message sans bonjour ni rien un peu pressé par la masse de boulot que j'avais mais un grand merci de la réponse rapide je pense que c'est une partie de la réponse mais en gros le but est que si un utilisateur rentre une données dans une cellule de la colonne B à AA la ligne qui comprend cette cellule prenne en colonne A un ID incrémenter automatiquement (un tri étant effectué sur un champ de date les ID ne sont pas dans l'ordre dans la colonne A) ceci afin de faciliter la vie de mes utilisateurs.

Encore désolé et à bientôt
 

tsaout

XLDnaute Nouveau
Bonjour,

Non enfaite je cherche juste a ce que dès qu'une donnée est rentrée dans une des colonnes B à AA la colonne A prenne une valeur (un ID) qui serait incrémenté automatiquement.

exemple : je saisi quelque chose en Y3 la cellule A3 prendrait un ID, même chose si la cellule était W3 ou C3
 

job75

XLDnaute Barbatruc
Bonjour à tous,
les ID ne sont pas dans l'ordre dans la colonne A
Cela entraîne qu'on ne peut pas utiliser des formules pour calculer les ID en colonne A, il faut du VBA.

Voyez le fichier .xlsm joint et cette macro dans le code de la feuille (clic droit sur l'onglet et Visualiser le code) :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
With ListObjects(1).DataBodyRange 'tableau Excel structuré
    Set Target = Intersect(Target.EntireRow, .Columns(1))
    If Target Is Nothing Then Exit Sub
    Application.EnableEvents = False
    For Each Target In Target
        If IsEmpty(Target) Then Target = Application.Max(.Columns(1)) + 1
    Next
    Application.EnableEvents = True
End With
End Sub
Elle se déclenche automatiquement quand on modifie ou valide une cellule quelconque.

A+
 

Pièces jointes

  • Incrémentation VBA(1).xlsm
    17.9 KB · Affichages: 12

tsaout

XLDnaute Nouveau
Merci beaucoup job,

Fichier test qui fonctionne nickel par contre je n'arrive pas à l'appliquer à mon fichier une commande VBA est déjà en oeuvre dessus peut être que cela gêne

VB:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Not Intersect(Target, [A345:A1000]) Is Nothing Then
Target(1, 2) = Now
End If
End Sub

Mais sinon c'est bien le principe que j'essaye de réaliser (si en plus le décompte pouvait commencer a 344)
 

patricktoulon

XLDnaute Barbatruc
Bonjour
quand on travaille avec un tableau structuré je ne vois pas l'interet d'avoir des lignes vides
le tableaux doit se limiter au nombre de ligne utiles qu'il soit évolutif ou non
sinon je ne vois pas l’intérêt de l'utiliser autant utiliser un range normal
pour ton incrementation test nb.si et met lui ligne() - laligne du depart du tableau
enfin ton exemple n'est pas très représentatif de ton besoins
+ de 300 lignes vides dans un tableau structuré c'est insensé
 

tsaout

XLDnaute Nouveau
De base le tableau n'est pas en structuré mais je l'ai fait suite aux test et les informations de mon tableau recensant des date d'arrivées des nom etc je ne peut absolument joindre ces informations a mon exemple. Après le but est de pouvoir avoir un ID qui s'incrémente a partir de la ligne 345. Merci de tes conseils mais NB.SI ne correspond pas

PS : Pour les lignes vides c'est juste que j'utilise certaines formules dans des collones masquées et que donc j'en ai besoin
 

job75

XLDnaute Barbatruc
Bonjour tsaout, patricktoulon, le forum,

En effet votre tableau n'a vraiment aucun sens.

Alors pour entrer les "Now" voyez le fichier (2) joint qui lui tient la route et cette macro :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
With ListObjects(1).DataBodyRange 'tableau Excel structuré
    Set Target = Intersect(Target.EntireRow, .Columns(1))
    If Target Is Nothing Then Exit Sub
    Application.EnableEvents = False
    For Each Target In Target
        If IsEmpty(Target) Then Target = Application.Max(.Columns(1)) + 1: Target(1, 2) = Now
    Next
    Application.EnableEvents = True
End With
End Sub
Bonne journée.
 

Pièces jointes

  • Incrémentation VBA(2).xlsm
    18.3 KB · Affichages: 14

Discussions similaires

Statistiques des forums

Discussions
315 080
Messages
2 116 024
Membres
112 638
dernier inscrit
Kapucine