Gestion d'erreur dans Excel
Résolu/Fermé
Mistral_13200
Messages postés
634
Date d'inscription
mardi 5 août 2008
Statut
Membre
Dernière intervention
21 mars 2024
-
12 oct. 2009 à 18:07
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 - 2 févr. 2010 à 09:56
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 - 2 févr. 2010 à 09:56
A voir également:
- Gestion d'erreur dans Excel
- Erreur 0x80070643 - Guide
- Liste déroulante excel - Guide
- Formule excel - Guide
- Si et excel - Guide
- Aller à la ligne dans une cellule excel - Guide
24 réponses
gbinforme
Messages postés
14946
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 681
5 janv. 2010 à 21:25
5 janv. 2010 à 21:25
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
ou si tu es toujours dans le même répertoire
j’utilise : Windows("Création bordereaux et d étiquettes V.8.xls").Activate.
Il faut faire plutôt :
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.
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.
gbinforme
Messages postés
14946
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 681
1 févr. 2010 à 22:27
1 févr. 2010 à 22:27
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 :
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 :
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 :
Comme tu disais vouloir sauvegarder en désactivant la feuille, la seconde solution parait adaptée.
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.
Mistral_13200
Messages postés
634
Date d'inscription
mardi 5 août 2008
Statut
Membre
Dernière intervention
21 mars 2024
4
2 févr. 2010 à 08:15
2 févr. 2010 à 08:15
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
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
gbinforme
Messages postés
14946
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 681
2 févr. 2010 à 09:00
2 févr. 2010 à 09:00
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.
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.
Mistral_13200
Messages postés
634
Date d'inscription
mardi 5 août 2008
Statut
Membre
Dernière intervention
21 mars 2024
4
2 févr. 2010 à 09:30
2 févr. 2010 à 09:30
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
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
gbinforme
Messages postés
14946
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 681
2 févr. 2010 à 09:56
2 févr. 2010 à 09:56
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.
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.
1 févr. 2010 à 08:59
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