Gestion d'erreur dans Excel

Résolu
Bonjour,

Dans un classeur Excel j’utilise la fonction suivante :

=SI($E$28="";"";RECHERCHEV($E$6; Données!E2:F12;2;FAUX))

pour récupérer la valeur de la deuxième colonne de la feuille "Données". Quand la valeur de référence est trouvée, je récupère bien la bonne valeur. Par contre quand la valeur de référence n'est pas trouvée j'ai comme retour #N/A, ce qui est normal puisque la valeur de référence n'est pas reconnue.
Je souhaitais, dans un premier temps, pouvoir remplacer #N/A par quelque chose de plus parlant, dans le style :
- Numéro adhérent inconnu.

Ici même et avec la complicité de « Vaucluse » ma formule est devenue :

=SI($E6="";"";SI(ESTERREUR(RECHERCHEV($E6;Données!E2:F12;2;FAUX));"Numéro d'adhérent inconnu..";RECHERCHEV($E6;Données!E2:F12;2;FAUX)))

Cela fonctionne puisque je remplace #N/A par "Numéro d'adhérent inconnu…".
Par contre je souhaiterais maintenant aller plus loin. Serait-il pas possible quand une correspondance n’est pas trouvée et après affichage du message d’erreur d’ouvrir une boite de dialogue avec un message explicite, sur la raison du message d’erreur, et une ou deux zones de saisie pour entrer le nom et prénom. Cette boite de dialogue pourrait être appelé par une valeur précise dans la cellule de la colonne « D » (SC par exemple) ?
Dans mon exemple la valeur de la cellule « D6 » n’est pas reconnu et a pour conséquence d’afficher dans la cellule « F6 » "Numéro d'adhérent inconnu…". Dans ce cas si on remplace le contenu de « D6 » par « SC » ne pourrait-on pas afficher une boite de saisie (InputBox, je crois) avec un texte libre et deux champs, un pour le nom l’autre pour le prénom, qui serait ensuite inscrit dans la cellule « F6 » en respectant la syntaxe des champs de la colonne « F ».
Si cela est possible vous serez t il possible de me proposer une macro que je pourrais utiliser.

Ci-dessous un lien pour un fichier exemple.

https://www.cjoint.com/?kmjOq1ZC8K

Désolé d'avoir été aussi long mais je veux être clair...
En vous remerciant par avance.
Cordialement.
Mistral
Configuration: Windows XP Internet Explorer 7.0

24 réponses

Résumé de la discussion

Problème rencontré dans Excel : RECHERCHEV renvoie #N/A lorsque la valeur de référence n’est pas trouvée, et l’utilisateur souhaite remplacer ce message d’erreur par un texte plus parlant et utilisable dans la cellule. Des solutions existent en utilisant ESTERREUR ou IFERROR pour afficher un message personnalisé comme « Numéro d’adhérent inconnu », et certains proposent une macro VBA avec InputBox déclenchée par une valeur dans la colonne D. D’autres échanges évoquent des variantes telles que l’ouverture conditionnelle d’un fichier texte ou l’utilisation d’une boîte de dialogue InputBox pour saisir le nom et le prénom puis écrire le résultat dans la colonne F.

