Macro excel

Résolu/Fermé
Grobibi34 Messages postés 83 Date d'inscription lundi 3 mars 2008 Statut Membre Dernière intervention 29 mai 2008 - 3 mars 2008 à 14:57
Fxbrg Messages postés 710 Date d'inscription samedi 17 mars 2007 Statut Membre Dernière intervention 16 novembre 2013 - 4 mars 2008 à 13:54
Bonjour à tous.
Je suis débutant dans le VBA. Le forum m'a déja apporté pas mal de réponse.
Mais là je bute un peu sur un problème.

En gros j'ai créé un UserForm avec plusieurs CheckBox à l'interieur, à chaque que l'une d'entre elle est cliqué je modifie une variable. Une foix que je clique sur Ok je voudrai que en fonction des variables qui ont était modifié écrire dans une cellule puis celles du dessous etc pour chacune des CheckBox cliqué.

J'èspère avoir était suffisament clair je vous met mon code en dessous si cela peut vous aider.
Merci d'avance!

Private Sub CheckBox2_Click()
If CheckBox2.Value = True Then a = "1"
End Sub

Private Sub CommandButton2_Click()
If a = "1" Then Range("C10") = "8"

Unload Cabine
End Sub
A voir également:

23 réponses

Fxbrg Messages postés 710 Date d'inscription samedi 17 mars 2007 Statut Membre Dernière intervention 16 novembre 2013 199
4 mars 2008 à 10:18
Salut :-)

Si tu n'as pas de ligne en dessous de ce que tu as écrit avec ton premier formulaire, redéfinis r au début de ta deuxième procédure comme ça :

r=Activesheet.Usedrange.rows.count

:-)
1
Fxbrg Messages postés 710 Date d'inscription samedi 17 mars 2007 Statut Membre Dernière intervention 16 novembre 2013 199
4 mars 2008 à 10:42
Avant d'ouvrir ton classeur... j'avais déjà vu dans ton premier exemple, le fait de mettre des couleurs etc en choisissant l'intégralité de la feuille avec Cells, tu joues sur toutes les cellules, du coup quand tu cherches la dernière cellule de la feuille, effectivement, elle est tout en bas... Vire tes mises en formes en VBA (pourquoi ne pas les mettre en direct?)..

Je regarde ton classeur :-)
1
Fxbrg Messages postés 710 Date d'inscription samedi 17 mars 2007 Statut Membre Dernière intervention 16 novembre 2013 199
3 mars 2008 à 15:05
Euh... pas sûr de bien comprendre :-)

D'abord si je comprends bien, tu mets du code derrière tes checkbox, puis tu valides ton formulaire sur le bouton OK. Tu devrais essayer de récupérer la valeur des checkbox sur ton bouton OK, ce serait plus condensé... (mais je sais c'est pas le problème! lol)

Ceci dit, en faisant comme ça, tu pourrais écrire le résultat dans une cellule dans le code de ton OK...

Si le problème c'est d'écrire dans "la cellule d'en dessous", utiliser Activesheet.Usedrange.Rows.count pour savoir quelle est la dernière ligne utilisée dans ta feuille...

Donne plus de détails, ou encore mieux, un petit fichier exemple...

:-)
0
Grobibi34 Messages postés 83 Date d'inscription lundi 3 mars 2008 Statut Membre Dernière intervention 29 mai 2008 30
3 mars 2008 à 15:09
Mmmmmh bon alors attends je vais essayer la fonction que tu m'as donné. Mais j'ai bien l'impression que tu as compris mon problème :-)
0

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

Posez votre question
Grobibi34 Messages postés 83 Date d'inscription lundi 3 mars 2008 Statut Membre Dernière intervention 29 mai 2008 30
3 mars 2008 à 15:26
Bon je n'ai pas réussi à utiliser ta fonction :-(
Je suis réelement débutant en VBA.
Je vais donc tenté de m'expliqué clairement.
Dans ma UserForm j'ai beaucoup de CheckBox disons que je vais en cocher 4 totalement au hasard.
Je voudrai ecrire sur la même colonne mais une ligne différentes une lettre ou un mot (j'aviserai après) un texte correspondant à chacune de mes CheckBox (disons: Checkbox1 : 5, Checkbox2 : 10, Checkbox3 :15, Checkbox4 : 20, Checkbox5 : 25).
Donc en admettant que je clic les Checkbox1, Checkbox3 et Checkbox5 je voudrai écrire en B5:5, B6:15, B7:25.

C'est plus compréhensif ?
0
Fxbrg Messages postés 710 Date d'inscription samedi 17 mars 2007 Statut Membre Dernière intervention 16 novembre 2013 199
3 mars 2008 à 15:30
Ok... :-)
Je comprends ce que tu veux faire mais j'ai un RDV là tout de suite, je te fais ce soir, promis juré!!

