Suppression sous condition d'un bouton copié par macro

Bonjour le forum,

Me revoilà avec un problème que je ne sais résoudre seul.. Mes lacunes en VBA me font défaut

Je travaille actuellement sur un calendrier se remplissant automatiquement en fonction de tâches précédemment définies.

Pour rendre la navigation plus simple d'un mois sur l'autre, j'ai créé des boutons (images insérées) précédent et suivant sur mon onglet Modèle (lequel est ensuite dupliqué pour créer les nouveaux mois), avec ces codes :

Sub Image9_Cliquer()

If ActiveSheet.Index > 1 Then
    Sheets(ActiveSheet.Index - 1).Activate
End If

End Sub
'___________________
Sub Image10_Cliquer()

Dim nbsheet
nbsheet = ThisWorkbook.Sheets.Count

If nbsheet > ThisWorkbook.ActiveSheet.Index Then
    Sheets(ActiveSheet.Index + 1).Activate
End If
End Sub

Je souhaite maintenant que le bouton précédent soit supprimé sur la feuille janvier, et le bouton suivant supprimé sur celle de décembre.

Le problème est que je ne sais pas comment "appeler" ces images pour ensuite les supprimer sur mon onglet nouvellement créer.

J'ai tenté le bout de code ci-dessous mais ça plante (sûrement pcq le terme "shapes" n'est pas le bon ?) :

    Worksheets("Modèle").Copy after:=Sheets(ThisWorkbook.Sheets.Count)
    ActiveSheet.Name = nom_onglet
    If moisacreer = "Janvier" Then
        Sheets(nom_onglet).Shapes("Image9").Select
        Seletion.Delete
    ElseIf moisacreer = "Décembre" Then
        Sheets(nom_onglet).Shapes(Image10).Select
        Selection.Delete
    End If

Si quelqu'un a une idée, je suis preneur

D'avance merci !

PS : Les connaisseurs trouveront sûrement ma macro affreuse.. Mais je débute alors soyez indulgents

msg erreur

slt,

une erreur détéctée

code à modifier:

Sheets(nom_onglet).Shapes(Image10).Select

avec

Sheets(nom_onglet).Shapes("Image10").Select

tu fais un test premierement

Bonjour m3ellem1,

Merci pour ta réponse, effectivement ça m'avait échappé ! C'est modifié.

Malheureusement la macro n'a pas le temps d'arriver jusque là puisqu'elle plante ) la ligne

Sheets(nom_onglet).Shapes(Image9).Select

J'ai essayé avec et sans guillemets mais ça ne marche pas.

Je pense qu'il faut passer par autre chose que Shapes, mais je ne suis pas sûr de mon coup

essaie ca:

Sheets(nom_onglet).Shapes("Image9").Delete

enléve

Selection.delete

Toujours le même message d'erreur "L'élément portant ce nom est introuvable".

L'objet change de nom lors de la copie ?

Bonjour,

Un essai ...

  • J'ai renommé les images de la feuille Modèle en (image 1 et image 2).
  • Dans CalendrierV3 du Module1, j'ai désactivé le bout de code qui tentait de traiter décembre et janvier.
  • Dans le UserForm1, j'ai ajouté UserForm_Initialize pour désactiver les cases à cocher des mois existants.
  • Dans ThisWorkbook, j'ai ajouté Workbook_SheetActivate > en sélectionnant un onglet les boutons (image 1 et image 2) se masquent ou s'affichent selon le mois en cours.
  • Je n'ai pas testé le passage d'une année à l'autre, exemple : on est en décembre et on ajoute janvier.

ric

Bonjour,

Désolé, je n'ai pas remarqué que tu annonces dans ton profil : Excel 2003.

Si ça ne fonctionne pas, je vérifierai sous Excel 2003.

ric

Bonjour,

