Macro excel
Résolu
Grobibi34
Messages postés
83
Date d'inscription
Statut
Membre
Dernière intervention
-
Fxbrg Messages postés 710 Date d'inscription Statut Membre Dernière intervention -
Fxbrg Messages postés 710 Date d'inscription Statut Membre Dernière intervention -
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
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:
- Macro excel
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Déplacer colonne excel - Guide
- Si ou excel - Guide
23 réponses
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
:-)
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
:-)
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 :-)
Je regarde ton classeur :-)
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...
:-)
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...
:-)
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 :-)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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 ?
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 ?
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?
:-)
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?
:-)
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...
:-)
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...
:-)
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. :'(
J'ai de plus en plus l'impression que je suis trop nul en VB. :'(
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.
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.
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 ?
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 ?
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 :-)
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 :-)
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
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
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 ;-)
Je referai apelle à toi si jamais je rencontre encore un problème insurmontable (pour moi).
Bonne journée ;-)
Pas de problème, que des solutions, c'est bien connu!! lol
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.
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.
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.
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.
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...
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
:-)
:-)
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?
Tu connaitrais une autre méthode?
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)
:-)
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)
:-)
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 :-)
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 :-)