Aide sur erreur

matiousky

XLDnaute Junior
Bonjour,

J'ai une macro qui affiche et masques des lignes:
Worksheets("Simulation").Rows("135:149").Select
Selection.EntireRow.Hidden = False
Worksheets("Simulation").Range("B137:B138").Select
Selection.EntireRow.Hidden = True

Cependant lorsque je l'utilise il m'apparait le message d'erreur d'éxécution 1004
Impossible de définir la propriété Hidden de la classe Range.

Pourquoi cette erreur et comment la corriger ?
Merci pour votre aide précieuse,
MAT
 

Gorfael

XLDnaute Barbatruc
Re : Aide sur erreur

Bonjour,

J'ai une macro qui affiche et masques des lignes:
Worksheets("Simulation").Rows("135:149").Select
Selection.EntireRow.Hidden = False
Worksheets("Simulation").Range("B137:B138").Select
Selection.EntireRow.Hidden = True

Cependant lorsque je l'utilise il m'apparait le message d'erreur d'éxécution 1004
Impossible de définir la propriété Hidden de la classe Range.

Pourquoi cette erreur et comment la corriger ?
Merci pour votre aide précieuse,
MAT
Salut
C'est parceque tu ne peux pas masquer des objets Range.
Pour masquer afficher les lignes/colonnes, excel met à 0 la hauteur/largeur
Et il ne sait pas paramètrer ainsi chaque cellule individuellement.
Soit tu masques B soit tu masques les lignes 137 et 138
A+
 

fred65200

XLDnaute Impliqué
Re : Aide sur erreur

bonjour,

pas d'erreur chez moi

Worksheets("Simulation").Rows("135:149").Hidden = False
Worksheets("Simulation").Range("B137:B138").EntireRow.Hidden = True

ou

Worksheets("Simulation").Rows("135:149").Hidden = False
Worksheets("Simulation").Rows("137:138").Hidden = True

Tu n'es pas obligé de sélectionner pour agir.
Salutations
 

matiousky

XLDnaute Junior
Re : Aide sur erreur

Merci pour votre aide mais ca ne marche pas chez moi.

Voici mon code global:

Application.ScreenUpdating = False
Sheets("Simulation").Visible = True
Sheets("Simulation").Select
Rows("135:150").Hidden = False
Rows("137:138").Hidden = True
ActiveWindow.SelectedSheets.Visible = False
Sheets("Simulation simple").Visible = True
Sheets("Simulation simple").Select
Rows("55:69").Hidden = False
Rows("56:56").Hidden = True
ActiveWindow.SelectedSheets.Visible = False
Sheets("Paramètres").Select
Application.ScreenUpdating = True

Je démasque et masque des lignes dans 2 feuilles et toujours le même message d'erreur.

Merci de votre aide,
Mat
 

jeanpierre

Nous a quitté
Repose en paix
Re : Aide sur erreur

Bonsoir matiousky, et les autres,

Puisque tu veux obtenir, peut-être qu'en cliquant sur le lien en bas de mon post..... tu pourras, non seulement participer, mais pouvoir faire mieux que de déposer un fichier sur un lien très éphémère, qui n'aidera personne.........

Ce lien n'est rien ou presque rien, seulement l'occasion de pérenniser ce site, et aussi, pour toi, de pouvoir joindre des fichiers plus gros....

Ceci dit, ton fichier beug si l'on clique sur un bouton et le code est protégé, c'est pas good ça.... que veux-tu que l'on fasse.... ????????????????????????
 

Gorfael

XLDnaute Barbatruc
Re : Aide sur erreur

Bonjour,

Je ne comprend pas pourquoi mon code ne marche pas. Souvent je les réalise par enregistrement et là le code bug.

Si jamais vous avez une idée, merci de votre aide.

Bonne journée,
Mat
Salut
Le problème est la propriété select : quand tu utilises une macro apprentissage, tu codifies les opérations que tu effectues sur un module général.
Là, tu exécutes du code à partir d'un module de classe "feuille". Il a des propriétés qui ne sont pas forcément les mêmes.
Dans un tel module tu ne peux ni sélectionner, ni activer une autre feuille.

