Gestion d'erreur dans Excel

Résolu/Fermé
Mistral_13200
Messages postés
591
Date d'inscription
mardi 5 août 2008
Statut
Membre
Dernière intervention
7 novembre 2021
- 12 oct. 2009 à 18:07
gbinforme
Messages postés
14935
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
- 2 févr. 2010 à 09:56
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

24 réponses

gbinforme
Messages postés
14935
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 616
1 févr. 2010 à 09:35
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
Mistral_13200
Messages postés
591
Date d'inscription
mardi 5 août 2008
Statut
Membre
Dernière intervention
7 novembre 2021
4
1 févr. 2010 à 10:34
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
gbinforme
Messages postés
14935
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 616
12 oct. 2009 à 23:29
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.
0
Mistral_13200
Messages postés
591
Date d'inscription
mardi 5 août 2008
Statut
Membre
Dernière intervention
7 novembre 2021
4
13 oct. 2009 à 07:02
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
0
gbinforme
Messages postés
14935
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 616
13 oct. 2009 à 09:05
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.
0
Mistral_13200
Messages postés
591
Date d'inscription
mardi 5 août 2008
Statut
Membre
Dernière intervention
7 novembre 2021
4
13 oct. 2009 à 14:20
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
0
gbinforme
Messages postés
14935
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 616
13 oct. 2009 à 19:12
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.
0
Mistral_13200
Messages postés
591
Date d'inscription
mardi 5 août 2008
Statut
Membre
Dernière intervention
7 novembre 2021
4
13 oct. 2009 à 19:45
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 ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
gbinforme
Messages postés
14935
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 616
13 oct. 2009 à 21:47
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.xls
0
Mistral_13200
Messages postés
591
Date d'inscription
mardi 5 août 2008
Statut
Membre
Dernière intervention
7 novembre 2021
4
14 oct. 2009 à 08:34
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
0
gbinforme
Messages postés
14935
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 616
14 oct. 2009 à 09:00
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
Mistral_13200
Messages postés
591
Date d'inscription
mardi 5 août 2008
Statut
Membre
Dernière intervention
7 novembre 2021
4
14 oct. 2009 à 09:44
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
Mistral_13200
Messages postés
591
Date d'inscription
mardi 5 août 2008
Statut
Membre
Dernière intervention
7 novembre 2021
4
14 oct. 2009 à 09:50
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
gbinforme
Messages postés
14935
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 616
14 oct. 2009 à 10:25
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
Mistral_13200
Messages postés
591
Date d'inscription
mardi 5 août 2008
Statut
Membre
Dernière intervention
7 novembre 2021
4
15 oct. 2009 à 09:47
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
gbinforme
Messages postés
14935
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 616
15 oct. 2009 à 10:08
bonjour

Les modifications que j'ai comprises sur la macro :

http://www.cijoint.fr/cjlink.php?file=cj200910/cijT1Ue54Z.xls
0
Mistral_13200
Messages postés
591
Date d'inscription
mardi 5 août 2008
Statut
Membre
Dernière intervention
7 novembre 2021
4
15 oct. 2009 à 14:26
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
Vaucluse
Messages postés
26495
Date d'inscription
lundi 23 juillet 2007
Statut
Contributeur
Dernière intervention
8 avril 2022
6 260 > Mistral_13200
Messages postés
591
Date d'inscription
mardi 5 août 2008
Statut
Membre
Dernière intervention
7 novembre 2021

