Fonction incrémentation automatique

Merci pour votre réponse Thihii

Laissez moi expliquer d'avantage, désolé si un peu long

L'idée de base c'est que je voudrais faire une application sur Excel qui gère des tests professionnels, dans mon travail je reçois des candidats chacun d'eux veut obtenir une attestation qui indique qu'il est admissible pour exercer un métier bien déterminé, sauf que l'attestation ne peut être accordé que si le candidat passe un petit test de compétence, ma tache se limite à:

  • Saisir les données relatives à chaque candidat (date naissance, métier, ...) en respectant la logique de 1er venue 1er saisie tout en gardant la cellule suivante : "resultat test" colonne B vide le temps nécessaire de recevoir le resultat de test,
  • Ensuite, je commence à recevoir les resultats des tests effectués dans un ordre qui differe de l'ordre de saisie en 1er lieu.
Exemple supposant que j'ai saisi 30 lignes sur le fichier excel (pour 30 candidats) 1er venue 1er saisie, après j'ai reçu le resultat test de candidat 12, à ce moment je reviens sur la ligne correspondante pour modifier la cellule de colonne B "resultat test". Si le resultat est succes, le numéro d'incrementation correspondant s'incrémente pour prendre la valeur 0001. Après supposant que j'ai reçu le reultat du test du candidat 8, la modification de cellule resultat test en echec entrainera un num d'incrementation 0002 et ainsi de suite (la saisie des candidats continuent en parallèle de la même manière 1er venu 1er saisie ),, notez bien qu'en cas d'echec aucune incrémentation ne doit survenir et au debut d'année suivante le numéro d'incrémentation recommence a partir de 0001 et s'incrémente de la même manière

le numéro d'incrémentation va par la suite figurer sur un fichier word nommé "Attestation" lié à notre tableau excel par publipostage d'ou il est indispensable de garder toujours le numéro inchangé, de ce fait le numéro qui figure sur l'attestation doit correspondre au numéro d'incrémentation sur le tableau excel.

Bonsoir,

je comprends, ordre de priorité à conserver, en ajout comme en suppression.

J'ai une idée... Mais avant de la poster, je vais l'écrire et la tester. A plus tard.

Bonsoir,

après avoir abandonné l'idée d'un horodatage, une nouvelle m'est venu...