Dans le code des macros apprentissage, Excel codifie toutes les opérations que tu effectues, quelqu'elles soient. Il faut apprebdre à épurer ce code de toutes les opérations "parasites" (et les SELECT en font généralement parties).
Code:
Private Sub CommandButton1_Click()
    Application.ScreenUpdating = False
    With Sheets("Simulation simple")
    '    .Visible = True
        .Rows("55:69").Hidden = False
        .Rows("56:56").Hidden = True
    '    .Visible = False
    End With
    Application.ScreenUpdating = True
End Sub
Private Sub CommandButton2_Click()
    Application.ScreenUpdating = False
    With Sheets("Simulation simple")
    '    .Visible = True
        .Rows("55:69").Hidden = False
        .Rows("57:58").Hidden = True
    '    .Visible = False
    End With
    Application.ScreenUpdating = True
End Sub
Le code des 2 premiers boutons modifié
Le fait de renommer les boutons permet de savoir lequel fait quoi. Pas aujourd'hui, t'es en plein dedans, donc ça va, mais dans 6 mois ?
Sauf que comme tu as utilisé un nom bateau, tout changement doit faire l'objet d'une réattribution du code (et je passe les références dans le code lui-même). C'est pour ça qu'il faut le faire dès le début.

Un fichier d'essai ne doit pas être protégé : pourquoi se faire suer à demander un mot de passe, alors qu'il y a d'autres sujets ? :p

exemple typique de code inutile :
Code:
Sub Maz2()
    Range("C6,C7,C8,C9,C10").Select
    Range("C10").Activate
    Selection.ClearContents
    Range("C6").Select
End Sub
c'est réellement ce que tu as fait, mais
Code:
Sub Maz2()
    Range("C6,C7,C8,C9,C10").ClearContents