Juste une question : là où tu veux écrire le résultat de tes checkbox, est-ce que c'est la fin de la feuille ou non?

:-)
0
Grobibi34 Messages postés 83 Date d'inscription lundi 3 mars 2008 Statut Membre Dernière intervention 29 mai 2008 30
3 mars 2008 à 15:33
Non du tout, n'importe où sur la feuille. Pas de soucis merci par avance !! ^^
0
Fxbrg Messages postés 710 Date d'inscription samedi 17 mars 2007 Statut Membre Dernière intervention 16 novembre 2013 199
3 mars 2008 à 15:39
Juste vite fait :

derrière le bouton OK, pour écrire sur la première cellule vide la colonne B :

Activesheet.cells(range("B1").end(xldown).Row+1,2)=Checkox5.value
Activesheet.cells(range("B1").end(xldown).Row+1,2)=Checkox3.value
etc..

Attention : il ne faut pas que dans ta colonne B tu aies des cellules vides...

:-)
0
Grobibi34 Messages postés 83 Date d'inscription lundi 3 mars 2008 Statut Membre Dernière intervention 29 mai 2008 30
3 mars 2008 à 16:20
Bon... je n'y arrive toujours pas avec se que tu m'as donné...
J'ai de plus en plus l'impression que je suis trop nul en VB. :'(
0
Le Pingou Messages postés 12230 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 15 janvier 2025 1 454
3 mars 2008 à 16:31
Bonjour Grobibi34,
Vous est-il possible de transmettre une copie de votre classeur sur www.cjoint.com Dans se cas il sera certainement plus facile de comprendre et de vous aider !
0
Grobibi34 Messages postés 83 Date d'inscription lundi 3 mars 2008 Statut Membre Dernière intervention 29 mai 2008 30
3 mars 2008 à 16:53
J'ai mis l'intégralité de mon classeur https://www.cjoint.com/?ddqYhGY4BB
Il y a d'autre fonction en route je n'ai pas fais le tris.
J'ai une course à faire donc je ne pourrais pas répondre avant se soir.
Merci pour toute l'aide que vous pourrez m'apporter.
0
Le Pingou Messages postés 12230 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 15 janvier 2025 1 454
3 mars 2008 à 20:09
Bonsoir Grobibi34,
J'ai téléchargé votre classeur et j'ai parcourru les procédures.
Je pense qu'il s'agit de la Feuil1, de la Userform "Cabine" et du traitement des données de "Cabine" que vous voulez enregistrer sur la feuille "Feuil" est-ce bien cela....
Suite: vous avez 26 CheckBox, se sont des cases à cocher et question :
1.- quelles valeurs doit prendre la case si cocher ou non cocher (pour chaque case bien sur) ?
2.- Dans quelles cellules de la feuil1 doit être enregistrer les données ?
0
Fxbrg Messages postés 710 Date d'inscription samedi 17 mars 2007 Statut Membre Dernière intervention 16 novembre 2013 199
3 mars 2008 à 20:40
Salut :-)

http://www.cijoint.fr/cjlink.php?file=cj200803/cij10944369936251.xls

Ton fichier est très "pollué", des macros qui se marchent un peu sur les pieds...lol, du coup j'ai isolé le formulaire cabine, qui s'ouvre à l'ouverture du fichier ci-dessus. Tu coches autant de cases que tu veux, puis OK, ce qui va avoir pour résultat de t'écrire toutes les légendes des cases cochées, ainsi que leur numéro d'ordre dans le formulaire (pour le fun :-)

La procédure, vu le grand nombre de checkbox, est de parcourir la liste des contrôles des formulaires, puis, si il s'agit d'une checkbox, de mettre son caption (mais ça pourrait être n'importe quoi d'autre) dans la première ligne non utilisée...

