Rechercher : dans
Par :

Gestion d'erreur dans Excel

Dernière réponse le 19 oct 2009 à 14:07:29 Mistral_13200, le 12 oct 2009 à 18:07:28 
 Signaler ce message aux modérateurs

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.

http://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

Meilleures réponses pour « Gestion d'erreur dans Excel » dans :
[Office] Le composant que vous essayez d'utiliser (Erreur 1706) VoirLors de l'ouverture d'un logiciel de la suite Microsoft Office (Excel, Word, Access, PowerPoint), une fenêtre vous indique un des messages suivants : Microsoft Excel n'a pas été installé pour le présent utilisateur. Veuillez exécuter le programme...
Créer rapidement un planning de congés simple [Excel] VoirA1 : Saisir Congés 2008 A2 : Saisir NOM Prénom A3 à Ax : Saisir le nom des x personnes à gérer B1 : Saisir 01/05/08 ; Format/Cellule/Nombre/Personnalisé/Type jjj B2 : Saisir =B1 ; Format/Cellule/Nombre/Personnalisé/Type jj mmm ...
Visual FoxPro VoirPRESENTATION Visual FoxPro (VFP) est un outil très puissant commercialisé par Microsoft depuis 1995. Il comprend un langage de programmation, un moteur de base de données relationnelles et un...
Java - Les exceptions VoirLa nécessité de détecter les erreurs Tout programme comporte des erreurs, même si celui-ci semble fonctionner à merveille. Chaque programmeur essaye de réduire au minimum le nombre d'erreurs, mais toutes les erreurs ne peuvent pas forcément être...
Servlets - Gestion des formulaires VoirIntroduction aux formulaires Les servlets rendent très simple la récupération de données envoyées par l'intermédiaire de formulaires HTML, c'est-à-dire une interface graphique permettant à l'utilisateur de saisir des données. Grâce à la balise...
Gestion des erreurs et exceptions VoirGestion des erreurs et exceptions Les lignes de code que vous avez étudiées jusqu’à présent ne constituaient pas de vrais programmes mais des exemples. Elles ne comprenaient donc aucun traitement des erreurs. Les programmes que vous développerez...

1

gbinforme, le 12 oct 2009 à 23:29:34

Bonjour

Ne serait-il pas préférable de saisir directement une ligne dans ta base à l'aide de ta boite de dialogue ?

Cela corrigerait "l'inconnu" et mettrait à jour pour la suite.
Toujours zen

Répondre à gbinforme

2

Mistral_13200, le 13 oct 2009 à 07:02:33

Le classeur sur lequel je travaille sera utilisé par une bonne centaine de personnes.
La table de référence est issue d'une base de donnée des adhérents à jour de leur cotisation.
Comment dans ce cas avoir une table à jour si chacun ajoute une ligne?
Non cela n'est vraiment pas possible.
En tout cas merci de votre réponse.
Cordialement
Mistral

Répondre à Mistral_13200

3

gbinforme, le 13 oct 2009 à 09:05:23

Bonjour

D'accord, je comprends mieux ta demande et je te propose cette macro à mettre dans la feuille concernée (Bdx).
Dès que tu saisis un adhérent inconnu tu as une fenêtre de saisie pour le nom et le prénom avec les majuscules mises automatiquement en tête.

Private Sub Worksheet_Change(ByVal sel As Range)
If sel.Column = 4 Then
    If Cells(sel.Row, 6).Value = "Numéro d'adhérent inconnu.." Then
        Dim nom As String
        Dim pnom As String
        nom = Application.InputBox("Nom de l'adhérent", "Saisie du nom inconnu", , sel.Left, sel.Top)
        If nom = False Then Exit Sub
        pnom = Application.InputBox("Prénom de l'adhérent", "Saisie du prénom inconnu", , sel.Left, sel.Top)
        If pnom = False Then Exit Sub
        nom = UCase(Left(nom, 1)) & Mid(nom, 2)
        pnom = UCase(Left(pnom, 1)) & Mid(pnom, 2)
        ActiveSheet.Unprotect ("123")
        Cells(sel.Row, 6).Value = nom & " " & pnom
        ActiveSheet.Protect ("123")
    End If
End If
End Sub


Si tu ne veux pas saisir il suffit de faire "echap" ou clic sur "cancel".
La feuille est déprotégée puis protégée.

Si tu veux des précisions n'hésite pas.
Toujours zen

Répondre à gbinforme

4

Mistral_13200, le 13 oct 2009 à 14:20:34

Bonjour,

