Problème de lancement de macro a l'ouverure d'un classeur excel [Résolu]

- 21 févr. 2013 à 13:22 - Dernière réponse :
Messages postés
1100
Date d'inscription
mercredi 22 mars 2006
Dernière intervention
15 avril 2018
- 22 févr. 2013 à 11:29
Bonjour a tous,

Donc voilà, j'ai un soucis avec une macro, je m'explique :

Ce que je veux :

A l'ouverture du classeur, une feuille appelée "matrice" sert à la duplication donc celle ci doit être cachée, et afficher une feuille vierge dupliquer via cette matrice... voici le code que j'utilise :

Private Sub Workbook_Open()
    ' A l'ouverture du classeur on masque la Matrice
        Sheets("MATRICE").Visible = False
    'copie de la feuille Matrice
        Sheets("MATRICE").Select
        Sheets("MATRICE").Copy After:=Sheets(3)
    'On renome la nouvelle feuille
        ActiveSheet.Name = "VIERGE"
End Sub


Le problème est qu'il y a une erreur...voici le message :

"erreur d'exécution "1004"
impossible de définir la propriété Visible de la classe Worksheet.
Le debogueur pointe cette ligne :
Sheets("MATRICE").Visible = False


Si quelqu'un aurais une solution... je suis preneur...

Merci à tous,

Christian
Afficher la suite 

Votre réponse

23 réponses

Messages postés
1100
Date d'inscription
mercredi 22 mars 2006
Dernière intervention
15 avril 2018
- 21 févr. 2013 à 14:00
0
Merci
Bonjour,

Je viens de faire quelques tests et il semblerais qu'il faut au minimum 1 feuille visible a ton classeur. Le problème viens peut être de là.

Test :
Private Sub Workbook_Open()
    'copie de la feuille Matrice
        Sheets("MATRICE").Select
        Sheets("MATRICE").Copy After:=Sheets(3)
    'On renome la nouvelle feuille
        ActiveSheet.Name = "VIERGE"
    ' A l'ouverture du classeur on masque la Matrice
        Sheets("MATRICE").Visible = False
End Sub


Tout simplement

Si ça ne fonctionne pas, quel est ta version Excel ?

Amicalement
Commenter la réponse de Polack77
0
Merci
Bonjour Polack77,

Tout d'abord merci pour votre réponse, mais cela ne fonctionne pas, parcontre j'ai un nouveau message d'erreur :

"erreur d'exécution 9"
l'indice n'appartient pas a la sélection

Ma version est office pour mac 2011 ver 14.0.0

Voici la ligne qui contient l'erreur :

Sheets("MATRICE").Copy After:=Sheets(3)


Merci encore,

Cordialement,

Christian
Commenter la réponse de cco86260
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
- 21 févr. 2013 à 17:43
0
Merci
Bonjour,

Pas de Matrice.Select !
Prévoir de ne pas créer la feuille VIEGE si existe déja ==>>

Private Sub Workbook_Open()
    Sheets("MATRICE").Visible = False
    On Error Resume Next
    TOTO = Sheets("VIERGE").Name
    If Err Then
        Sheets("MATRICE").Copy After:=Sheets(3)
        ActiveSheet.Name = "VIERGE"
    End If
    On Error GoTo 0
End Sub