Bobot (l’IA à votre service)
  1. Contributeur
    bonjour

    Comme tu utilises les logiciels les moins aux normes, il ne devrait pas y avoir de souci pour les autres.

    J'ai vu beaucoup plus d'incompatibilités dans l'autre sens.
    0
    1. Contributeur
      bonjou

      Il doit pouvoir être trouvé même s’il n’est pas dans le même répertoire.

      Ceci est une utopie car si tu lances une recherche dans tous les répertoires de ta machine (je sais faire) tu vas être obligé de commander une cargaison d'anis pour faire patienter l'utilisateur qui aura supprimé par mégarde le fichier.

      Si tu étais sous Linux, la recherche tous azimuts, serait acceptable mais sous windows c'est une procédure beaucoup trop lourde et le plus judicieux est de trouver le fichier dans le répertoire ou un sous-répertoire.

      la compatibilité avec les différents navigateurs

      Je ne vois pas ton problème car il faudra que le destinataire ait excel ou un logiciel compatible pour lire ta feuille mais en aucun cas c'est le navigateur qui va la faire fonctionner.
      0
      1. Re,

        Tu me conseilles donc de conserver le classeur Excel et Listaut dans le même répertoire pour simplifier, et rendre plus rapide, la recherche. Personnellement cela me convient très bien mais si tu savais le nombre de dépannage que j’ai fait par téléphone parce que les gens ne respect pas les consignes d’utilisation. Ca me convient d’autant plus que ça fonctionne comme ça.
        Je vais donc reprendre cette macro pour faire en sorte qu’elle fonctionne parfaitement que l’on ouvre d’abord Excel puis le classeur par Fichier/Ouvrir ou qu’on l’ouvre par un double clic directement sur le nom de classeur sans ouvrir Excel avant

        Il est évident que l’utilisateur aura Excel. Mes interrogations sont sur la fiabilité de cette fonction si j’utilise :

        Sub EnvoiMail()
        Worbooks ("Bdx_2010") . SendMail Recipients:="jean.petit@orange.fr", Subject:="Test envoi Bdx", ReturnReceipt:=True
        End Sub

        Es-ce que cela fonctionnera avec tous les navigateurs et chez tous les FAI ?
        Personnellement j’utilise Internet Explorer 8 et Outlook Expresse 6 et ça fonctionne bien. Mais pour les autre, je ne sais pas. Je me fais peut être un cinéma tout seul…
        En tout cas mille merci à toi et je te tiens au courant.
        Cordialement
        Mistral
        0
    2. Contributeur
      bonjour

      Comme c'était imprécis au départ je t'avais donné 2 possibilités (choix ou non) si tu utilises les 2 en même temps tu ne peux pas être satisfait : le code de ce matin est complet sauf à cause de ceci :

      J’ai déplacé mon fichier « Listaut » directement sous la racine du disque

      Ceci ne me parait pas une heureuse décision dans la gestion du disque mais c'est toi qui voit.

      Donc cela devient :
      If Dir(C:\LISTAUT.txt") <> "" Then
              Workbooks.OpenText Filename:= "C:\LISTAUT.txt", Origin:=xlWindows, _
              StartRow:=1, DataType:=xlFixedWidth, FieldInfo:=Array(Array(0, 1), Array(2, _
              1), Array(6, 1), Array(10, 2), Array(40, 2), Array(70, 1), Array(71, 1), Array(75, 2), Array _
              (104, 1)), TrailingMinusNumbers:=True 
      Else
             msgbox "erreur fichier C:\LISTAUT.txt absent"
      End If


      Pour sauvegarder ta feuille, je te suggère de créer une fonction pour le faire qui pourra être appelée depuis n'importe quelle feuille :
      Public Sub sauve_feuille(nom)
      Dim chemin As String
          Application.ScreenUpdating = False
          chemin = ActiveWorkbook.Path & "\" & [nom_sauvegarde].Value & ".xls"
          Sheets(nom).Copy
          Application.DisplayAlerts = False
          ActiveWorkbook.SaveAs chemin
          ActiveWorkbook.Close
          Application.DisplayAlerts = True
          Application.ScreenUpdating = True
      End Sub
      

      Ce module suppose que tu as donné un nom "nom_sauvegarde" à la cellule où tu as mis ton nom de sauvegarde.

      Pour faire la sauvegarde de n'importe quelle feuille, tu mets dans ton code simplement :
      sauve_feuille ("Données") ' nom de la feuille à sauvegarder
      ou
      sauve_feuille (ActiveSheet.Name)
      

      Comme tu disais vouloir sauvegarder en désactivant la feuille, la seconde solution parait adaptée.
      0
      1. Bonjour Gbinforme,

        Quand je disais hier :
        J’ai déplacé mon fichier « Listaut » directement sous la racine du disque.
        D’abord je tiens à préciser qu’il ne s’agit pas du disque « C » et qu’en suite que j’ai fait cette opération pour vérifier que le fichier Listaut était bien trouvé, même s’il ne se trouve pas dans le même répertoire.
        Hors, avec le code que je t’ai communiqué hier la MAJ ne se fait pas car Listaut n’est pas trouvé et il y a une boîte de dialogue qui s’ouvre pour demander le chemin. De plus, dans cette bôite de dialogue, le nom Listaut apparaît dans la case Type de fichier alors que celle de Nom de fichier est vide ?
        Je crois qu’il est peut être utile de repréciser les choses :
        - La mise à jour de Listaut se lance depuis la feuille Menu du classeur. Elle doit se faire en un seul clic de souris, sans aucune intervention et de façon invisible à l’écran.
        - Listaut est un fichier Txt. Il porte toujours le même nom et il doit être mis en forme pour être utilisable. Il doit pouvoir être trouvé même s’il n’est pas dans le même répertoire.
        - Quand Listaut.Txt est ouvert et mis en forme la totalité de la feuille est copiée sur une feuille du classeur d’où a été lancé la MAJ.
        - Une seule boîte de dialogue à la fin pour dire que le MAJ est terminée.
        Je sais que je te demande beaucoup et que tu es peut être exaspéré par toute mes sollicitations mais s’il te plait encore un petit effort pour régler ce problème et on en aura terminé.

        Concernant la sauvegarde d’une feuille j’y suis arrivé et ça fonctionne plutôt bien. J’ai créé deux macros, une pour les bordereaux l’autre pour les étiquettes. Elles sont chacune rangée dans un module différent et j’ai utilisé, dans chaque une d’elle « Select case » pour traiter les différents concours.
        Actuellement je suis sur l’envoi par Internet d’une feuille. J’avance bien et la seule chose sur la quelle j’ai des doutes c’est la compatibilité avec les différents navigateurs. On verra bien.
        En tout cas je ne te remercierais jamais assez pour ton aide précieuse.
        Cordialement
        Mistral
        0
    3. Contributeur
      bonjour

      Tu n'as pas l'air d'avoir vu ceci que je complète :

      ou si tu es toujours dans le même répertoire

      If Dir(ActiveWorkbook.Path & "\LISTAUT.txt") <> "" Then
              Workbooks.OpenText Filename:=ActiveWorkbook.Path & "\LISTAUT.txt", Origin:=xlWindows, _
              StartRow:=1, DataType:=xlFixedWidth, FieldInfo:=Array(Array(0, 1), Array(2, _
              1), Array(6, 1), Array(10, 2), Array(40, 2), Array(70, 1), Array(71, 1), Array(75, 2), Array _
              (104, 1)), TrailingMinusNumbers:=True 
      Else
             msgbox "erreur fichier  LISTAUT.txt absent"
      End If


      j’ai scindé ta proposition en deux

      C'est bien ainsi qu'elle était formulée : puis pour revenir :

      le nom du classeur sera le contenu d’une cellule (W,Y)

      C'est-à-dire, quelle cellule précisément ?
      Que la cellule est une formule ou non n'a pas d'importance.
      S'il y a 2 classeurs il faut 2 noms : rajouter le nom de la feuille ?
      1
      1. Merci pour ta rapidité.
        J’ai inséré ce qui suit :

        Dim fich As Variant
        fich = Application.GetOpenFilename("LISTAUT.txt,*.txt")
        If fich <> False Then
        If Right(fich, 10) = "LISTAUT.txt" Then
        Workbooks.OpenText Filename:=fich
        End If
        End If

        If dir(ActiveWorkbook.Path & "\LISTAUT.txt") <> "" Then
        Workbooks.OpenText Filename:=ActiveWorkbook.Path & "\LISTAUT.txt", Origin:=xlWindows, _
        StartRow:=1, DataType:=xlFixedWidth, FieldInfo:=Array(Array(0, 1), Array(2, _
        1), Array(6, 1), Array(10, 2), Array(40, 2), Array(70, 1), Array(71, 1), Array(75, 2), Array _
        (104, 1)), TrailingMinusNumbers:=True
        Else
        MsgBox "erreur fichier LISTAUT.txt absent"
        End If

        J’ai déplacé mon fichier « Listaut » directement sous la racine du disque et quand je lance la macro d’abord j’ai une fenêtre « Ouvrir » qui s’ouvre et ça je ne le souhaite pas. De plus le nom « Listaut » apparaît dans la case « Type de fichier » et non pas dans celle du « Nom de fichier ».
        J’ai essayé de remplacer la variable dir par fich mais sans résultat.

        La cellule qui contiendra le nom du classeur sera par exemple la cellule Z1 de la feuille Menu.
        Le contenu de la cellule sera variable selon la feuille à copier je pense donc que l’on peut utiliser la même cellule. Par contre la feuille copiée gardera son nom d’origine.
        Cordialement
        Mistral
        0
    4. Contributeur
      bonjour

      Workbooks.OpenText Filename:= _"LISTAUT.TXT"

      Tu peux remplacer cela par ceci qui te permet de rechercher le fichier sur n'importe quel répertoire
      Dim fich As Variant
      fich = Application.GetOpenFilename("LISTAUT.txt,*.txt")
      If fich <> False Then
          If Right(fich, 10) = "LISTAUT.txt" Then
              Workbooks.OpenText Filename:=fich
          End If
      End If

      ou si tu es toujours dans le même répertoire
      If Dir(ActiveWorkbook.Path & "\LISTAUT.txt") <> "" Then
              Workbooks.OpenText Filename:=ActiveWorkbook.Path & "\LISTAUT.txt"
      Else
              ' erreur
      End If
      


      j’utilise : Windows("Création bordereaux et d étiquettes V.8.xls").Activate.

      Il faut faire plutôt :
      Dim courant As String
      courant = ActiveWindow.Caption 
      
      puis pour revenir :
      Windows(courant).Activate
      


      Je regarde le "nouveau" mais cela va être très difficile de sauvegarder 2 feuilles.
      Tu devrais plutôt faire 2 classeurs avec une feuille, car là ce serait plus simple à gérer en transparent :
      j'attends ta réponse.
      0
      1. Bonjour « gbinforme »,

        Je reviens après un long silence lié à des problèmes familiaux.

        J’ai essayé d’inclure les propositions que tu m’as faites dans ton dernier message mais là je rencontre deux problèmes :
        - 1 – Je ne souhaite pas voir s’afficher une boîte de dialogue lors de l’ouverture du fichier « Listaut ». Je tiens à préciser qu’au début de la macro j’ai Application.ScreenUpdating = False pour bloquer le rafraîchissement de l’écran mais là c’est sans effet.

        - 2 – Dans ma macro pour l’ouverture de « Listaut » je ne me contente pas que d’ouvrir le classeur, je fais aussi une mise en forme des colonnes et j’utilise pour cela :
        Workbooks.OpenText Filename:= _
        "LISTAUT.TXT", Origin:=xlWindows, _
        StartRow:=1, DataType:=xlFixedWidth, FieldInfo:=Array(Array(0, 1), Array(2, _
        1), Array(6, 1), Array(10, 2), Array(40, 2), Array(70, 1), Array(71, 1), Array(75, 2), Array _
        (104, 1)), TrailingMinusNumbers:=True

        avec ta proposition j’ouvre bien le classeur (avec l’affichage d’une boîte de dialogue) mais je ne parviens pas à y ajouter la mise en forme des colonnes. Et cette mise en forme m’est indispensable

        Pour la sortie je pense avoir compris le principe mais j’ai scindé ta proposition en deux et j’ai mis au début de ma macro :
        Dim courant As String
        Courant = AcriveWibdows.Caption
        et plus loin, en lieu et place de Windows("Bordereaux_et_etiquettesV_7.xls").Activate, j’ai mis Windows(courant).Activate

        Dans ta dernière réponse tu me disais :
        Je regarde le "nouveau" mais cela va être très difficile de sauvegarder 2 feuilles. Tu devrais plutôt faire 2 classeurs avec une feuille, car là ce serait plus simple à gérer en transparent : j'attends ta réponse.
        Ce n’est pas un problème que de faire deux classeurs avec chacun une feuille. Par contre chacune des feuilles doit conserver son nom d’origine et le nom du classeur sera le contenu d’une cellule (W,Y) qui sera elle-même le résultat d’une fonction « Concatener ».
        Je continu de chercher mais je crois que ton aide me sera la bien venue.
        Merci d’avance.
        Mistral
        0
    5. Contributeur
      bonjour

      Sur le second point ça marche effectivement quand on valide une cellule de la colonne D, là le curseur vient bien sur la cellule de la colonne C de la ligne juste en dessous.
      Serait-il possible d’avoir la séquence suivante :

      Cellule C1 « Entrée »==>Cellule D1 « Entrée » ==>
      Cellule C2 « Entrée » ==> Cellule D2 « Entrée » ==>
      Cellule C3 « Entrée » ==> Cellule D3 « Entrée » …


      Où est le hic car tes 2 formulations ne font-elles pas la même fonction ?

      Cela reviens à faire voyager le curseur en zigzag entre les colonnes C & D

      Pour obtenir cela, il faut n'autoriser que la saisie en colonnes C & D et utiliser la touche tab pour saisir au lieu d'entrée.

      Y a t il moyen de simplifier ou d'ameliorer ce classeur ?

      Il faudrait connaitre l'environnement d'utilisation pour porter un jugement mais il m'a l'air de fonctionner.

      Je n'ai pas spécialement regardé dans toutes les options car je ne connais pas les finalités qui ne me regardent d'ailleurs absolument pas. Dans ces cas là je ne vois que le côté technique et je serais incapable de te dire ce qu'il y a sur les logos ou autre comme je ne vois pas la pub qui défile autour du stade quand je regardes un match.
      0
      1. Bonjour,

        C’est encore moi, soit avec des petits soucis de fonctionnement, soit avec de nouvelles préoccupations.
        -1- J’ai modifié la dernière ligne de la Worksheet en remplaçant sel.Offset(1, -1).Select par sel.Offset(0, 4).Select ce qui m’amène le curseur sur la colonne « H » après avoir validé la saisie de la colonne « D » par la touche TAB. Et là, je passe bien de la C à la D puis à la H avant de revenir à la C toutes les autres cellules étant verrouillées.
        -2- La macro « Listaut » permet de mettre à jour la BD contenu dans la feuille Listaut qui est normalement masquée. Cette MàJ se fait à partir d’un fichier Listaut.txt OBLIGATOIREMENT contenu dans le même répertoire que le classeur. J’ai créé cette macro à l’aide de l’enregistreur de macro. Cette macro permet d’ouvrir un fichier texte, de décomposer et mettre en forme les différentes colonnes et de copier le tout dans le classeur contenant la macro.
        Le premier problème c’est que de cette façon le chemin menant à ce fichier à ouvrir est en dur dans la macro et qu’ainsi cela fonctionne chez moi mais sûrement pas chez toi. Pas bon ! J’ai donc remplacé ce chemin par l’instruction : Workbooks.OpenText Filename:= _"LISTAUT.TXT", Origin:=xlWindows, _etc,etc. Cela semble fonctionner mais es-ce la meilleure solution ?
        Le second soucis est que pour réactiver le classeur de départ, pour copier la feuille créée j’utilise : Windows("Création bordereaux et d étiquettes V.8.xls").Activate. Là le problème est que si le nom du classeur change la macro ne fonctionne plus. J’ai pu le vérifier en passant de la V.7 à la V.8. Là je crois qu’il faudrait pouvoir rappeler le classeur contenant la macro de MàJ. Je n’y suis pas arrivé.

        Maintenant du nouveau.

        -1- Une fois un concours renseigné je souhaiterais pouvoir créer un nouveau classeur (classeur cible) en copiant dans celui-ci deux feuilles (feuilles bordereau et étiquettes d’un concours) du classeur d’origine (classeur source). Ce classeur cible sera sauvegardé dans le même répertoire que le classeur source avec un nom contenu dans une ou deux cellules. L’enregistrement doit être totalement transparent pour l’utilisateur. Il pourrait se faire en insérant un code supplémentaire à la macro « Retour Menu » par exemple. Cette opération devant se dérouler sans afficher de fenêtre et sans aucune confirmation de la part de l’utilisateur. Le classeur cible pourra être sauvegardé plusieurs fois lors d’une même session sans confirmation également. J’ai essayé avec l’enregistreur de macro mais je n’arrive pas à m’affranchir de différentes fenêtres et je me retrouve avec le même problème de chemin que dans Lsitaut ci-dessus.
        -2- On ne ma l’a pas encore demandé mais je sens la chose arriver au galop, alors je prends un peu les devant.
        Voilà si je souhaite envoyer une feuille du classeur source par Internet à une adresse contenu dans une cellule A d’une feuille B. Cette feuille peut être la seule d’un un nouveau classeur ou même le classeur crée en «1» ci-dessus auquel on aura supprimé la feuille étiquette. Les recherches que j’ai fait sur Internet me laisse penser que c’est possible mais assez complexe car :
        - Cette procédure doit tenir compte de plusieurs logiciels de messagerie pour qu’elle soit disponible pour un maximum d’utilisateur.
        - Cette procédure sera lancée depuis un bouton de la feuille Menu et elle devra être la plus transparente possible.
        - La feuille à envoyer contient des liaisons avec d’autres feuilles du classeur, il serait bon de pouvoir les supprimer avant l’envoi.
        Je sais je demande beaucoup mais c’est bientôt Noël et je crois au Père Noël…
        En tout cas si tu n’as pas le temps ou si cela te pose un problème ne te gêne surtout pas pour me le dire car après tout ce que tu as déjà fait pour moi je comprendrais.
        Je profite de cette occasion pour te renouveler toute gratitude et reformuler mille merci.
        Cordialement.
        Misral.
        0
    6. Contributeur
      bonjour

      - Serait-il possible, ...
      - Serait-il possible également


      Je pense qu'en modifiant ainsi ta fin de macro, cela fonctionne.
                  sel.Value = ""
                  sel.Offset(0, -1).Value = ""
                  sel.Offset(0, -1).Select
          Else
                  sel.Offset(1, -1).Select
          End If
          End If
      End Sub
      
      0
      1. Bonjour,

        C’est presque ça…
        Sur le premier point, lorsqu’on saisi un N° inconnu, on efface bien les cellules des colonnes C & D. C’est bon.!

        Sur le second point ça marche effectivement quand on valide une cellule de la colonne D, là le curseur vient bien sur la cellule de la colonne C de la ligne juste en dessous.
        Serait-il possible d’avoir la séquence suivante :

        Cellule C1 « Entrée »==>Cellule D1 « Entrée » ==>
        Cellule C2 « Entrée » ==> Cellule D2 « Entrée » ==>
        Cellule C3 « Entrée » ==> Cellule D3 « Entrée » …

        Cela reviens à faire voyager le curseur en zigzag entre les colonnes C & D et de cette façon on positionne toujours le curseur sur la cellule à saisir.

        As-tu eu le temps de jeter un œil sur le classeur et le « Bricolage » que j’ai fait ?
        Y a t il moyen de simplifier ou d'ameliorer ce classeur ?
        Cordialement
        Mistral
        0
    7. Contributeur
      bonjour

      Tout à fait.
      0
      1. Bonjour,

        Je m'inqiete sans vraiment m'inquieter mais je m'inquiete quand même un peu!
        Je m'inquiete de savoir si tu as bien reçu les liens vers mon classeur et sa notice.
        Je me doute que cela va te demander un peu de temps, mais ne t'inquiete pas
        j'ai tout mon temps, enfin presque.
        Cordialement
        Mistral
        0
    8. Contributeur
      bonjour

      Il doit me manquer pas mal d'informations car je ne vois pas de gestion de la colonne C dans ta macro et pour moi cette colonne est alimentée par formule.

      Ta macro fait apparemment référence à une structure de feuille que je ne connais pas et comme je n'ai à ma connaissance aucun druide dans mon ascendance, je ne sais pas deviner tes intentions.

      Je souhaiterais te soumettre la totalité de mon classeur

      Tu peux le faire par message personnel en cliquant sur mon pseudo : ainsi tu ne publies rien et cela reste en messagerie personnelle.
      0
      1. Re,

        Tu as tout à fait raison je t’ai fait parvenir le code d’une feuille de mon classeur final.
        La colonne « C » n’est effectivement pas traitée et c’était là le but de mes questions.

        Je vais t’envoyer mon classeur mais je voudrais être sur d’avoir bien compris la procédure : Je mets mon classeur sur « Cijoint » et je mets le lien que j’obtiens dans un message privé, c’est bien ça ?
        0
    9. Contributeur
      bonjour

      Lorsqu’on essaye de saisir une deuxième fois ce N° (expl : 9001) la fenêtre « Adhérent déjà saisie » s’ouvre. A ce moment là je dois pouvoir saisir autant de fois ce N° que précisé par « maxi »

      C'est un peu contradictoire avec ce que tu avais demandé

      ils préféreraient le test sur les présents pour éviter qu’il n’y est plus d’œuvres de saisies

      Mais c'est aussi plus simple si tout le monde est traité de la même façon.

      Je t'ai aussi positionné la cellule de saisie.

      http://www.cijoint.fr/cjlink.php?file=cj200912/cijbwGBLUy.xls

      En attendant le résultat de tes tests et le verdict des instances.
      0
      1. Re,

        Je vais faire des tests.

        C'est vrai que c'est contradictoire par rapport à la premeire demande qui consistait à verifier qu'il ne soit pas possible de saisir plusieurs fois un même N° >9000.
        Du fait que l'on contrôle le N° d'oeuvre par auteur rends obsolete cette premiere demande.
        Moi personnellement le seul test sur les présents me convient très bien et oui tout le monde est traité de la même façon.
        Tu sais aussi bien que moi que ceux qui formule des besoins ne se rends pas compte du travail que cela représente ni de l'importance des modifs que cela implique.

        Je test et je te tiens au courant.
        0
      2. Bonjour,
        J’ai testé le code que tu m’as fourni hier et cela fonctionne très bien.
        Je l’ai intégré dans mon classeur final en l’adaptant aux différents concours et ça marche parfaitement.
        Un ENORME merci à toi !
        Il me reste cependant un petit souci pour un concours. Pour ce concours, et c’est le seul, je dois, en plus du N° d’adhérent (colonne D), saisir un N° de club dans la colonne à gauche (colonne C). Ne peuvent participer que des auteurs à jour de leur cotisation mais je veux contrôler leur légitimité. Pour cela je vérifie si l’auteur est connu ou non et j’affiche une boite de dialogue vbCritical.
        - Serait-il possible, après avoir cliqué sur le bouton « OK » d’effacer également la cellule de la colonne « C » et repositionner le curseur sur cette cellule.
        - Serait-il possible également de faire en sorte que quand je valide la saisie d’une cellule de la colonne « C » le curseur se positionne sur la cellule de la colonne « D » et quand je valide une cellule de la colonne « D » le curseur se positionne sur la cellule de la colonne « C » de la ligne de dessous ?
        Ci-dessous le code que j’utilise :

        Private Sub Worksheet_Change(ByVal sel As Range)
        'Surveille si une saisie sur la quatrième colonne a lieu.
        If sel.Column = 4 Then
        Dim cel As Range, rien As Boolean
        rien = False
        For Each cel In sel.Cells
        If cel.Value = "" Then
        ActiveSheet.Unprotect ("xxx")
        cel.Offset(0, 11).Value = ""
        ActiveSheet.Protect ("xxx")
        rien = True
        End If
        Next cel
        If rien Then Exit Sub
        If sel.Count > 1 Then Exit Sub

        If sel.Value = False Then sel.Value = "": Exit Sub
        If Application.WorksheetFunction.CountIf(Range("D:D"), sel.Value) > [maxi].Value Then
        MsgBox ("Le nombre d’oeuvres autorisé pour cet auteur" & vbCr & "est déjà atteint."), vbCritical, "Concours 2"
        sel.Value = ""
        sel.Select
        Exit Sub
        End If
        'Surveille si une cellule de la colonne 14 contient "Numero d'ahérent inconu".
        If Cells(sel.Row, 14).Value = "Numéro d'adhérent inconnu…" Then
        MsgBox ("Cet auteur n'est pas à jour de sa cotisation!" & vbCr & "Il ne peut donc pas participer à ce concours!"), vbCritical, " Concours 2"
        sel.Value = ""
        sel.Select
        End If
        End If
        End Sub

        D’avance merci.
        Cordialement.
        Mistral

        PS : Je souhaiterais te soumettre la totalité de mon classeur pour avoir ton avis mais je ne peux pas le faire par « Cijoint » à cause des données contenues.
        Comment peut-on faire ?
        0
    10. Contributeur
      bonjour

      Le codage des macros demande beaucoup de rigueur et il faut bien mettre les instructions dans le bon ordre sinon cela ne fonctionne pas correctement. Dans une période aussi douloureuse de la vie, ce n'est pas facile de se concentrer à nouveau sur le quotidien et je te présente toutes mes condoléances.

      Voici ton classeur avec les modifications qui avaient été demandées :

      http://www.cijoint.fr/cjlink.php?file=cj200912/cijpp9nScM.xls
      0
      1. Bonjour,

        Je te remercie de ton soutien et de la sympathie que tu me témoignes dans cette période difficile pour moi et ma famille.

        Je viens de faire un teste avec le fichier que tu as joins à ton dernier message. Quant c’est un auteur connu la surveillance du nombre d’œuvre fonctionne bien. La fenêtre d’avertissement de dépassement s’affiche bien à la saisie de l’œuvre N+1, efface le numéro saisi et repositionne le curseur sur la première cellule vide de la colonne « D ».
        Par contre pour un auteur inconnu il y a un souci. Lorsqu’on saisi pour la première fois un N° inconnu on précise bien qu’il faut un N°> 9000 (expl : 9001) et on demande le nom et prénom. Ca c’est bon mais par la suite deux problèmes :

        -1- Lorsqu’on essaye de saisir une deuxième fois ce N° (expl : 9001) la fenêtre « Adhérent déjà saisie » s’ouvre. A ce moment là je dois pouvoir saisir autant de fois ce N° que précisé par « maxi ». En inhibant les deux lignes suivantes j’arrive à saisir plusieurs fois un N° inconnu mais je n’ai plus de contrôle du Nb « maxi ».
        'sel.Value = Application.InputBox("Saisie d'un numéro non présent", "Adhérent déjà saisi", , sel.Left, sel.Top)
        'Exit Sub

        - Après la saisie complète du premier inconnu il serait bon, si on va au bout de la procédure de saisie que la cellule active soit la première cellule libre de la colonne « D ».

        Je précise que si je saisie directement un autre N° inconnu conforme (expl : 9002) je retrouve un fonctionnement correcte mais je retrouve les deux problèmes mentionnés ci-dessus lorsque j’essaye de le saisir une seconde fois ce N°.

        Je continu de chercher mais si tu as une idée je suis preneur.
        D’avance merci
        Mistral
        0
    11. Contributeur
      bonjour

      ils préféreraient le test sur les présents pour éviter qu’il n’y est plus d’œuvres de saisies

      Pour cela je te propose ceci :
      - tu nommes ta cellule de la feuille menu (D10 je crois) :
        sélection cellule puis saisie du nom dans la zone nom en haut à gauche
      j'ai utilisé "maxi" tu mets le nom de ton choix
      - tu modifies ainsi cette partie de code
          If sel.Value = False Then sel.Value = "": Exit Sub
          Dim nbr As Variant
          nbr = Application.WorksheetFunction.CountIf(Range("D:D"), sel.Value)
          If nbr > 1 Then
              If sel.Value >= 9000 Then
                  sel.Value = Application.InputBox("Saisie d'un numéro non présent", "Adhérent déjà saisi", , sel.Left, sel.Top)
                  Exit Sub
              ElseIf nbr >= [maxi].Value Then
                  MsgBox ("Maximum d’œuvres saisies autorisé déjà atteint par cet auteur")
                  sel.Value = ""
                  sel.Select
                  Exit Sub
              End If
          End If

      Pour faciliter la saisie tu peux rajouter ceci en fin
          sel.Offset(1, 0).Select
      End If
      End Sub
      

      0
      1. Bonjour,

        Désolé de n’avoir pas répondu plutôt mais j’ai été absent dix jours suite au décès de mon papa.

        J’ai quelques difficultés avec ta dernière proposition :
        - Si je rentre pour la seconde fois un N° connu et déjà saisi j’ai la fenêtre « Adhérent déjà saisi » qui s’ouvre alors que le Nb maxi est 4.
        - Si je rentre un adhérent inconnu j’ai la fenêtre demandant le nom qui s’affiche. Je peux donc rentrer des N° <9000.

        Pour mémoire ce que je souhaiterais :
        - Vérifier qu’il n’y a pas plus de saisie sous un même N° que le Nb « maxi » autorisé dans la feuille Menu. Je dois pouvoir saisir le même N° jusqu’à concurrence du Nb « maxi » sans avoir de boîte qui s’ouvre.
        - Si un N° est inconnu il doit être obligatoirement être supérieur à 9000 et ce N° doit pouvoir être saisi un Nb de fois égal à « maxi ».

        J’ai peut être inséré ton code au mauvais endroit mais je dois t’avouer que j’ai du mal à me concentrer. Je te mets un lien vers ma version d’essais.

        - http://www.cijoint.fr/cjlink.php?file=cj200912/cijFz0QQbN.xls

        Dans tous les cas un grand merci à toi pour ton aide.
        Cordialement
        Mistral
        0
    12. Contributeur
      bonjour

      Pour ne contrôler les doubles que sur les absents de la base tu mets
          If Application.WorksheetFunction.CountIf(Range("D:D"), sel.Value) > 1 _
              And sel.Value >= 9000 Then
                  sel.Value = Application.InputBox("Saisie d'un numéro non présent", "Adhérent déjà saisi", , sel.Left, sel.Top)

      Si tu veux vraiment contrôler les présents on rajoutera le test.

      Ce serait bien aussi de pouvoir repositionner la cellule active sur la cellule de la colonne « D »

      il manque un select ici
                  sel.Value = Application.InputBox("Saisie d'un numéro" & vbCr & " > 9000" & vbCr & "ou connu", "Adhérent inconnu", , sel.Left, sel.Top)
                  sel.Select


      je n’arrive plus à figer la position des fenêtres

      Comme la plupart des fenêtres sous windows, lors de la nouvelle ouverture les fenêtres sont positionnées comme à la fermeture. Je ne vois pas quelle manipulation tu effectue pour que le "défaut" du système ne fonctionne pas.
      0
      1. Bonjour,

        Pour le repositionnement du curseur sur la première cellule vide de la colonne « D » j’avais trouvé.

        Pour en avoir discuté avec mes responsables fédéraux, ils préféreraient le test sur les présents pour éviter qu’il n’y est plus d’œuvres de saisies que le nombre autorisé par auteur.

        Peux-tu me venir en aide ?

        Après cela je pense que mon classeur sera au point et je pourrais t’en faire passer une copie pour que tu me donnes ton avis et si tu as encore du temps à me consacrer.

        Dans tout les cas merci d’avance.
        Cordialement
        Mistral
        0
    13. Contributeur
      bonjour

      en utilisant &chr(10)& à la place de & vbCr

      Tu peux si tu veux, c'est exactement la même chose car VBA a créé la constante vbCr pour utiliser le caractère saut de ligne chr(10) et l'on gagne 3 caractères de saisie. Sur un des dialogues, je t'ai mis un exemple d'utilisation sur plusieurs lignes.

      Si j'ai compris toutes tes questions elles devraient être résolues dans la macro de ton fichier test suivant :

      http://www.cijoint.fr/cjlink.php?file=cj200912/cijuoNDu81.xls

      La protection par mot de passe n'est pas en place : à toi de voir car personnellement je suis un peu allergique aux protections de ce genre qui créent plus d'inconvénients que de protections et une protection de la feuille sans mot de passe suffit très souvent.

      Je suis un peu perturbé par le fait que ce code se trouve dans une Worksheet. Je suppose que cette procedure est active tout le temps que la feuille est active. Et que par là même les procedures ne sont peut être pas tout a fait les même.

      Cette macro est une macro événementielle et donc elle se déclenche lorsque Worksheet_Change c'est-à-dire lorsqu'il y a un changement dans la feuille de la même façon que la saisie déclenche un recalcul du classeur. Cela a l'avantage d'être totalement transparent pour l'utilisateur qui n'a pas à cliquer sur un bouton pour l'utiliser et lorsque tu veux faire ces contrôles cela me semble indispensable. La procédure permet de connaitre la ou les cellules concernées par le changement et donc permet un traitement aussi précis qu'on le désire : ainsi elle ne traite que les événements de la colonne D par exemple.
      0
      1. Bonjour,

        Un grand merci à toi pour ce travail. Cela fonctionne bien, même trop bien car on contrôle également les doublons sur tous les N°. Cela ne me gêne pas du tout mais dans ce cas j’ai malheureusement oublié un détail IMPORTANT !

        En effet, j’ai totalement zappé qu’un auteur peut participer avec un nombre déterminé d’œuvre. Ce nombre est variable et il sera fonction du type de concours. Je pense que le plus simple est de fixer ce nombre dans la feuille menu (Cellule D10 par exemple). Il faudrait donc contrôler les doublons d’un même N° qu’au-delà de cette limite. Es-ce possible ?

        Ce serait bien aussi de pouvoir repositionner la cellule active sur la cellule de la colonne « D » de la première ligne libre après avoir appuyer sur la touche « Annuler ».

        J’ai un autre souci, pratique celui là ! Suite à une fausse manip ou j’ai fermé la fenêtre de l’explorateur dans la partie VBA je n’arrive plus à figer la position des fenêtres. Je sais rouvrir les fenêtres dont je me sers le plus mais je n’arrive pas à trouver ou les figer pour retrouver cette configuration à l’ouverture suivante. Ca me gêne dans la mesure ou je suis obligé de repositionner mes fenêtres à chaque fois.

        Je suis vraiment confus de cet oubli et du travail que cela te donne. Toutes mes excuses.

        Cordialement.
        Mistral
        0
      2. Voici le lien vers le fichier :

        http://www.cijoint.fr/cjlink.php?file=cj200912/cijf2s5epk.xls

        Encore un oubli ! Je suis vraiment nul !
        0
    14. Contributeur
      bonjour

      Merci de ton sympathique message.

      En rendant la saisi du N°>9000 obligatoirement numérique

      Il suffit de mettre la colonne en validation avec ce contrôle (menu données / validation).

      vérifier si ce N° n'existe pas déjà

      Pour cela même test que pour > 9000 à placer après : If sel.Count > 1 Then Exit Sub

          If Application.WorksheetFunction.CountIf(Range("D:D"), sel.Value) > 1 Then
                  sel.Value = Application.InputBox("Saisie d'un numéro non présent", "Adhérent déjà saisi", , sel.Left, sel.Top)
                  Exit Sub
          End If
      

      comment peut-on mettre en forme le texte qu'on affiche dans une InputBox

      C'est relativement limité mais pour le renvoi à la ligne tu peux mettre : & vbCr

      pouvoir te soumettre la totalité de mon classeur ... Y a t il une solution ?

      Tu peux le faire en message personnel exceptionnellement en raison de la confidentialité.
      0
      1. Concernant le premier point je pense avoir trouvé une solution acceptable en ajoutant "Type:=1" à la fin de sel.Value = Application.InputBox(...).

        Pour le reste je suis tjr aussi sec!

        J'ai testé "& vbCr" mais je n'obtiens pas l'effet souhaité quand je n'obtiens pas un message d'erreur.
        J'ai essayé avec différents séparateurs, mais visiblement je m'y prends mal.

        Un autre petit problème que je viens de découvrir: quand l'InputBox demandant un N° >9000 s'ouvre le bouton "Annuler" n'est pas traité. J'ai essayé d'ajouter le même traitement que pour les InputBox nom et prénom mais cela ne semble pas fonctionner. Ne peut-on pas rendre obligatoire l'utilisation des boutons de cette bôite et traiter le bouton annuler?

        Je dois avouer que je suis un peu perturbé par le fait que ce code se trouve dans une Worksheet. Je suppose que cette procedure est active tout le temps que la feuille est active. Et que par là même les procedures ne sont peut être pas tout a fait les même.

        Cordialement
        Mistral
        0
      2. Bonjour,

        Concernant le premier point je pense avoir trouvé une solution acceptable en ajoutant "Type:=1" à la fin de sel.Value = Application.InputBox(...) ce qui a pour effet d’attendre une valeur numérique.

        J’ai essayé une bonne partie de la journée d’hier de réaliser le contrôle des N° des non adhérents mais je n’y suis pas arrivé. Je souhaite qui si le N° saisi l’a déjà été
        S’ouvre une autre InputBox expliquant que ce N° existe déjà et invite à le ressaisir.
        Il serait souhaitable de traiter le bouton Annuler de l’InputBox qui demande le N°>9001.
        Une autre petite question : comment faire pour rendre obligatoire l’utilisation du bouton OK d’une InputBox. En effet avec l’InputBox du N°>9000 il arrive quelque fois que l’on puisse valider par « Entrée »…

        J'ai testé "& vbCr" mais je n'obtiens pas l'effet souhaité quand je n'obtiens pas un message d'erreur. J'ai essayé avec différents séparateurs, mais visiblement je m'y prends mal. Je m’y prends d’autant plus mal que je suis arrivé à mes fin mais en utilisant &chr(10)& à la place de & vbCr.

        Merci par avance de votre aide
        Cordialement
        Mistral
        0
    15. Contributeur
      bonjour

      entre les ***, je mettrais simplement ceci en utilisant la fonction par événement
              If sel.Value < 9000 Then
                  sel.Value = Application.InputBox("Saisir un numéro > 9000 ou un adhérent connu", "Adhérent inconnu", , sel.Left, sel.Top)
                  Exit Sub
              End If
      

      S'il s'agissait d'une erreur, il suffit de corriger et sinon en saisissant un numéro correct ou >9000 la procédure se poursuit.

      Cette procédure simple permet donc en plus de corriger une éventuelle erreur de saisie : à toi de dire si c'est ton attente.
      0
      1. Bonjour,

        Tout d'abord je souhaiterais te remercier pour ton aide précieuse et ta rapidité à me répondre.
        Un grand merci !

        Ta proposition me convient parfaitement et fonctionne bien pour qq"un qui comme moi connaît bien ce classeur.
        Cependant pour un "Novice" cela peut poser deux problèmes qui pourrait être résolu si :

        - En rendant la saisi du N°>9000 obligatoirement numérique. En effet rien n'empêche un texte, comme le nom par exemple.

        - Le second il serait bon de pouvoir effectuer un test sur les cellules de la colonne "D" pour vérifier si ce N° n'existe pas déjà. Dans le cas ou il aurait été déjà saisi d'afficher une InputBox indiquant que ce N° a déjà été saisi et inviter à ressaisir le N°.

        D'autre part comment peut-on mettre en forme le texte qu'on affiche dans une InputBox, renvois à la ligne ou mise en caractère gras par exemple.
        Je souhaiterais également pouvoir te soumettre la totalité de mon classeur mais pour des raisons de confidentialité je ne peux pas mettre un lien ici même. Y a t il une solution ?

        En te remerciant par avance.
        Mistral
        0
    16. Contributeur
      bonjour

      Par contre si j'essaye d'effacer un groupe de ligne après une erreur je plante

      Normal car j'étais parti sur de la saisie unitaire et donc faut remplacer par une boucle l'effacement car l'on ne peut pas tester la valeur sur le groupe total.

      http://www.cijoint.fr/cjlink.php?file=cj200910/cijnvqebVO.xls

      Tu vas ainsi apprendre à gérer un groupe de cellules.
      0
      1. Je réponds un peu tardivement mais je ne suis rentré que ce matin de WE.

        Un rapide coup d'oeil me permet de dire que cela semble répondre au problème posé.
        Je vais regarder cela de plus prés et je te tiens au courant. Je vais effectivement regarder
        comment fonctionne cette boucle For/Next.

        J'ai adapté nos précédents échanges dans mon classeur définitif sans problème particulier
        Je vais pouvoir continuer à avancer pour finaliser ce projet.
        Encore un grand merci à toi pour ton aide.
        Cordialement.
        Mistral
        0
      2. Bonjour,

        Il y a quelque temps de cela tu avais répondu à une question en me proposant le code ci-dessous et je reviens vers toi aujourd'hui car il me semble que tu es le plus à même pour me dépanner.

        Private Sub Worksheet_Change(ByVal sel As Range)
        'Surveille si une saisie sur la quatrième colonne a lieu.
        If sel.Column = 4 Then
        Dim cel As Range, rien As Boolean
        rien = False
        For Each cel In sel.Cells
        If cel.Value = "" Then
        ActiveSheet.Unprotect ("xxx")
        cel.Offset(0, 11).Value = ""
        ActiveSheet.Protect ("xxx")
        rien = True
        End If
        Next cel
        If rien Then Exit Sub
        If sel.Count > 1 Then Exit Sub
        'Surveille si une cellule de la colonne 6 contient "Numero d'ahérent inconu".
        If Cells(sel.Row, 14).Value = "Numéro d'adhérent inconnu…" Then

        ***
        MsgBox ("Pour un non adhérent, vous devez saisir un numéro supérieur à 9000"), vbInformation, "Auteur non fédéré."
        sel.Value = "" 'Efface la cellule.
        sel.Select 'Positionne le curseur sur le cellule.
        ***'

        Cells(sel.Row, 12).Value = 1 'Erreur adhérent trouvée.
        'Déclartion des variables
        Dim nom As Variant
        Dim pnom As Variant
        'Ouverture de la boite pour saisir le nom et contrôle.
        nom = Application.InputBox("Nom de l'adhérent", "Saisie du Nom d'un non ahérent.", , 210, 140)
        'Verife si la touche Annuler est activée.
        If nom = False Then
        sel.Value = ""
        sel.Select
        Exit Sub
        End If
        'Ouverture de la boite pour saisir le prénom et contrôle.
        pnom = Application.InputBox("Prénom de l'adhérent", "Saisie du Prénom d'un non adhérent.", , 210, 140)
        'Verife si la toucher Annuler est activée.
        If pnom = False Then
        sel.Value = ""
        sel.Select
        Exit Sub
        End If
        'Mise au format nom propre (1er lettre en majuscule).
        nom = UCase(Left(nom, 1)) & Mid(nom, 2)
        pnom = UCase(Left(pnom, 1)) & Mid(pnom, 2)
        ' Remplacement du contenu de la cellule en erreur.
        ActiveSheet.Unprotect ("xxx")
        Cells(sel.Row, 15).Value = nom & " " & pnom
        ActiveSheet.Protect ("xxx")
        End If
        End If
        End Sub

        Cette procédure fonctione parfaitement bien mais on me demande d'ajouter un contrôle supplémentaire.
        Je souhaiterais insérer dans cette procédure (entre les *** me semble le mieux...) un contrôle qui permettra en cas d’erreur et pour un valeur saisi inférieur à 9000 :
        - Avertir l’utilisateur de saisir obligatoirement un N° d’adhérent supérieur à 9000.
        - Effacer la valeur ayant provoqué l’erreur.
        - Repositionner le curseur sur la cellule de la colonne "D" ressaisir un N° > 9000 et continuer la procédure en ouvrant les deux InputBox pour demander Nom et Prénom.

        Et dans le cas ou le N° saisi dans la colonne "D" est supérieur à 9000 ouvrir les InputBox pour demander Nom et Prénom
        - Poursuivre la procédure
        Par contre, en cas d’erreur et pour une valeur supérieur à 9000 on déroule la procédure sans message.
        J'ai essayé avec une instruction de type IF THEN ELSE mais je ne parviens pas au bon résultat.
        Je seche!
        Merci d'avance pour ton aide.
        Cordialement
        Mistral
        0
    17. Contributeur
      bonjour

      Les modifications que j'ai comprises sur la macro :

      http://www.cijoint.fr/cjlink.php?file=cj200910/cijT1Ue54Z.xls
      0
      1. Re,

        Un grand merci pour votre aide car cela fonctionne comme je le voulais.
        Par contre à l'ouverure du classeur on me propose des mise à jour en fonction d'une liaison avec un autre classeur et je ne sais pas comment faire pour supprimer cet liaison.
        Cela ne gêne rien le fonctionnement mais est gênante dans la mesure ou elle est présente à chque ouverture du fichier.
        D'ou cela peut-il venir?
        Cordialement
        Mistral
        0
      2. Re

        Il demeure un petit problème.
        Si un code erroné est rentré dans la colonne 4, la macro se déroule bien.
        Si j'efface de suite cette valeur tout reviens à zéro.
        Si je continu la saisie tout est OK.
        Par contre si j'essaye d'effacer un groupe de ligne après une erreur je plante avec comme erreur :

        Erreur d'éxecution '13'.
        Icompatibilite de type.

        Comment fair pour éviter cette anomalie et reposionner la cellule active sur le cellule qui contenait l'erreur.
        Cordialement
        Mistral
        0
      3. Contributeur
        @Mistral_13200Bonjour Mistral
        Content de voir que vous avancez!
        Pour le problème de liaison, sans doute des laisons antèrieures parasites qui subsistent.
        essayez:
        Barre d'outil / Edition/ Liaison
        là une fenêtre s'affiche et identifie les liaisons. Vous devriez pouvoir vérifier et supprimer si nécessaire.
        Bonne continuation
        crdlmnt
        0
    18. Contributeur
      bonjour

      La macro ne fait son action que si la modification se fait sur la colonne 4 (D) et cela permet de modifier le nom sans relancer la procédure.
      0
      1. Bonjour,

        J’ai apporté quelques modifications et j’ai un problème que je n’arrive pas à résoudre.
        Pour éviter d’avoir à déprotéger les cellules sans arrêt j’ai créé des colonnes supplémentaires qui seront masquées pour un usage courant. J’effectue aussi un contrôle sur l’année de cotisation.
        Quand on rentre un N° inconnu dans la colonne « D » et qu’on valide par entrée, on lance la macro et la cellule active est celle de dessous. Si on renseigne nom et prénom pas de problème cela fonctionne. Par contre si on annule le nom ou le prénom je souhaiterais que la cellule contenant le N° erroné soit effacée et qu’elle reste active.
        Je souhaiterais aussi qu’après avoir saisi un nom et prénom pour un N° erroné et si on efface ce N° pouvoir effacer la colonne « I ».

        Je vous mets ici un lien vers mon classeur modifié.

        http://www.cijoint.fr/cjlink.php?file=cj200910/cijdRGF92X.xls

        D’avance merci
        Cordialement
        Mistral
        0
    19. Contributeur
      bonjour

      Effectivement j'avais rajouté le contrôle de sortie sans saisie sans le tester et cela va mieux fonctionner ainsi avec une bonne définition des variables :

      http://www.cijoint.fr/cjlink.php?file=cj200910/cijschJeSl.xls
      0
      1. Re,

        Cela fonctionne correctement cette fois. Un grand merci.
        Je vais retravailler mon sujet car d’autres demandes sont arrivées et je vais regarder pour adapter ta macro à ces demandes.
        Si je n’y arrive je reviendrais vers toi, mais je te tiendrais au courant.
        Cordialement
        Mistral
        0
      2. Re,

        Juste une question que j’ai oubliée de vous poser.
        A quoi sert la ligne :

        If sel.Column = 4 Then

        Je pense avoir compris le reste mais là je ne vois pas.
        D’avance merci
        Cordialement
        Mistral
        0
    • 1
    • 2