Dis-voir si ça fait ce que tu veux :-)
0
Le Pingou Messages postés 12230 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 15 janvier 2025 1 454
3 mars 2008 à 23:36
Bonsoir Fxbrg,
Je viens de voir votre proposition qui est très bien réalisée et comme je vais dans le même sens que vous je m'arrête là et merci à vous.
J'espère que Grobibi34 sera satisfait.
Bonne semaine.
0
Grobibi34 Messages postés 83 Date d'inscription lundi 3 mars 2008 Statut Membre Dernière intervention 29 mai 2008 30
4 mars 2008 à 08:32
Bonjour tout le monde. Merci beaucoup Fxbrg c'est exactement ce que je voulais!!! Merci à vous aussi Le Pingou pour vous être intéressé à mes problème^^.

Un dernier petit détail Fxbrg, j'aimerai pouvoir choisir la première cellule où je voudrai écrire je suppose qu'il faut écrire quelquechose en dehors de la boucle mais je ne vois pas exactement quoi et où...

Cordialement
0
Le Pingou Messages postés 12230 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 15 janvier 2025 1 454
4 mars 2008 à 10:32
Merci Grobibi34, de rien.

Salutations.
Jean-Pierre
0
Fxbrg Messages postés 710 Date d'inscription samedi 17 mars 2007 Statut Membre Dernière intervention 16 novembre 2013 199
4 mars 2008 à 09:00
Cool :-)

Bon courage!

:-)
0
Grobibi34 Messages postés 83 Date d'inscription lundi 3 mars 2008 Statut Membre Dernière intervention 29 mai 2008 30
4 mars 2008 à 09:04
Bon c'est bon tout est réglé merci pour ton aide!!

Je referai apelle à toi si jamais je rencontre encore un problème insurmontable (pour moi).

Bonne journée ;-)
0
Fxbrg Messages postés 710 Date d'inscription samedi 17 mars 2007 Statut Membre Dernière intervention 16 novembre 2013 199
4 mars 2008 à 09:06
Pas de problème, que des solutions, c'est bien connu!! lol
0
Grobibi34 Messages postés 83 Date d'inscription lundi 3 mars 2008 Statut Membre Dernière intervention 29 mai 2008 30
4 mars 2008 à 10:04
J'ai encore un petit problème. Je t'explique mon cas: -donc là j'écris dans une certaine cellule en fonction des CheckBox qui sont validés. Quand je clic sur Ok j'ai fais en sorte de chargé une nouvelle UserForm du même type. Je voudrai selon le même principe écrire sous les cellules que j'ai déja ecrit auparavant.
J'ai donc pensé à déclarer la variable "r" en global dans ma feuil1. Cela marche bien pour la première UserForm mais après quand j'arrive sur la seconde il y à un pb.... Je pense que c'est quelque chose de plutot bete mais j'ai du mal à saisir le réel problème.

Voici le code de la Userform Cabine comme tu me l'as défini (avec mes petites modif)

Private Sub CommandButton2_Click()
Dim Ctrl As Control
r = 4
For Each Ctrl In Me.Controls
If TypeName(Ctrl) = "CheckBox" Then
If Ctrl.Value = True Then
ActiveSheet.Cells(r, 5) = Ctrl.Caption
r = r + 1
End If
End If
Next Ctrl
Set Ctrl = Nothing
Unload Cabine
Decret.Show
End Sub

La Userform "decret":

Private Sub CommandButton2_Click()
Dim Ctrl As Control
For Each Ctrl In Me.Controls
If TypeName(Ctrl) = "CheckBox" Then
If Ctrl.Value = True Then
ActiveSheet.Cells(r, 5) = Ctrl.Caption
r = r + 1
End If
End If
Next Ctrl
Set Ctrl = Nothing
Unload Decret
End Sub