Un essai ...

  • J'ai renommé les images de la feuille Modèle en (image 1 et image 2).
  • Dans CalendrierV3 du Module1, j'ai désactivé le bout de code qui tentait de traiter décembre et janvier.
  • Dans le UserForm1, j'ai ajouté UserForm_Initialize pour désactiver les cases à cocher des mois existants.
  • Dans ThisWorkbook, j'ai ajouté Workbook_SheetActivate > en sélectionnant un onglet les boutons (image 1 et image 2) se masquent ou s'affichent selon le mois en cours.
  • Je n'ai pas testé le passage d'une année à l'autre, exemple : on est en décembre et on ajoute janvier.

ric

Bonjour Ric,

Merci pour cette contribution ! Je suis en train de regarder les modifs que tu as apportées, j'ai plusieurs questions :

  • pour les renommer tu es passée par l'étape Selection à la main et ensuite Selection.Shapes.Name = XXX ? Ou quelque chose comme ça en tout cas ? Car j'avais essayé mais sans grand résultat ahah
  • Dans le code que tu as écris dans ThisWorkbook, je ne comprends pas la condition If Month(Date) = Month(Sh.Name) Then ...
Peux-tu m'éclairer stp ?

Encore merci pour ton aide, le code dans UserForm_Initialize est super, je n'y avais pas pensé

Je testerai demain les boutons précédents et suivants, il faut que je file.

Bonne soirée !

EDIT :

OUPS ! Je suis passé sur 2013 depuis.. Je modifie ça de suite, merci !

Bonjour,

... pour les renommer, tu es passée par l'étape Selection à la main ...

Pour les deux images de la feuille, "Modèle", oui, à la main. Clique sur l'onglet Développeur > bouton "Mode Création" > bouton droit sur l'image > le nom de l'image apparaît à gauche de la "Barre des formules" > on peut renommé là.

Ensuite, lors de la création des feuilles, les images se nomment "Image1" et "Image 2" sur chacune des feuilles.

... Dans le code que tu as écris dans ThisWorkbook, je ne comprends pas la condition If Month(Date) = Month(Sh.Name) Then ...

Peux-tu m'éclairer stp ?

Si le numéro du mois en cours (If Month(Date)) = le numéro du mois du nom de l'onglet (Month(Sh.Name)) > Sh étant la feuille en cours déclaré plus haut (Set Sh = ActiveSheet) ...

Pour tester différents bidules, j'utilise "MsgBox" ... exemple : MsgBox Month(Date) ... ce qui donne le numéro du mois ... il faut écrire "MsgBox Format(Date, "mmm") si on veut le nom du mois.[/quote]

ric

Bonjour le forum, bonjour ric,

Merci pour ces précisions !

J'ai cherché longtemps où modifier ce p***** de nom

Quant à la suite, j'ai testé et modifié légèrement. En fait la visibilité des boutons ne devait pas dépendre du mois en cours, mais uniquement des onglets : Si janvier pas de bouton précédent, si Décembre pas de bouton suivant. Excuse moi j'avais dû mal m'exprimer !

J'ai donc modifié comme ceci :

Private Sub Workbook_SheetActivate(ByVal Sh As Object)

   On Error Resume Next

   Set Sh = ActiveSheet
   If ActiveSheet.Name <> "Notice" And ActiveSheet.Name <> "Modèle" Then
      If Month(Sh.Name) = 1 Then
         ActiveSheet.Shapes.Range(Array("Picture 1")).Visible = False
         ActiveSheet.Shapes.Range(Array("Picture 2")).Visible = True
      ElseIf Month(Sh.Name) = 12 Then
         ActiveSheet.Shapes.Range(Array("Picture 1")).Visible = True
         ActiveSheet.Shapes.Range(Array("Picture 2")).Visible = False
      Else
         ActiveSheet.Shapes.Range(Array("Picture 1")).Visible = True
         ActiveSheet.Shapes.Range(Array("Picture 2")).Visible = True
      End If
    End If
End Sub

Tu m'as été d'une grande aide ric, merci beaucoup !

Je clos le sujet, à bientôt sur le forum

ric

Rechercher des sujets similaires à "suppression condition bouton copie macro"