Tout d’abord merci de vous intéresser à mon cas, mais je rencontre un problème.
Je pense avoir correctement rentré le code. Clique droit sur l’onglet de la feuille concerné, puis clique sur « Visualiser le code », puis choix de Worksheet et enfin choix de Change. J’ai ensuite par copier/coller inséré le code entre les deux lignes.
Mais quand je fais des essais j’ai le message suivant chaque fois que je valide une entrée en colonne « E ».

Erreur d’exécution « 424 ».
Objet requis
Et quand je lance le débogage c’est la ligne « If sel.Column = 4 Then » qui est surlignée.

Et là je bloque car mes connaissances en Vb sont limitées. Dans un de mes messages précédents j’ai mis un lien sur un fichier test. Si vous pouviez éclairer ma lanterne…
D’avance merci
Cordialement.
Mistral

Répondre à Mistral_13200

5

gbinforme, le 13 oct 2009 à 19:12:39

Bonjour

et enfin choix de Change. J’ai ensuite par copier/coller inséré le code entre les deux lignes.

C'est là l'erreur, quand tu es dans la feuille tu fais coller direct sur la feuille vide car je t'ai mis la macro complète.
Toujours zen

Répondre à gbinforme

6

Mistral_13200, le 13 oct 2009 à 19:45:07

Je ne pense pas avoir fait d'erreur car je n'ai pas copié la première et dernière ligne.
J'ai inseré depuis : «If sel.Column = 4 Then » jusqu’à : « End If »


Et comme je l’ai tout à l”heure l’erreur est sur la ligne : « If sel.Column = 4 Then »

Une idée ?

Répondre à Mistral_13200

7

gbinforme, le 13 oct 2009 à 21:47:07

Bonjour

Je ne pense pas avoir fait d'erreur car je n'ai pas copié la première et dernière ligne.

C'est bien là l'erreur et c'est pour cela que cela ne fonctionne pas.

http://www.cijoint.fr/cjlink.php?file=cj200910/cijfnIB4tM.xl­s
Toujours zen

Répondre à gbinforme

8

Mistral_13200, le 14 oct 2009 à 08:34:05

Bonjour,
Un grand merci de vous intéresser à mon problème.
J’ai téléchargé le fichier que vous m’avez joint mais il y a un petit problème. En effet si je rentre des caractères alphabétique dans les boîtes de dialogue je plante avec comme message Erreur d’exécution 13
Incompatibilité de type

Et la ligne en défaut est
If nom = False Then Exit Sub

Par contre si je rente des valeurs numériques cela semble fonctionner.
Comment remédier à ce défaut ?

Si j’ai bien compris ce que vous avez fait :
Si la valeur « Numéro d'adhérent inconnu.. » apparaît colonne 6 on déclare les variables nom et pnom. On ouvre ensuite la boite de dialogue nom on renseigne et on valide par Ok. On test la variable nom et une mise en forme est ensuite faite. Si on annule le nom on mets fin à la macro. Même chose pour la pnom.

Cordialement
Mistral

Répondre à Mistral_13200

9

gbinforme, le 14 oct 2009 à 09:00:49

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.xl­s
Toujours zen

Répondre à gbinforme

10

Mistral_13200, le 14 oct 2009 à 09:44:26

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

Répondre à Mistral_13200

11

Mistral_13200, le 14 oct 2009 à 09:50:43

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

Répondre à Mistral_13200

12

gbinforme, le 14 oct 2009 à 10:25:31

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.
Toujours zen

Répondre à gbinforme

13

Mistral_13200, le 15 oct 2009 à 09:47:30

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.xl­s

D’avance merci
Cordialement
Mistral

Répondre à Mistral_13200

14

gbinforme, le 15 oct 2009 à 10:08:57

Bonjour

Les modifications que j'ai comprises sur la macro :

http://www.cijoint.fr/cjlink.php?file=cj200910/cijT1Ue54Z.xl­s
Toujours zen

Répondre à gbinforme

15

Mistral_13200, le 15 oct 2009 à 14:26:25

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

Répondre à Mistral_13200

17

Vaucluse, le 15 oct 2009 à 17:40:45

Bonjour 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
Demandons nous si nous ne sommes pas seuls à comprendre ce q­ue l'on explique?

Répondre à Vaucluse

16

Mistral_13200, le 15 oct 2009 à 14:54:35

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

Répondre à Mistral_13200

18

gbinforme, le 15 oct 2009 à 20:40:32

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.xl­s

Tu vas ainsi apprendre à gérer un groupe de cellules.
Toujours zen

Répondre à gbinforme

19

 Mistral_13200, le 19 oct 2009 à 14:07:29

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

Répondre à Mistral_13200
Collection CommentÇaMarche.net