15 oct. 2009 à 17:40
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
0
Mistral_13200
Messages postés
591
Date d'inscription
mardi 5 août 2008
Statut
Membre
Dernière intervention
7 novembre 2021
4
15 oct. 2009 à 14:54
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
gbinforme
Messages postés
14935
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 616
15 oct. 2009 à 20:40
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
Mistral_13200
Messages postés
591
Date d'inscription
mardi 5 août 2008
Statut
Membre
Dernière intervention
7 novembre 2021
4
19 oct. 2009 à 14:07
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
Mistral_13200
Messages postés
591
Date d'inscription
mardi 5 août 2008
Statut
Membre
Dernière intervention
7 novembre 2021
4
2 déc. 2009 à 09:32
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
gbinforme
Messages postés
14935
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 616
2 déc. 2009 à 23:19
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
Mistral_13200
Messages postés
591
Date d'inscription
mardi 5 août 2008
Statut
Membre
Dernière intervention
7 novembre 2021
4
3 déc. 2009 à 07:10
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
gbinforme
Messages postés
14935
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 616
3 déc. 2009 à 09:32
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
Mistral_13200
Messages postés
591
Date d'inscription
mardi 5 août 2008
Statut
Membre
Dernière intervention
7 novembre 2021
4
3 déc. 2009 à 13:56
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
Mistral_13200
Messages postés
591
Date d'inscription
mardi 5 août 2008
Statut
Membre
Dernière intervention
7 novembre 2021
4
4 déc. 2009 à 08:19
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
gbinforme
Messages postés
14935
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 616
4 déc. 2009 à 09:10
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
Mistral_13200
Messages postés
591
Date d'inscription
mardi 5 août 2008
Statut
Membre
Dernière intervention
7 novembre 2021
4
4 déc. 2009 à 10:50
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
Mistral_13200
Messages postés
591
Date d'inscription
mardi 5 août 2008
Statut
Membre
Dernière intervention
7 novembre 2021
4
4 déc. 2009 à 11:07
Voici le lien vers le fichier :

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

Encore un oubli ! Je suis vraiment nul !
0
gbinforme
Messages postés
14935
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 616
4 déc. 2009 à 18:21
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
Mistral_13200
Messages postés
591
Date d'inscription
mardi 5 août 2008
Statut
Membre
Dernière intervention
7 novembre 2021
4
5 déc. 2009 à 08:47
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
gbinforme
Messages postés
14935
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 616
5 déc. 2009 à 09:26
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
Mistral_13200
Messages postés
591
Date d'inscription
mardi 5 août 2008
Statut
Membre
Dernière intervention
7 novembre 2021
4
15 déc. 2009 à 08:48
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
gbinforme
Messages postés
14935
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 616
15 déc. 2009 à 09:32
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
Mistral_13200
Messages postés
591
Date d'inscription
mardi 5 août 2008
Statut
Membre
Dernière intervention
7 novembre 2021
4
16 déc. 2009 à 09:31
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
gbinforme
Messages postés
14935
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 616
16 déc. 2009 à 10:23
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
Mistral_13200
Messages postés
591
Date d'inscription
mardi 5 août 2008
Statut
Membre
Dernière intervention
7 novembre 2021
4
16 déc. 2009 à 10:37
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
Mistral_13200
Messages postés
591
Date d'inscription
mardi 5 août 2008
Statut
Membre
Dernière intervention
7 novembre 2021
4
17 déc. 2009 à 08:56
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
gbinforme
Messages postés
14935
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 616
17 déc. 2009 à 09:28
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
Mistral_13200
Messages postés
591
Date d'inscription
mardi 5 août 2008
Statut
Membre
Dernière intervention
7 novembre 2021
4
17 déc. 2009 à 09:45
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
gbinforme
Messages postés
14935
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 616
17 déc. 2009 à 10:08
bonjour

Tout à fait.
0
Mistral_13200
Messages postés
591
Date d'inscription
mardi 5 août 2008
Statut
Membre
Dernière intervention
7 novembre 2021
4
18 déc. 2009 à 07:47
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
gbinforme
Messages postés
14935
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 616
18 déc. 2009 à 16:30
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
Mistral_13200
Messages postés
591
Date d'inscription
mardi 5 août 2008
Statut
Membre
Dernière intervention
7 novembre 2021
4
18 déc. 2009 à 17:01
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
gbinforme
Messages postés
14935
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 616
18 déc. 2009 à 17:11
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
Mistral_13200
Messages postés
591
Date d'inscription
mardi 5 août 2008
Statut
Membre
Dernière intervention
7 novembre 2021
4
20 déc. 2009 à 09:42
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