Numérotation automatique des lignes ajoutées [Fermé]

Signaler
Messages postés
15
Date d'inscription
jeudi 6 juillet 2017
Statut
Membre
Dernière intervention
4 septembre 2017
-
Messages postés
15
Date d'inscription
jeudi 6 juillet 2017
Statut
Membre
Dernière intervention
4 septembre 2017
-
Bonjour à tous!

Après avoir longuement cherché dans divers forums, je me retourne vers vous..
Voilà, j'ai un fichier excel de gestion des tâches. Il est rempli et mis à jour toutes les semaines. Il permet de récapituler l'ensemble des actions à mener sur les jours, semaines et mois à venir. Pour rendre ce fichier plus fluide, nous avons besoin de numéroter les actions. Les actions sont regroupées par catégories, nous sommes donc amenés à rajouter des actions au début. Nous souhaitons donc, pour plus de facilité, que cette numérotation soit automatique, et que l'ajout d'action au début ne modifie surtout pas les actions suivantes :

Par exemple:

Semaine 1

Ligne 1 : action 1
Ligne 2 : action 2
Ligne 3 : action 3
Ligne 4 : action 4
Ligne 5 : action 5

Semaine 2 :

Ligne 1 : action 1
Ligne 2 : action 2
Ligne 3 : action 6
Ligne 4 : action 3
Ligne 5 : action 4
Ligne 6 : action 5

Et à l'inverse, nous avons aussi besoin que les numéros d'actions ne soit pas impacté par la suppression d'une action.

Semaine 3 :

Ligne 1 : action 1
Ligne 2 : action 2
Ligne 3 : action 6
Ligne 4 : action 3
Ligne 5 : action 5


J'ai essayé avec la fonction max() mais ça me créer une circulaire donc pas possible...

Je me débrouille avec les formules mais je ne connais strictement rien en VBA, bien que qq bases de programmation...

Auriez-vous une solution à me proposer?

Je vous remercie de m'avoir lu!

7 réponses

Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 471
Bonjour,

Je me débrouille avec les formules et tu as bien compris qu'avec les formules qui sont sans cesse recalculées tu ne peux pas avoir de numéro automatique fixé à la création (Jusqu'à preuve du contraire !)
Si tu nous donnes la colonne qui doit déterminer la création d'un nouveau numéro et la colonne où il doit être inséré, l'on peut te donner une petite macro qui le ferait car elle permet de figer la valeur calculée par ton MAX.
Messages postés
15
Date d'inscription
jeudi 6 juillet 2017
Statut
Membre
Dernière intervention
4 septembre 2017

Bonjour,

Déjà merci de m'avoir lu et de prendre le temps de me répondre. C'est un véritable casse-tête pour moi!

Voici l'imprim écran de mon fichier excel en question. Le numéro de l'action doit s'insérer dans la colonne C selon le numéro max inscrit dans la colonne C et à chaque ajout de ligne dans le tableau.


Merci :)!
Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 471
Bonjour,

Je te propose me mettre ce code dans ta feuille (mode d'emploi)
Private Sub Worksheet_Change(ByVal sel As Range)
    If sel.CountLarge > 1 Then Exit Sub
    If Application.CountA(Rows(sel.Row)) = 1 Then
        Cells(sel.Row, "C").Value = Application.Max(Columns("C")) + 1
    End If
End Sub

Il te faudra sauvegarder ton classeur en .xlsm pour conserver le code.
Messages postés
15
Date d'inscription
jeudi 6 juillet 2017
Statut
Membre
Dernière intervention
4 septembre 2017

Merci pour votre réactivité.

Je viens de la mettre.

Je vais essayer de me l'approprier. Mais parfois les numéros qui s’insèrent sont incohérents et ne correspondent pas au maximum...

Mais je vais essayer de comprendre. En tout cas merci beaucoup pour votre aide!
Messages postés
15
Date d'inscription
jeudi 6 juillet 2017
Statut
Membre
Dernière intervention
4 septembre 2017

Pourriez-vous m'indiquer comment intégrer le "si la case D est vide, on inscrit pas de numéro dans la case c de la même ligne"?? Je vous remercie!
Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 471
Bonsoir,

Je n'avais pas toutes les conditions, alors comme ceci cela devrait être mieux :
Private Sub Worksheet_Change(ByVal sel As Range)
    If sel.CountLarge > 1 Then Exit Sub
    If Cells(sel.Row,"D")) .Value <> "" and Cells(sel.Row, "C").Value ="" Then
        Cells(sel.Row, "C").Value = Application.Max(Columns("C")) + 1
    End If
End Sub
Messages postés
15
Date d'inscription
jeudi 6 juillet 2017
Statut
Membre
Dernière intervention
4 septembre 2017

Bonjour,

Merci pour votre aide, je vais intégrer cela!

Bonne journée!
Messages postés
15
Date d'inscription
jeudi 6 juillet 2017
Statut
Membre
Dernière intervention
4 septembre 2017

Cela marche à la perfection!!! Merci beaucoup pour votre aide