Si vous revenez sur une ligne pour supprimer la valeur "resultat test" ou voir même la modifier (de succes à echec ), des numéros d'incrémentation antérieurs changent de valeur également , ces numéros correspondent à des numéros d'attestation accordés ((affichés dans un fichier word) ils ne doivent pas changer,

Veuillez tester pour comprendre le souci

Bonsoir,

la même version, avec la colonne [ C ] qui sera à masquer, si le tout répond à votre attente.

Merci Thihii, je peux dire que graçe à ton aide l'application est à 90% prête

Toujours dans le même cadre d'idée, Est ce possible suite à une modification de valeur de cellule resultat test, d'affecter le num d'incrémentation supprimé dans la colonne D à un autre candidat(ç a d une autre ligne) , et poursuivre par la suite l'incrémentation sans qu'il y ait de doublons dans la même année,

L'idée est de ne pas avoir dans la même année un décalage entre les numeros d'incrémentation

Bonsoir,

est-il possible de remplir les valeurs souhaitées dans le tableau ci-joint, que je comprenne mieux la dernière demande.

Bonsoir,

ci joint les tableaux remplis, mais je suis pas sur si les différents cas concernent mon souci.

Juste pour mieux éclaircir les choses, Je vous demande de bien vouloir examiner le tableau 2 (ci joint) et reprendre la suite dans cet exemple::

Nous commençons la saisie par la ligne 7, echec ça donne cellule vide

Puis ligne 9, succes, ça donne 0001

ligne 11, succes, ça donne 0002

ligne 5, succes, ça donne 0003

ligne13, succes, ça donne 0004

Maintenant supposons que j'ai commis une faute dans la ligne 5 : soit parce que le resultat test que j'ai reçu ne concerne pas la ligne 5 mais plutot la ligne 16, ou bien le resultat test concerne la ligne 5 mais il s'agit d'echec au lieu de succes,

Dans ce cas, ce que je devrais faire c'est d'aller sur la ligne 5 pour supprimer la valeur de cellule resulat test ou la modifier en "echec" au lieu de succes, à ce niveau la numéro d'incrémentation (0003 dans notre exemple) reste toujours réservé à cette ligne 5 sans qu'il apparaît dans la colonne D,

Toujours dans le même exemple, si on vérifie maintenant l'incrémentation de colonne D dans la même année, nous allons remarquer l'absence du numéro d'incrémentation 0003 suite à cette modification, ce dernier ne peut apparaître de nouveau que si je reçois pour la ligne 5 ultérieurement un resultat test "succes" (chose qui peut ne pas arriver puisque certaines lignes peuvent ne pas avoir des resultat test ç a d les candidats ont renoncé de passer le test),

Donc finalement, l'idée qu'on peut se retrouver avec un ou peut être plusieurs numéros d'incrémentation qui manquent dans la même année

Ma question est la suivante :dans un cas pareil, est il possible dans la même année d'affecter le numéro d"incrémentation qui manque (soit 0003 dans cet exemple) à une autre ligne (en cas de succes bien sur) et poursuivre l'incrémentation à partir du dernier numéro (soit dans cet exemple 0005 puis 0006 ....)

9tableau-2.xlsm (37.06 Ko)

Bonjour,

Bon, rien est simple...

Vu comme vous avez rempli le fichier test, la solution du 20 septembre répondait à votre demande.

Nous allons reprendre à zéro si cela ne vous dérange pas, parlons du mode de fonctionnement normal, nous palerons des exceptions par la suite.

Il est évident que l'étude du fonctionnement ci-dessous, concerne une seule et même année. Le mode de fonctionnement des autres années sera identique. L'utilisateur rempli le fichier comme suit, sans commettre d'erreur :

  • ligne 1 : 'succès', consigner la valeur 001
  • ligne 5 : 'succès', consigner la valeur 002
  • ligne 2 : 'succès', consigner la valeur 003
  • ligne 7 : 'succès', consigner la valeur 004
Jusque là, pour ces quatre étapes, nous savons faire, c'est validé !

- en cinquième étape, la ligne 2 est modifiée par l'utilisateur, et devient 'échec' : effacer la consigne 003.

(De même à ce stade, nous savons faire...)

- en ligne 7, la consigne 004 devient 003 ?

- en sixième étape, l'utilisateur ajoute en ligne 4 : 'succès', consigner 004 ?

Merci de reprendre ce qui n'est pas ce que vous voulez, juste pour ces 7 étapes...

Permettez moi de corriger la cinquième étape (2ème tiret):

Si la ligne 2 est modifiée (echec ou suppression de valeur de cellule) , il faut effacer la consigne 0003, mais en ligne 7 la consigne 0004 garde toujours la même valeur, la valeur 0003 effacé sera accordée au suivant ajout (c à d la ligne 4). De plus si l'utilisateur ajoute encore en ligne 11 "succes", consigner 0005,

Ligne 3 "succes", consigner 0006

De cette manière a chaque fois qu'il a eu de modification dans une ligne, la valeur incrémenté effacé sera accordée à un autre ajout et continuer l'incrémentation sans avoir de doublons,

Il faut garantir aussi le retour en arrière, c'est à dire :

Si l'utilisateur change la valeur de "resultat test" en echec (ou voir même la supprimer) ce qui engendre par conséquent la suppression de numéro d'incrémentation, le même numéro s'affiche de nouveau si juste après il retourne en arrière vers la valeur initiale de resultat test (succes)

Bonsoir,

Chaque chose en son temps.

Il n'est déjà pas facile de vous comprendre, donc voici un autre test pour voir si une étape supplémentaire est franchie et vous convient.

Bonjour,

Parfait, parfait, parfait,

La solution répond exactement à mon souci

Merci infiniment Thihii,

Ce que je devrais faire maintenant c'est d'adapter le code VBA proposé comme solution à un nouveau fichier,

Pour ce faire et comme je suis pas un connaisseur du langage VBA, j'ai introduit quelques modifications sur la dernière solution (fichier joint), et je vous demande de bien vouloir indiquer quelles sont les rectifications à apporter dans le code VBA suite à ces modifications (décalage de colonnes). Comme ça je peux comprendre le code VBA proposé (le nécessaire pour que je puisse l'adapter à un nouveau fichier)