devrait faire l'affaire

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Commenter la réponse de ucfoutu
Messages postés
1100
Date d'inscription
mercredi 22 mars 2006
Dernière intervention
15 avril 2018
- 21 févr. 2013 à 17:45
0
Merci
Ok, alors je pense que le problème vient du 3 (3 voudrais dire que tu insère ta feuille après la 3eme feuille de ton classeur, sans doute que celui ci n'en à que 1 ou 2 au lancement).

Test :
Sheets("MATRICE").Copy After:=Sheets("MATRICE")


arf je n'ai pas le même excel que toi mes tests ne seront bon pas valide dans 100% des cas.

Amicalement
Commenter la réponse de Polack77
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
- 21 févr. 2013 à 17:46
0
Merci
Hep là !
office pour mac 2011

Il est temps d'en parler.
J'ignore si ta version Mac accepte VBA, qui est un langage dérivé de VB, lequel nécessite Windows !

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Commenter la réponse de ucfoutu
Messages postés
1100
Date d'inscription
mercredi 22 mars 2006
Dernière intervention
15 avril 2018
- 21 févr. 2013 à 17:47
0
Merci
Oui ucfoutu à réson c'est beaucoup plus propre éviter les ".select"
surtout que dans ton code cette ligne est totalement inutile

Amicalement
1000 recherches sur Google = 1Km de voiture en CO² (réfuté par Google )
1000 recherches sur Forestle = 100 m² de forêt tropicale sauvé .
Surfez écolo
Commenter la réponse de Polack77
0
Merci
Merci Polack pour ta rapidité et ton efficacité... ça fonctionne, je clique sur mon fichier, il m'ouvre une feuille vierge comme je le voulais... un grand merci...

Je classe ce sujet comme résolu...

Mais tout n'est pas fini, mon projet risque d'être long... car je le fais en essayant d'apprendre VBA... c'est pas évident...

Amicalement,

Christian
Commenter la réponse de cco86260
0
Merci
Bonjour ucfoutu,

Alors pour info, VBA fonctionne bien sous mac office 2011, je pense logique que le language VBA certe pour windows fonctionne sous mac étant donnée qu'il fait par microsoft, il y a même les controle activeX et tout...

Tu as rencontrer des soucis avec office pour mac ?

Cordialement,

Christian
Commenter la réponse de cco86260
Messages postés
1100
Date d'inscription
mercredi 22 mars 2006
Dernière intervention
15 avril 2018
- 21 févr. 2013 à 17:59
0
Merci
Par contre méfie toi ucfoutu si "option explicit" est active ton code vas planter.


Voila ça devrais faire ce que tu veux + rendre de nouveau visible la feuille à la fermeture + impose que les varaibles utilisées soient déclarer
Option Explicit
'"Option Explicit" impose la déclaration ;)

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Sheets("MATRICE").Visible = True
End Sub

Private Sub Workbook_Open()
    Dim TOTO As Worksheet
    Dim cpt As Integer
    
    Sheets("MATRICE").Copy After:=Sheets("MATRICE")
    Set TOTO = ActiveSheet
    
    On Error Resume Next
    TOTO.Name = "VIERGE"
    Do While Err
        Err.Clear
        cpt = cpt + 1
        TOTO.Name = "VIERGE_" & cpt
    Loop
    On Error GoTo 0
End Sub


Amicalement
Commenter la réponse de Polack77
0
Merci
Pour reprendre ucfoutu,

il y a peut quelque différence entre les 2 versions mais jusqu'à présent les macro que j'ai utilisé fonctionne, et à la base elle sont pour windows... et heureusement d'ailler car ce que je suis entrain de faire est pour la societé ou je bosse et il n'ont pas mac, ils ont windows...

mais je n'hésiterais pas a revenir si je rencontre des soucis... mais ça reste du VBA...

Amicalement,

Christian
Commenter la réponse de cco86260
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
- 21 févr. 2013 à 18:09
0
Merci
mais ça reste du VBA

Il est possible que les fonctions de base aient pu être "reprises".
Je vois par contre mal comment tout le VBA de Windows aurait pu l'être, dès lors que certaines fonctions de VBA s'appuient directement sur des fonctions de Windows. Je pense en particulier, par exemple, aux fonctions qui concerneraient le traitement de fichiers textes (ouverture, lecture, écriture ...).
M%ais bon ... je n'ai pas Mac et ne peut donc rien affirmer.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Commenter la réponse de ucfoutu
0
Merci
Complètement d'accord en théorie, mais sachant que les xls sur mac peuvent être enregistrée en version 97-2003 je crois... et là je viens de tester sur un pc winXP et pour l'instant pas de soucis pour la macro au démarrage du fichier...

Après ce n'est qu'un avis...

Amicalement,

Christian
Commenter la réponse de cco86260
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
- 21 févr. 2013 à 22:12
0
Merci
et là je viens de tester sur un pc winXP et pour l'instant pas de soucis pour la macro au démarrage du fichier...

je te crois sur parole en ce qui concerne ce que tu as fait "pour l'instant" ...

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Commenter la réponse de ucfoutu
0
Merci
Dis moi, pourrais tu m'en dire un peu plus sur le code que tu m'as laissé ?

Private Sub Workbook_Open()
    Sheets("MATRICE").Visible = False
    On Error Resume Next
    TOTO = Sheets("VIERGE").Name
    If Err Then
        Sheets("MATRICE").Copy After:=Sheets(3)
        ActiveSheet.Name = "VIERGE"
    End If
    On Error GoTo 0
End Sub


Je debute avec VBA, par exemple : pourquoi TOTO ?

Merci a toi,

Amicalement,
Christian
Commenter la réponse de cco86260
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
- 22 févr. 2013 à 07:11
0
Merci
Si TOTO te gêne change-le don par TITI (c'est son copain).
Plus sérieusement :
relis-moi :
Prévoir de ne pas créer la feuille VIEGE si existe déja ==>>

la ligne :
TOTO = Sheets("VIERGE").Name
provoquera une erreur si la feuille VIERGE n'existe pas déjà
Or, analyse la suite du code ===>> je ne crée cette feuille que si erreur
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Commenter la réponse de ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
- 22 févr. 2013 à 08:12
0
Merci
Je t'ai par ailleurs trouvé cette lecture :
Tapez le texte de l'url ici.
pour faire suite à une partie de notre conversation.
Elle est en anglais, désolé, mais suffisamment compréhensible si tu as quelques connaissances dans cette langue.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Commenter la réponse de ucfoutu
0
Merci
Merci ucfoutu,

Je vais tacher de potasser tout ça, je trouve VBA assez intéressant, mais il faut réellement que j'apprenne... pour l'anglais, je me dépatouille, ça devrait le faire... as tu quelques liens pour les UserForm ? Je voudrais en créer un comportant des boutons... UN = pointage suivant, DEUX convertir en PDF et enregistrer dans un dossier donner... je possède les macros... mais il faut que je mette les mains dans le cambouis...

J'aime bien ton message sur ton profil... il est vrai.. et franc et je vais tacher de respecter ça

Je te souhaite une bonne journée,

Amicalement,

Christian
Commenter la réponse de cco86260
0
Merci
bien chef...

Bon je vais aller dans le monde du travail... et ce we... ecole VBA...

Bonne journée,
Commenter la réponse de cco86260
Messages postés
1100
Date d'inscription
mercredi 22 mars 2006
Dernière intervention
15 avril 2018
- 22 févr. 2013 à 09:51
0
Merci
Maiiissss heeeeee mon code il est parfait et tu me demande même pas des précisions

Sérieusement, vue que tu semble vouloir progresser, j'ai ajouter des commentaires histoire que tu comprenne ce qui est fait :
Option Explicit
'"Option Explicit" impose la déclaration ;)

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    'Ajouter pour que si un excel avec les macros désactivé ouvre ton document 
    '(volontairement ou non), on puisse modifier ta feuille MATRICE
    Sheets("MATRICE").Visible = True
End Sub

Private Sub Workbook_Open()
    Dim TOTO As Worksheet 'La variable qui pointeras vers ta nouvelle feuille (tu la nome comme tu veux)
    Dim cpt As Integer 'Utile pour nommer de façon unique ta nouvelle feuille (voir plus bas ;))
    
    Sheets("MATRICE").Copy After:=Sheets("MATRICE") 'Création de la nouvelle feuille (ça tu savais déjà ^^)
    Set TOTO = ActiveSheet 'Place la nouvelle feuille dans ta variable
    
    On Error Resume Next 'Si une erreur est rencontré alors le code continueras de s’exécuter (habituellement à éviter), il vaux toujours mieux gérer une erreur plutôt que de la supporté
    TOTO.Name = "VIERGE" 'Renomme la feuille
    Do While Err 'Temps qu'une erreur est rencontré 
        Err.Clear 'Suppression de l'erreur
        cpt = cpt + 1 'Incrémentation du compteur. En VBA les variables sont automatiquement initialisées, dans d'autre langage (en C/C++ par exemple) il aurait fallu faire cpt=0 avant le "Do While Err"
        TOTO.Name = "VIERGE_" & cpt 'On renomme la nouvelle feuille en ajoutant le compteur (en résumer si VIERGE existe alors ta nouvelle feuille se nommera VIERGE_1 puis VIERGE_2 jusqu'à trouver un nom disponible)
    Loop 'Retour au "Do While Err"
    On Error GoTo 0 'Désactive le faite du supporter les erreurs
End Sub


Si tu cherche un cour celui ça à l'aire plutôt pas mal (même si j'avoue ne pas l'avoir lut ) :
http://www.excel-pratique.com/fr/vba.php

Amicalement
Commenter la réponse de Polack77
0
Merci
Merci polack77,

Je ne t'avais pas oublié, et te remercie beaucoup pour m'orienter sur le développement VBA, je remercie tout le monde d'ailleur...

Si vous voulez... on peut rester en liens, soit MP ou Mail, et parcontre toute les solution qui me seront apporter seront transformer en tuto sur ce forum... qu'en pensez-vous ?

Amicalement,

Christian
Commenter la réponse de cco86260

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.