Et enfin dans feuille 1 au début j'ai écrit: "Dim r As Integer" au tout début.
0
Grobibi34 Messages postés 83 Date d'inscription lundi 3 mars 2008 Statut Membre Dernière intervention 29 mai 2008 30
4 mars 2008 à 10:25
Heu non pb, il ecrit tout en bas.... je te refais parvenir mon classeur entier. https://www.cjoint.com/?dekxAWLEUK
En gros je veu que toutes mes userform s'enchaine de la même façon et écrive le tout sur la même colonne.
0
Grobibi34 Messages postés 83 Date d'inscription lundi 3 mars 2008 Statut Membre Dernière intervention 29 mai 2008 30
4 mars 2008 à 10:46
Je pensai que c'était la seul façon pour pourvoir initialiser toute ma page. Mais je vois bien que c'est sa le pb...
0
Fxbrg Messages postés 710 Date d'inscription samedi 17 mars 2007 Statut Membre Dernière intervention 16 novembre 2013 199
4 mars 2008 à 10:57
Pourquoi tu fais ces mises en forme? (en plus, elles se font sur TOUT le classeur...) Ici (XL2003, ça me plante XL quand je fais une sélection complète de la feuille 1, c'est du lourd... lol

:-)
0
Grobibi34 Messages postés 83 Date d'inscription lundi 3 mars 2008 Statut Membre Dernière intervention 29 mai 2008 30
4 mars 2008 à 11:03
Alors je voudrais initialiser ma feuille 1 pour qu'elle sois toute blanche. Ensuite je veu (c'est pour l'avenir) que quand je clic sur une case elle devienne rouge se qui est le cas, le truc c'est que dès que je selectionne une cellule elle devient rouge, et quand je double clic elle repasse en blanc, donc c'est pour sa que je selectionne tout au début et que je l'initialise.
Tu connaitrais une autre méthode?
0
Fxbrg Messages postés 710 Date d'inscription samedi 17 mars 2007 Statut Membre Dernière intervention 16 novembre 2013 199
4 mars 2008 à 11:13
Oki...

1/ pour la mise en forme, pourquoi ne pas mettre ta feuille tout en blanc "en dur"? Tu peux ensuite faire un code qui passe en rouge sur clic et blanc sur double clic...De cette façon, c'est juste la mise en forme et non pas une affectation à toutes les cellules de la feuille...Pour info j'ai été obligé de virer ta feuille 1 et d'en recréer une vierge pour arrêter de planter... (pourtant j'ai un gros système...)

2/ pour le code des formulaires. Le problème vient en partie des cellules vides en début (tu as décidé d'écrire à la ligne 4..) Fais ta déclaration de variable directement dans le workbook, au dessus de ta procédure d'ouverture de formulaire. Donc, laisse le code du formulaire cabine, ça marche. Et sur les autres formulaires, initialise la variable r en faisant une recherche de la dernière cellule de la colonne E, comme ça :

Private Sub CommandButton2_Click()
Dim Ctrl As Control
r = Range("e4").End(xlDown).Row + 1
For Each Ctrl In Me.Controls
If TypeName(Ctrl) = "CheckBox" Then
If Ctrl.Value = True Then
ActiveSheet.Cells(r, 5) = Ctrl.Caption
r = r + 1
End If
End If
Next Ctrl
Set Ctrl = Nothing
Unload Decret
Elingage.Show
End Sub

Attention cette méthode ne fonctionne que si les lignes sont à la suite (sans cellule vide)

:-)
0
Grobibi34 Messages postés 83 Date d'inscription lundi 3 mars 2008 Statut Membre Dernière intervention 29 mai 2008 30
4 mars 2008 à 11:27
Alors pour le 1/ j'ai un peu de mal a voir se que tu veus dire
Pour le 2/ je crois que je tiens le bon bout je pense que la solution était bien: r = Range("e4").End(xlDown).Row + 1

;-D
0
Fxbrg Messages postés 710 Date d'inscription samedi 17 mars 2007 Statut Membre Dernière intervention 16 novembre 2013 199
4 mars 2008 à 11:43
1/ plutôt que tout sélectionner puis appliquer la couleur blanche en VBA... Commence par virer ta feuille 1 puis recrées là pour la nettoyer (sinon tu vas trimbaler 10500 lignes...) Ensuite directement dans la feuille, tu sélectionnes toutes les cellules puis tu mets en blanc... Ca n'affecte que les cellules "utiles".

2/ pour ton code qui passe la cellule en rouge à la sélection et en blanc au double clique...
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
ActiveCell.Interior.ColorIndex = 0
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
ActiveCell.Interior.ColorIndex = 3
End Sub

Par exemple, mais il faudrait savoir le pourquoi du comment :-)
0
Grobibi34 Messages postés 83 Date d'inscription lundi 3 mars 2008 Statut Membre Dernière intervention 29 mai 2008 30
4 mars 2008 à 12:13
Bon sa marche nikel là mais tu as raison je voudrai réediter ma Feuil1. Mais je vois pas trop comment faire, je n'arrive pas à la supprimer. J'ai l'impression que la seule solution serait de tout supprimé...Je suis vraiment dsl pour toute mon incompétance ^^'
0