cs_marinette22
Messages postés3Date d'inscriptionmercredi 19 novembre 2008StatutMembreDernière intervention13 avril 2010
-
10 avril 2010 à 15:01
TiMiMi830
Messages postés2Date d'inscriptionjeudi 25 mars 2010StatutMembreDernière intervention14 avril 2010
-
14 avril 2010 à 17:12
Développeurs(es) bonjour !
J'ai besoin d'un petit coup de pouce. Je suis une autodidacte en VBA EXCEL.
J'utilise l'enregistreur de macro et modifie le code quand je peux..quand je comprends...bref là je sèche !
Voilà j'ai crée une macro qui exécute un tableau croisé dynamique avec plusieurs filtres en "champs page" dont 2 qui peuvent ne rien renvoyer, l'un recherche une date "31 12 09" et l'autre recherche une valeur texte "absence de justificatif" qui peut ne pas se trouver dans la base de données. Donc forcément dès que ce cas se produit ma macro plante. Ce qui est normal puisque rien n'est trouvé dans la base de données répondant à la condition de mon filtre.
Alors je souhaiterais informer les futurs utilisateurs par un message et mettre fin à l'éxécution de la macro pour éviter ainsi la boîte de dialogue de déboguage...
Je suis certaine que quelqu'un ici va pouvoir m'aider à avancer, progresser et me trouver ce petit code magique et m'expliquer où le placer.
Voici le code de ma macro, en gras l'endroit où la macro bug lorsque mon filtre ne trouve pas la (les) valeurs cherchée(s)
-----------------------------------------
Sub RADNOJTF()
'
' RADNOJTF Macro
' Macro enregistrée le 09/04/2010 par Marine
'
Range("AC1").Select
ActiveCell.FormulaR1C1 = _
"Date de réception du dernier justificatif de scolarité du bénéficiaire"
Cells.Select
Range("Y1").Activate
Cells.EntireColumn.AutoFit
Sheets("LISTE ENFANTS RADIES AU 31 12").Select
ActiveWorkbook.Sheets("LISTE ENFANTS RADIES AU 31 12").Tab.ColorIndex = 45
Sheets("LISTE ADHESION A+R").Select
Range("C1").Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = True
.Orientation = 90
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Columns("C:C").EntireColumn.AutoFit
Columns("C:C").ColumnWidth = 2
ActiveWindow.SmallScroll ToRight:=16
Range("W1").Select
ActiveCell.FormulaR1C1 = _
"Date de réception du dernier justificatif de scolarité du bénéficiaire"
With ActiveCell.Characters(Start:=1, Length:=70).Font
.Name = "Arial"
.FontStyle = "Gras"
.Size = 10
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleSingle
.ColorIndex = 2
End With
Range("W2").Select
ActiveWindow.SmallScroll ToRight:=7
Columns("AB:AB").Select
With Selection
.HorizontalAlignment = xlGeneral
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
With Selection
.HorizontalAlignment = xlCenter
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Selection.ColumnWidth = 6.86
Selection.ColumnWidth = 5.71
ActiveWindow.SmallScroll ToRight:=2
Columns("AD:AF").Select
With Selection
.HorizontalAlignment = xlGeneral
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
With Selection
.HorizontalAlignment = xlCenter
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
ActiveWindow.SmallScroll ToRight:=1
Sheets("LISTE ENFANTS RADIES AU 31 12").Select
ActiveWorkbook.Sheets("LISTE ENFANTS RADIES AU 31 12").Tab.ColorIndex = 44
Sheets("LISTE ADHESION A+R").Select
Sheets("LISTE ADHESION A+R").Select
Sheets("LISTE ADHESION A+R").Name = "LISTE ADHESIONS ACT+RAD"
Sheets("LISTE ENFANTS RADIES AU 31 12").Select
ActiveWindow.SmallScroll ToRight:=13
cs_marinette22
Messages postés3Date d'inscriptionmercredi 19 novembre 2008StatutMembreDernière intervention13 avril 2010 10 avril 2010 à 16:05
Je te remercie pour ta réponse mais c'est de l'aide que j'attends...šEt puis j'ai renvoyé mon post une fois seulement..tu n'es pas obligé de les lire, si ça t'ennuie, va faire un tour ou alors apporte ton savoir, si tu sais.
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 10 avril 2010 à 19:25
Mariette
Il n'y a qu'un post de ta part car j'ai supprimé celui de 14h et quelques qui renfermait exactement le même texte - ne me prends pas pour une bille, même à mon age avancé, je sais encore ce que je fais. En est témoin, le nombre de messages qui te sont attribués : 3 alors qu'on ne peut en lire que 2.
Je te demandais simplement de ne pas reposter une troisième fois, ça ne sert à rien.
Si tu es venue sur ce forum, c'est que tu sais que les questions trouvent souvent leur réponse.
Mais, je te le dis direct, tant de code décourage souvent le membre, même de bonne volonté.
Donc, il serait à mon avis judicieux, si tu dois reposter d'une manière plus efficace :
- que tu réduises le code collé à son strict nécessaire
- que tu utilises le colorateur syntaxique (3ème icone à partir de la droite) permettant une lecture beaucoup plus cool
- que tu tentes d'expliquer mieux ton problème : Tu tentes de faire une manip sur un champ dont tu n'es pas sûr de l'existence --> La question que tu devrais poser, c'est "comment lister les champs disponibles"
Puisqu'il s'agit de données issues d'une feuille excel, la réponse devrait être simple à trouver.
Bref, les membres sont, comme toi, des passionnés, surement aussi des autodidactes et en tout cas, des bénévoles qui font ce qu'ils peuvent pour aider.
Important : il est de bon ton de garder le sourire et de rester courtois(e).
Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
cs_Julien39
Messages postés6414Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention29 juillet 2020371 11 avril 2010 à 08:13
Je n'ai pas lu le code car vraiment c'est impossible, cependant, je pense avoir une réponse pour toi.
Pour t'en sortir, il faut que tu intercepte l'exception, c'est à dire que tu gères toi même l'erreur, car si vb le fait tout seul, il s'arrête.
Alors, maintenant, comment intercepter l'exception ? Et bien de la manière suivante :
Sub Macro()
' La c'est le début de ta macro, tu peux également mettre ce code dans le Sub
' du bouton qui execute la macro s'il y en a un.
On Error GoTo CatchError
' Ce qui signifie que quand il y aura une erreur,
' le code ira lire l'étiquette CatchError
' là, il y aura tout ton code que je n'ajoute pas dans un soucis de lisibilité
NormalExit:
' S'il n(y a pas d'erreur, on quitte et c'est tout
Exit Sub
CatchError:
' S'il y a une erreur, on affiche le message, et on quitte.
MsgBox "Message d'erreur"
GoTo NormalExit
End sub
En espérant avoir répondu à ta question
Julien
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_marinette22
Messages postés3Date d'inscriptionmercredi 19 novembre 2008StatutMembreDernière intervention13 avril 2010 13 avril 2010 à 13:58
Bonjour et merci Julien
Je te prie d'excuser ma réponse tardive mais entre temps j'ai du refaire mon poste (attaque virus : VirusProtector, mortel !!).
Bref, me revoià. Un grand merci à toi pour ce bout de code qui fonctionne bien, toutefois, lorsqu'il y a exception et que mon message d'erreur s'affiche, en cliquant sur le OK de la boîte de dialogue, le message disparaît mais Excel reste ouvert.
Peux-t'on donner à l'utilisateur le choix de quitter Excel ou bien d'enregistrer le fichier en l'état même si celui-ci n'a pas totalement abouti.
cs_Julien39
Messages postés6414Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention29 juillet 2020371 13 avril 2010 à 20:37
Bonjour,
Il n(y a pas grand choses à ajouter, dans le CatchError, tu paeux ajouter une msbox qui te permettra de choisir de quitter ou de ne pas le faire, je ne sais plus tellement comment ca fonctionne et je n'ai pas excel sur cet ordinateur, je vais te dire ce que je sais néamoins, il faudra que tu testes.
Pour demander à l'utilisateur s'il veut quitter et enregistrer sa réponse, tu peux ajouter dans le Catch
Dim choix As Integer
choix = MsgBox("Voulez vous quitter ?", vbYesNo)
et là, je ne sais pas à quoi correspond choix, il doit y avoir une valeur différente selon si on clique sur oui ou non, je te laisse regarder.
Et selon le choix e l'utilisateur tu peux quitter Excel en faisant Workboobs.close
Si tu n(y arrives pas, demande moi, et je testerai ca demain sur un autre ordinateur.