Macro excel

Résolu/Fermé
Graphick Messages postés 109 Date d'inscription mardi 16 septembre 2008 Statut Membre Dernière intervention 12 mars 2022 - 20 nov. 2008 à 17:16
Mike-31 Messages postés 18337 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 27 septembre 2024 - 1 déc. 2008 à 15:43
Bonjour,

voila j'ai fait une sorte de petit dessin avec enregistreur de macro.
mon problème est que je veux que quand je coche sur boutonoption1 dans un user form que le dessin apparaisse sur la feuille 2. Présentement jarrive qua le faire apparaitre dans la feuille 1

merci de bien vouloir m'aider. jai essaye avec worksheets ("feuil2").select avant chaque ligne et ca ne fonctionne pas

ActiveSheet.Shapes.AddLine(117#, 232.5, 156#, 232.5).Select
ActiveSheet.Shapes.AddLine(59.25, 293.25, 156#, 293.25).Select
ActiveSheet.Shapes.AddLine(156#, 232.5, 156#, 292.5).Select
Welection.ShapeRange.Flip msoFlipHorizontal
ActiveSheet.Shapes.AddLine(367.5, 240#, 390#, 240#).Select
ActiveSheet.Shapes.AddLine(390#, 240#, 390#, 292.5).Select
ActiveSheet.Shapes.AddLine(312#, 292.5, 390#, 292.5).Select
Selection.ShapeRange.Flip msoFlipHorizontal
End If
A voir également:

29 réponses

Mike-31 Messages postés 18337 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 27 septembre 2024 5 099
20 nov. 2008 à 17:38
Salut,

Sur ton UserForm1 tu as certainement mis CheckBox à cocher alors précéde ton code par

CheckBox1 = True

ActiveSheet.Shapes.AddLine(117#, 232.5, 156#, 232.5).Select
ActiveSheet.Shapes.AddLine(59.25, 293.25, 156#, 293.25).Select
ActiveSheet.Shapes.AddLine(156#, 232.5, 156#, 292.5).Select
'Welection.ShapeRange.Flip msoFlipHorizontal tu as une erreur de saisie au début de ta ligne
ActiveSheet.Shapes.AddLine(367.5, 240#, 390#, 240#).Select
ActiveSheet.Shapes.AddLine(390#, 240#, 390#, 292.5).Select
ActiveSheet.Shapes.AddLine(312#, 292.5, 390#, 292.5).Select
Selection.ShapeRange.Flip msoFlipHorizontal

A+
0
Graphick Messages postés 109 Date d'inscription mardi 16 septembre 2008 Statut Membre Dernière intervention 12 mars 2022 9
20 nov. 2008 à 17:46
En réalité cest des bouton options et mon code fonctionne bien le seule probleme cest que je veux que mon dessin soit sur la feuilles 2 et non la feuille 1 et jusqua present je narrive pas a l'envoyer sur la feuille 2

voici mon code au complet en gras cest le dessin que je veux sur la feuille 2

Private Sub CommandButton1_Click()
If OptionButton1.Value = True Then
Worksheets("Feuil1").Range("H9").Value = "6X8"
Worksheets("Feuil1").Range("C16").Value = "6/12"
Worksheets("Feuil2").Range("A4,A101,A198,A292").Value = "6X8"
Worksheets("Feuil2").Range("X4,X101,X198,X292").Value = "6/12"
Worksheets("Feuil2").Range("A18").Value = "Corniche Avant et Arrière"
Worksheets("Feuil2").Range("A20").Value = "2 MCX 8' 9"""
Worksheets("Feuil2").Range("N18").Value = "Corniche de Côté"
Worksheets("Feuil2").Range("N20").Value = "4 Mcx 48"""
Worksheets("Feuil2").Range("G30").Value = "1""3/4"
Worksheets("Feuil2").Range("I35").Value = "3"""
Worksheets("Feuil2").Range("F40").Value = "3""1/4"
Worksheets("Feuil2").Range("S31").Value = "3/4"""
Worksheets("Feuil2").Range("U35").Value = "3"""
Worksheets("Feuil2").Range("R40").Value = "2""1/4"
ActiveSheet.Shapes.AddLine(117#, 232.5, 156#, 232.5).Select
ActiveSheet.Shapes.AddLine(59.25, 293.25, 156#, 293.25).Select
ActiveSheet.Shapes.AddLine(156#, 232.5, 156#, 292.5).Select
Welection.ShapeRange.Flip msoFlipHorizontal
ActiveSheet.Shapes.AddLine(367.5, 240#, 390#, 240#).Select
ActiveSheet.Shapes.AddLine(390#, 240#, 390#, 292.5).Select
ActiveSheet.Shapes.AddLine(312#, 292.5, 390#, 292.5).Select
Selection.ShapeRange.Flip msoFlipHorizontal

End If
If OptionButton2.Value = True Then
Worksheets("Feuil1").Range("H9").Value = "8X8"
Worksheets("Feuil1").Range("C16").Value = "4/12"
Worksheets("Feuil2").Range("A4,A101,A198,A292").Value = "8X8"
Worksheets("Feuil2").Range("X4,X101,X198,X292").Value = "4/12"
End If
end sub
0
Mike-31 Messages postés 18337 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 27 septembre 2024 5 099
20 nov. 2008 à 17:59
'Worksheets("Feuil1").Range("H9").Value = "6X8" 'as tu besoin de ces deux lignes
'Worksheets("Feuil1").Range("C16").Value = "6/12"

CheckBox1 = True
Sheets("Feuil2").Select

Worksheets("Feuil2").Range("A4,A101,A198,A292").Value = "6X8"
Worksheets("Feuil2").Range("X4,X101,X198,X292").Value = "6/12"
Worksheets("Feuil2").Range("A18").Value = "Corniche Avant et Arrière"
Worksheets("Feuil2").Range("A20").Value = "2 MCX 8' 9"""
Worksheets("Feuil2").Range("N18").Value = "Corniche de Côté"
Worksheets("Feuil2").Range("N20").Value = "4 Mcx 48"""
Worksheets("Feuil2").Range("G30").Value = "1""3/4"
Worksheets("Feuil2").Range("I35").Value = "3"""
Worksheets("Feuil2").Range("F40").Value = "3""1/4"
Worksheets("Feuil2").Range("S31").Value = "3/4"""
Worksheets("Feuil2").Range("U35").Value = "3"""
Worksheets("Feuil2").Range("R40").Value = "2""1/4"
ActiveSheet.Shapes.AddLine(117#, 232.5, 156#, 232.5).Select
ActiveSheet.Shapes.AddLine(59.25, 293.25, 156#, 293.25).Select
ActiveSheet.Shapes.AddLine(156#, 232.5, 156#, 292.5).Select
Selection.ShapeRange.Flip msoFlipHorizontal
ActiveSheet.Shapes.AddLine(367.5, 240#, 390#, 240#).Select
ActiveSheet.Shapes.AddLine(390#, 240#, 390#, 292.5).Select
ActiveSheet.Shapes.AddLine(312#, 292.5, 390#, 292.5).Select
Selection.ShapeRange.Flip msoFlipHorizontal
0
Graphick Messages postés 109 Date d'inscription mardi 16 septembre 2008 Statut Membre Dernière intervention 12 mars 2022 9
20 nov. 2008 à 18:08
merci mike je venais juste de trouver la solution qui est la meme que toi sauf que sheetfeuille2.select est juste avant mon code pour le dessein car oui jai besoin des 2 code feuil 1

mais merci

A+++
0
Mike-31 Messages postés 18337 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 27 septembre 2024 5 099
20 nov. 2008 à 18:10
ET POURQUOI NE PAS SIMPLIFIER LE CODE COMME CECI

CheckBox1 = True
Sheets("Feuil2").Select

Range("A4,A101,A198,A292").Value = "6X8"
Range("X4,X101,X198,X292").Value = "6/12"
Range("A18").Value = "Corniche Avant et Arrière"
Range("A20").Value = "2 MCX 8' 9"""
Range("N18").Value = "Corniche de Côté"
Range("N20").Value = "4 Mcx 48"""
Range("G30").Value = "1""3/4"
Range("I35").Value = "3"""
Range("F40").Value = "3""1/4"
Range("S31").Value = "3/4"""
Range("U35").Value = "3"""
Range("R40").Value = "2""1/4"
ActiveSheet.Shapes.AddLine(117#, 232.5, 156#, 232.5).Select
ActiveSheet.Shapes.AddLine(59.25, 293.25, 156#, 293.25).Select
ActiveSheet.Shapes.AddLine(156#, 232.5, 156#, 292.5).Select
Selection.ShapeRange.Flip msoFlipHorizontal
ActiveSheet.Shapes.AddLine(367.5, 240#, 390#, 240#).Select
ActiveSheet.Shapes.AddLine(390#, 240#, 390#, 292.5).Select
ActiveSheet.Shapes.AddLine(312#, 292.5, 390#, 292.5).Select
Selection.ShapeRange.Flip msoFlipHorizontal
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Graphick Messages postés 109 Date d'inscription mardi 16 septembre 2008 Statut Membre Dernière intervention 12 mars 2022 9
20 nov. 2008 à 19:18
oui je vais le faire comme ca cest plus simple et plus clair

as tu une suggestion pour ceci ca vas avec mon code

Jai plusieurs bouton option dans des user form qui met en page une feuilles excel

je veux que quand je ferme excel meme si ont clic enregistrer que tout s'éfface.

Jai essayé ceci

Option Explicit

Private Sub Workbook_BeforeClose(Cancel As Boolean)
userform1.Optionbutton1.Value = False
userform1.Optionbutton2.Value = False
End Sub
0
Mike-31 Messages postés 18337 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 27 septembre 2024 5 099
20 nov. 2008 à 20:08
Que veux tu effacer, le contenu de ta feuille2 ou la coche de ta CheckBox.

Si comme je le comprends l'optionbouton , ce dernier doit être en corrélation avec une cellule,
Lorsque tu fais un double clic sur une CheckBox de ton UserForm dans le bisual basic editor fenêtre des propriétés contrôlSource tu doit faire référence à une cellule exemple A1
Lorsque tu cocheras la CheckBox correspondante VRAI va s’inscrire en A1
A partir de la c’est facile
Soit à la fermeture

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Range("A1") = False
End Sub

Ou à l’ouverture

Private Sub Workbook_Open()
Range("A1") = False
End Sub

A+
0
Graphick Messages postés 109 Date d'inscription mardi 16 septembre 2008 Statut Membre Dernière intervention 12 mars 2022 9
20 nov. 2008 à 20:26
Ok je comprend bien mais si mon bouton option fait reference à une 30 cellule plus des dessin fait avec des trait??

Peux pas tout simplement dire ferme et ne garde rien de ce que je viens de faire ???

Mais attention je veux garder ma mise en page ( Trame ) sur ma feuilles.

En faite cest exactement le code que nous avons vu plutot que je veux que tout sefface quand je ferme

CheckBox1 = True
Sheets("Feuil2").Select

Range("A4,A101,A198,A292").Value = "6X8"
Range("X4,X101,X198,X292").Value = "6/12"
Range("A18").Value = "Corniche Avant et Arrière"
Range("A20").Value = "2 MCX 8' 9"""
Range("N18").Value = "Corniche de Côté"
Range("N20").Value = "4 Mcx 48"""
Range("G30").Value = "1""3/4"
Range("I35").Value = "3"""
Range("F40").Value = "3""1/4"
Range("S31").Value = "3/4"""
Range("U35").Value = "3"""
Range("R40").Value = "2""1/4"
ActiveSheet.Shapes.AddLine(117#, 232.5, 156#, 232.5).Select
ActiveSheet.Shapes.AddLine(59.25, 293.25, 156#, 293.25).Select
ActiveSheet.Shapes.AddLine(156#, 232.5, 156#, 292.5).Select
Selection.ShapeRange.Flip msoFlipHorizontal
ActiveSheet.Shapes.AddLine(367.5, 240#, 390#, 240#).Select
ActiveSheet.Shapes.AddLine(390#, 240#, 390#, 292.5).Select
ActiveSheet.Shapes.AddLine(312#, 292.5, 390#, 292.5).Select
Selection.ShapeRange.Flip msoFlipHorizontal
0
Mike-31 Messages postés 18337 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 27 septembre 2024 5 099
20 nov. 2008 à 21:07
Sur ta feuille 2 as tu d’autre données à conserver, sinon il serait très facile de supprimer la feuille, de la recréer en la renommant Feuil2.
Ce qui pose problème est l’effacement des lignes qui change de référence à chaque fois

A+
0
Graphick Messages postés 109 Date d'inscription mardi 16 septembre 2008 Statut Membre Dernière intervention 12 mars 2022 9
20 nov. 2008 à 21:26
bon je vais voir ce qui est le mieux

Jaimerais avoir ton avis quelle taile maximal mon classeur excel doit faire pour etre performant

si je te dit 4 mo crois tu que cest trop lourd
0
Mike-31 Messages postés 18337 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 27 septembre 2024 5 099
20 nov. 2008 à 21:37
La taille de ton classeur est fonction de ton système et surtout de ta RAM (mémoire vive)

Il serait bien de traiter chaque problème jusqu'au bout en ce qui concerne l'effacement de ta feuille2 à la fermeture. Si tu n'as pas d'autre données le plus simple serait de supprimer cette feuille sans confirmation et recréer une nouvelle feuille nommée Feuil2, le code est très simple une dizaine de mot tout au plus

A+
0
Graphick Messages postés 109 Date d'inscription mardi 16 septembre 2008 Statut Membre Dernière intervention 12 mars 2022 9
21 nov. 2008 à 00:03
Non comme jai mentionné plus haut ma feuille 2 est une trame donc un modele predefin ou sajoute tout dépendant des bouton option que je clic des couleurs des modèle different etc .......

donc je ne peux pas supprimer la page
0
Mike-31 Messages postés 18337 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 27 septembre 2024 5 099
21 nov. 2008 à 11:04
Salut,

Mets ce code dans ThisWorkbook

Private Sub Workbook_Open()
Sheets("Feuil2").Cells.ClearContents ' cette ligne supprime le contenu des cellule sur la feuille 2
For Each obj In Sheets("Feuil2").Shapes
ActiveWorkbook.Sheets("Feuil2").Shapes(1).Delete ' cette ligne supprime les traits sur la feuille 2
Next obj
End Sub

Ce code effacera le contenu de ta feuille2 à l'ouverture de ton classeur. Si tu le programme à la fermeture, tu auras une confirmation d'enregistrement même si tu viens d'enregistrer. si tu reponds oui l'effacement est opéré si tu réponds non il est ignoré, alors qu'a l'ouverture tout est automatisé. Reste à savoir si tu souhaites contrôler cet effacement dans ce cas le plus simple serait de créer sur bouton sur une feuille différente et de coller ce code dans un module macro

A+
0
Graphick Messages postés 109 Date d'inscription mardi 16 septembre 2008 Statut Membre Dernière intervention 12 mars 2022 9
21 nov. 2008 à 15:51
ca fonctionne mais trop bien car ca enleve les trait mais egalement mes 8 boutonclick qui servfe à valider des opérations.

mais merci je vais pouvoir men sortir avec ca
0
Mike-31 Messages postés 18337 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 27 septembre 2024 5 099
21 nov. 2008 à 15:58
dis moi tous ce que tu as sur cette feuille en détail, et ce que tu veux supprimer ou garder.

Il est difficile de créer un code avec des fracments de données

ou encore mieux mets un modéle avec ces anotations sur le forum que l'on voit

le lien

https://www.cjoint.com/

A+
0
Graphick Messages postés 109 Date d'inscription mardi 16 septembre 2008 Statut Membre Dernière intervention 12 mars 2022 9 > Mike-31 Messages postés 18337 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 27 septembre 2024
25 nov. 2008 à 18:34
Salut Mike

Jai un autre info à te demandé si tu n'est pas trop occupé....

J'utilise les bouton option et j'ai exemple 5 bouton qui a des variante mais qui ont la même base et ensuite jai dautre bouton option que tout change. Donc ce que je fesais c'est a chaque bouton je mettais les variante et à la fin des 5 bouton apres le end if jai mis tout ce qui ne change pas pour les 5 boutons et la je repartais avec un autre bouton option6, le probleme cest que juste avant les bouton option 6 je ne peux pas mettre un end if puisque je l'utilise à la fin du bouton 5. Je cest pas si tu me comprendra donc je vais faire un petit exemple.

Ifoptionbutton1.value=true then
Sheets("feuil2").Select
Range("C16").Value = "4/12"
end if
If OptionButton2.Value = True Then
Sheets("feuil2").Select
Range("C16").Value = "6/12"
end if
ici ce qui reste attribué à cest 2 boutons donc bcoup de code
ET JE VOUDRAIS QUE CE SOIT QUE POUR CEST 2 BOUTON donc mettre un autre END IF
et reparir avec un
Ifoptionbouton3.Value = True Then

as tu une idée de ce que je peux faire ??

Bon je sais que je peux mettre le code a chaque bouton mais comme ca fais bcoup de code ......
0
Graphick Messages postés 109 Date d'inscription mardi 16 septembre 2008 Statut Membre Dernière intervention 12 mars 2022 9
21 nov. 2008 à 16:40
Non Mike parce que jai pris ton code et je l'ai adapté donc tout fonctionne, mes boutons validés je les aies mis dans des userform qui s'ouvre avec la validation Oui dans une boite de dialogue EX: Boite de dialogue : voulez vous ajouter une couleur "oui" userform souvre avec les choix de couleurs, je choisi , je valide et je continue.

Donc je crois bien que ta répondu à mes questions.

Et par la même occasion je vais dire un GROS MERCI a tout ceux qui nous vienne en aide et qui prenne le temps de répondre à nos questions et qui sont patient comme Mike-31, Lermitte, gbinforme et Beaucoup d'autres.

Merci les boys

Jeff
0
Mike-31 Messages postés 18337 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 27 septembre 2024 5 099
25 nov. 2008 à 20:06
Salut,
J'ai du mal à te suivre, mais tu peux également écrire le code comme ci dessous regrouper les end if soit à la fin de ton code ou à la fin de ta condition IF tu peux également dans une condition IF et End If cumuler plusieurs conditions If

Ifoptionbutton1.value=true then
Sheets("feuil2").Select
Range("C16").Value = "4/12"
If OptionButton2.Value = True Then
Sheets("feuil2").Select
Range("C16").Value = "6/12"
end if
end if

tu les écrit comme tu parles exemple si j'ai ça je fais ça ou ça tu peux également utiliser la condition sinon (Else)dans le cas ou la condition If n'est pas rempli

exemple If optionbutton1.value=true then
Sheets("feuil2").Select
Range("C16").Value = "4/12"
Else
Range("X16").Value = "4/12
End if

J'espère que ces conseils te seront utiles

A+
0
Graphick Messages postés 109 Date d'inscription mardi 16 septembre 2008 Statut Membre Dernière intervention 12 mars 2022 9
25 nov. 2008 à 21:20
Je comprend ce que tu me dit mais c'est pas ca mon problème jai un peu de misère à expliquer, je vais essayer encore
Jai des bouton option Exemple 1 a 5 chacun a leur variante mais tous ont aussi des meme valeurs.
La maniere que jai fait Exemple
Ifoptionbutton1.value=True Then
des valeurs que pour lui
end if
Ifoptionbutton2.value=True Then
des valeurs que pour lui
end if
Des valeur pour les 2 bcoup de code
donc ici je dois finir avec quelque chose avant de poursuivre avec dautre bouton moi jai mis EndIf erreur sans bloc if
Ifoptionbutton3.value=True Then
du code
end if
ici je voudrai mettre encore du code pour tout les bouton ( je cest je peux les mettre a chaque bouton mais comme cest environ 50 lignes de code je voudrais les mettre pour tout les bouton.

http://www.cijoint.fr/cjlink.php?file=cj200811/cijw3oQSUL.xls

Tiens voici un exemple tres détaillé entre dans le userform yamaska le boutonclick

Ps si ta dautre idée de la maniere de le faire ne te gêne pas et dit moi

Jeff
0
Mike-31 Messages postés 18337 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 27 septembre 2024 5 099
26 nov. 2008 à 16:23
Salut,

Excuses pour le retard, je viens de regarder ton code qui est déjà pas mal concentré.

Je pense que tu aurais intérêt à scinder tout cela en petites macros plus facile à gérer et surtout plus facile à modifier dans le futur.

Exemple tu crées un module par insertion/module

Puis tu crées une macro Sub Action_Une () à la place d’action un tu mets l’intitulé qui te parle le mieux, mais sans espace
cela va te générer automatiquement la fermeture de ton code par
End Sub

Entre ces deux lignes tu places tout le code correspondant à ta première OptionButton1 et ainsi de suite pour tous les boutons

Private Sub CommandButton1_Click()
If OptionButton1.Value = True Then
Action_Une et dans ton code allégé tu saisis le nom de ta macro
Action_Deux
Ici tu peux reposer une conditionnelle If xxxxxxxx then
Action_trois
Action_quatre etc …

End If
End Sub

De plus tu peux créer d’autre module et les nommer pour faciliter leurs accès plus rapidement
Je modifie ton fichier comme exemple et te l’envoie dans la soirée

A+
0
Graphick Messages postés 109 Date d'inscription mardi 16 septembre 2008 Statut Membre Dernière intervention 12 mars 2022 9
26 nov. 2008 à 19:04
Mike je te joint un autre petit programme. Le principe est simple je choisis un date sur le calendrier je coche les case que je veux imprimer et ca imprime des feuilles de temps pour les employés.

Tout fonctionnais très bien et depuis 2 jours jai une erreur

Tout semple ok donc je comprend pas l'erreur. je te laisse voir ce que tu en pense

Jeff

merci de ta patience

http://www.cijoint.fr/cjlink.php?file=cj200811/cij9eJBspD.xls
0
Mike-31 Messages postés 18337 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 27 septembre 2024 5 099
26 nov. 2008 à 20:52
Salut,

Je ne vois pas d'erreur sur le code, si j'ajoute une feuille et allonge ton code pour la prise en charge de cette feuille vu que tes feuilles sont manquante ce qui est tout à fait normal l'impression marche nickel.

Ce que je n'ai pas pu tester, c'est le calendrier que je n'ai pas sur ma bécane, contrôle à ce niveau là

A+
0
Graphick Messages postés 109 Date d'inscription mardi 16 septembre 2008 Statut Membre Dernière intervention 12 mars 2022 9
26 nov. 2008 à 21:27
oui je sais je ne trouve vraiment pas le problème

voci erreur

erreur execution 1004

la méthode Prinout de la classe worksheet a échoué

comprend pas
0
Graphick Messages postés 109 Date d'inscription mardi 16 septembre 2008 Statut Membre Dernière intervention 12 mars 2022 9
26 nov. 2008 à 21:32
hahaha j'ai trouvé mon problème j'avais masqué les feuilles

donc quand on masque les feuille impossible d'imprimé ????
0