Macro excel

Résolu
Grobibi34 Messages postés 83 Statut Membre -  
Fxbrg Messages postés 715 Statut Membre -
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
Configuration: Windows XP
Internet Explorer 6.0

23 réponses

  • 1
  • 2
  1. Fxbrg Messages postés 715 Statut Membre 199
     
    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
  2. Fxbrg Messages postés 715 Statut Membre 199
     
    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
  3. Fxbrg Messages postés 715 Statut Membre 199
     
    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
  4. Grobibi34 Messages postés 83 Statut Membre 30
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Grobibi34 Messages postés 83 Statut Membre 30
     
    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
  7. Fxbrg Messages postés 715 Statut Membre 199
     
    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
  8. Grobibi34 Messages postés 83 Statut Membre 30
     
    Non du tout, n'importe où sur la feuille. Pas de soucis merci par avance !! ^^
    0
  9. Fxbrg Messages postés 715 Statut Membre 199
     
    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
  10. Grobibi34 Messages postés 83 Statut Membre 30
     
    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
    1. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 477
       
      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
  11. Grobibi34 Messages postés 83 Statut Membre 30
     
    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
    1. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 477
       
      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
  12. Fxbrg Messages postés 715 Statut Membre 199
     
    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
    1. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 477
       
      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
  13. Grobibi34 Messages postés 83 Statut Membre 30
     
    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
    1. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 477
       
      Merci Grobibi34, de rien.

      Salutations.
      Jean-Pierre
      0
  14. Fxbrg Messages postés 715 Statut Membre 199
     
    Cool :-)

    Bon courage!

    :-)
    0
  15. Grobibi34 Messages postés 83 Statut Membre 30
     
    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
  16. Fxbrg Messages postés 715 Statut Membre 199
     
    Pas de problème, que des solutions, c'est bien connu!! lol
    0
    1. Grobibi34 Messages postés 83 Statut Membre 30
       
      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
  17. Grobibi34 Messages postés 83 Statut Membre 30
     
    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
  18. Grobibi34 Messages postés 83 Statut Membre 30
     
    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
  19. Fxbrg Messages postés 715 Statut Membre 199
     
    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
    1. Grobibi34 Messages postés 83 Statut Membre 30
       
      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
  20. Fxbrg Messages postés 715 Statut Membre 199
     
    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
    1. Grobibi34 Messages postés 83 Statut Membre 30
       
      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
  21. Fxbrg Messages postés 715 Statut Membre 199
     
    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
    1. Grobibi34 Messages postés 83 Statut Membre 30
       
      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
  • 1
  • 2