End Sub
suffit (avec Range("C6").activate, si c'est vraiement nécessaire)
 

matiousky

XLDnaute Junior
Re : Aide sur erreur

Salut Gorfael,

Merci pour ton message, c'est vraiment sympa.
Je me permets de te poser plusieurs questions, merci si tu peux y répondre quand tu pourras:
- "macro apprentissage": tu parles de macros faites par enregistrement?
- par réattribution de code de quoi parles-tu ? Quand je dois modifier un code, je fais clic droit sur le bouton et je modifie.
- pourquoi dans le code que tu me proposes tu mets les variables visibles en commentaire ? (Avec un apostrophe devant)
- a quoi sert la variable "Activate" dans le code suivant?
Range("C6,C7,C8,C9,C10").Select
Range("C10").Activate
- j’ai essayé de retravailler mes codes dans ton sens sur un fichier, voici le résultat:
Application.ScreenUpdating = False
With Sheets("Simulation")
.Visible = True
.Rows("135:150").Hidden = False
.Rows("137:138").Hidden = True
.Visible = False
End With
Cependant le code ne marche pas, à la 4ème ligne le message est : « Impossible de définir la propriété Hidden de la classe Range ».
Peut être dois-je réattribuer mon code ?

Peux-tu m’aider ?
Merci à toi,
Mat
 

Gorfael

XLDnaute Barbatruc
Re : Aide sur erreur

Salut matiousky et le forum
- "macro apprentissage": tu parles de macros faites par enregistrement?
Comme je ne sais pas les nommer, c'est comme ça que j'appelle les macro>>Nouvelle Macro

- par réattribution de code de quoi parles-tu ? Quand je dois modifier un code, je fais clic droit sur le bouton et je modifie.
ton bouton s'appelle CommandButton1 quand tu cliques sur "visualiser le code", tu crées une macro : CommandButton1_Click
Si tu renommes ton bouton (ex Cde_A_Click) la macro n'évolue pas et ne fonctionne plus. Si tu "Visualises le code", Excel crée une nouvelle macro (Cde_A_Click) qui est lancée par action sur le bouton où il faut mettre le code de la première macro pour que le fonctionnement reste identique, et supprimer l'ancienne => c'est ce que j'appelle réattribuer le code

- pourquoi dans le code que tu me proposes tu mets les variables visibles en commentaire ? (Avec un apostrophe devant)
Afficher/masquer les feuille n'a pas d'utilités pour le fonctionnement de la macro. Mais comme tu es en construction de macro, en mode pas-à-pas, ça peut être utile. Donc, plutôt que de les supprimer directement, pendant toute la durée de réglage, je les mets en commentaire. C'est plus facile que de les supprimer, et de les recréer si besoin.
De plus, quand je cherche à améliorer mon code, des fois, je supprime des lignes qui semblent inutiles, mais ce n'est pas toujours vrai ^^
Pareil : au lieu de rechercher ce qui était inscrit, je mets les lignes en commentaires, et je crées ma ligne de code "meilleure". c'est plus facile pour faire machine arrière

- a quoi sert la variable "Activate" dans le code suivant?
Range("C6,C7,C8,C9,C10").Select
Range("C10").Activate
Alors "à rien, c'est pour faire avancer le schmilblik".
Excel, dans la macro apprentissage" codifie exactement toutes les opérations effectuées. Hors, sur Excel, quand tu fais une multi-sélection, il y a toujours une cellule active => c'est ce que fait Excel.
Quand tu édites la cellule A1 en entrant"A" => pour valider l'entrée, tu appuies sur <Enter> ce qui te fais passer à la cellule en dessous : ça ne sert à rien, puisque ce que tu as voulu faire, c'est entrer une valeur
La macro apprentissage code
Range("A1")="A" => c'est effectivement ce que tu veux faire
Range("A2").Select => comme avec enter tu es passé à la ligne suivante, tu as bien sélectionné cette cellule, mais ce n'es pas ce qui t'interesses, c'est juste une instruction "parasite" pour du code VBA

- j’ai essayé de retravailler mes codes dans ton sens sur un fichier, voici le résultat:
Application.ScreenUpdating = False
With Sheets("Simulation")
.Visible = True
.Rows("135:150").Hidden = False
.Rows("137:138").Hidden = True
.Visible = False
End With
Cependant le code ne marche pas, à la 4ème ligne le message est : « Impossible de définir la propriété Hidden de la classe Range ».
Peut être dois-je réattribuer mon code ?
Aucune certitude, juste une supposition: Quand tu rend visible une feuille, Excel considère que tu sélectionnes la feuille, puis tu modifie sa propriété "visible". Ores, tu es dans un module de classe "Feuille" qui ne supporte pas que tu t'occupes d'une autre feuille que celle qui lui est liée (c'est pas beau la jalousie !) => dans ce style de problème, je mets en commentaire les instructions, puis je le re-rends actives en supprimant l'apostrophe, jusqu'à ce que je trouve l'instruction qui plante

Toujours le même principe : avant de supprimer, je m'assure que je ne le regretterais pas.
Quand j'ai un fichier de test avec un code qui buggue : je visualise les modification en mettant en commentaire et en finissant la ligne par ----- pour celles à supprimer et par +++++++ pour celles ajoutées, ou des fois par ***** (dépend de mon humeur)

quand j'ai juste le code, ce qui me semble superflu ne l'est peut-être pas => donc, je mets en commentaire, avec à charge de l'utilisateur de tester la justesse de mes modifs : ce qui marche sur un fichier chez moi ne fonctionne pas forcément chez l'utilisateur : dépend de la configuration d'Excel, de l'emplacement du code, des données réelles, etc...

Créer des macros et répondre sur un forum sont souvent différents.
Pour la création, tu maîtrises tout, et comme c'est toi qui connait, tu utlises des codes connus, des habitudes de travail et des natures des données traitées.
pour aider, on a que ce qu'on veut bien donner : est, des fois, c'est pas veaucoup ^^. Et donc, tu dois extrapoler sur ce que tu n'as pas, en pensant que si on ne te les donnes pas, c'est par manque de compétence et pas mauvaise volonté.

A+
 

Discussions similaires

Statistiques des forums

Discussions
312 677
Messages
2 090 812
Membres
104 671
dernier inscrit
Guilbry