8exemple2.xlsm (37.51 Ko)

Bonsoir,

ci-joint un fichier avec des modifications pour adapter plus facilement.

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim plg As Range
    Dim tableau() As Long
    Dim Nbr As Long
    Dim annee As String
    Dim cherche
    Dim n As Long
    Dim li As Long
    Dim x As Long
    Dim y As Long
    Dim z As Long
    Dim ColAnnee As Long
    Dim ColTest As Long
    Dim ColIncrement As Long
'   noter les n° de colonne respectivement pour :
'       ColTest pour la colonne du Résultat test
'       ColIncrement pour la colonne du Numéro d'incrémentation
'       ColAnnee pour la colonne de l'année
'
'   pour la col A noter 1 - pour la col B noter 2 - pour la col C noter 3
'   etc...
'
    ColTest = 4
    ColIncrement = 7
    ColAnnee = 2
'

J'ai rajouté trois variables dont il suffit d'attribuer les valeurs des colonnes concernées.

Merci encore une fois

Graçe à vous j'arrive à terme de cette application,

j'ai encore deux autres questions supposées bcp plus simple qui portent sur une autre application, je vais essayer d'exposer mon nouveau souci dans un autre sujet

Bonjour,

Je me trouve dans l'obligation de revenir encore une fois sur la dernière solution VBA de notre camarade Thihii qui fonctionne correctement (voir copie de exemple2), le pb c'est que j'ai voulu changer les valeurs de colonne "resultat test" par vrai/faux au lieu de succes/echec

Pour ce faire, j'ai changé la liste déroulante par les nouvelles valeurs et modifier le code VBA en remplaçant la valeur "succes" par "vrai (voir exemple3) , cette modification a entraîné une perte de l'incrémentation dans la colonne G

Pouvez vous m'aider encore plus pour coriiger les erreurs dans l'exemple3

Merci pour votre patience

cdlt

11exemple3.xlsm (36.08 Ko)

Bonsoir,

Désolé pour une réponse tardive... je ne me connecte pas forcément tous les soirs, je sais, 'c'est pas bien'...

Si vous utilisiez le débogueur pas à pas, vous auriez pu visualiser la valeur de Target.value.

Ce qui s'affiche sur votre tableau n'est pas la vrai valeur lu par le vba.

Solution, soit forcer la valeur de target.value en majuscule à chaque fois qu'elle est utilisée,

ou remplacer "VRAI" dans votre code par "Vrai".

Je suis persuadé que vous comprendrez qu'il est important de visualiser les variables locales pour comprendre que la valeur lu a la première lettre en majuscule, suivit des autres en minuscules : soit "Vrai"

Mais, ce n'est pas tout...

Dans votre tableau, si vous modifiez le format de cellule en format texte, le "Vrai" ne fonctionnera plus, il faudra le remplacer, dans le code vba, par "vrai"... Que de complications !

Oui, lorsque vous créez un tableau, pensez à mettre le bon format de cellule pour ne pas avoir à rencontrer ce même type de 'BOGUE'...

Bien cordialement,

Merci

je prendrais tous ça en considération

Merci d'avoir donner de l'importance à mon message

cdlt

Rechercher des sujets similaires à "fonction incrementation automatique"