VBA Excel CheckBox

VBA Excel CheckBox - VB/VBA/VBS - Programmation

Marsh Posté le 21-10-2010 à 14:43:43    

Bonjour a toutes et a tous,
 
Je suis sur Excel depuis un petit moment et je n'arrête pas de découvrir des chose sur sa VBA.
Sauf que la je cherche désespérément sans trouvé de réponse a mon problème. :cry:  
 
Voici la question don je ne trouve absolument pas la réponse sur le web.
 
J'ai une CheckBox dons voici l'action :

Code :
  1. Private Sub CheckBox1_Click()
  2.     If CheckBox1 = True Then
  3.         Sheets("Devisation" ).Range("C28" ) = Sheets("Bibliothèque VELUX®" ).Range("C2" )
  4.         Sheets("Devisation" ).Range("C29" ) = Sheets("Bibliothèque VELUX®" ).Range("C3" )
  5.         Sheets("Devisation" ).Range("C30" ) = Sheets("Bibliothèque VELUX®" ).Range("C4" )
  6.         Sheets("Devisation" ).Range("H28" ) = Sheets("Bibliothèque VELUX®" ).Range("B2" )
  7.         Sheets("Devisation" ).Range("V28" ) = Sheets("Bibliothèque VELUX®" ).Range("F2" )
  8.     Else
  9.         Sheets("Devisation" ).Range("C28" ) = ""
  10.         Sheets("Devisation" ).Range("C29" ) = ""
  11.         Sheets("Devisation" ).Range("C30" ) = ""
  12.         Sheets("Devisation" ).Range("H28" ) = ""
  13.         Sheets("Devisation" ).Range("V28" ) = ""
  14.     End If
  15.    
  16. End Sub


je voudrait que lorsque la case C28 C29 C30 H28 V28 soit déjà rempli qu'elle passe automatiquement a C31 H31 V31 si je coche une autre CheckBox, et ainsi de suite.
J'ai éssayer avec sa avant :
 

Code :
  1. Private Sub CheckBox1_Click()
  2. Dim Lg As String, i As Long, IntLigne As Long
  3. IntLigne = ActiveSheet.Cells(2, 1).End(xlDown).Row + 1
  4. Lg = Sheets("Devisation" ).Cells(65536, 1).End(xlUp).Row + 1
  5.     If CheckBox1 = True Then
  6.         Sheets("Devisation" ).Range("C28" ) = Sheets("Bibliothèque VELUX®" ).Range("C2" )
  7.         Sheets("Devisation" ).Range("C29" ) = Sheets("Bibliothèque VELUX®" ).Range("C3" )
  8.         Sheets("Devisation" ).Range("C30" ) = Sheets("Bibliothèque VELUX®" ).Range("C4" )
  9.         Sheets("Devisation" ).Range("H28" ) = Sheets("Bibliothèque VELUX®" ).Range("B2" )
  10.         Sheets("Devisation" ).Range("V28" ) = Sheets("Bibliothèque VELUX®" ).Range("F2" )
  11.     Else
  12.         Sheets("Devisation" ).Range("C28" ) = ""
  13.         Sheets("Devisation" ).Range("C29" ) = ""
  14.         Sheets("Devisation" ).Range("C30" ) = ""
  15.         Sheets("Devisation" ).Range("H28" ) = ""
  16.         Sheets("Devisation" ).Range("V28" ) = ""
  17.     End If
  18.    
  19. End Sub


mais quoi que je fasse ou que je modifie a sa :
 

Code :
  1. Dim Lg As String, i As Long, IntLigne As Long
  2. IntLigne = ActiveSheet.Cells(2, 1).End(xlDown).Row + 1
  3. Lg = Sheets("Devisation" ).Cells(65536, 1).End(xlUp).Row + 1


 
elle passe automatiquement a C2 la suite se fait bien mais je voudrait que la buté soit a C28 et pas a C2
 
Merci a vous tous


Message édité par jimmy1120112 le 21-10-2010 à 14:50:10
Reply

Marsh Posté le 21-10-2010 à 14:43:43   

Reply

Marsh Posté le 21-10-2010 à 14:55:23    

Que veut dire signifie "passer", "buter" ?
 
Si cela signifie donner le focus, alors il faut utiliser ".Select", par exemple Range("C2" ).Select
 
Si cela signifie récupérer la valeur de C2, alors utiliser Range("C2" ).Value

Reply

Marsh Posté le 21-10-2010 à 15:12:40    

Bonjour a vous
 
Alors 10 petites minutes je test.  
Parceque je met en page ne même tan donc il se peut que sa change un peut.
 
Je test le .Select
 
A toute suite

Reply

Marsh Posté le 21-10-2010 à 15:27:10    

Alors voila quand je met .select comme ceci :
 
Quand je fait  
 

Code :
  1. Sheets("Devisation" ).Range("C28" ) = Sheets("Bibliothèque VELUX®" ).Range("C2" ).Select


 
Il me met des Vrai ou faux, hors se que je veut ses qu'il copie la case C2 dans la C28.
 
Quand je fait :
 

Code :
  1. Sheets("Devisation" ).Range("C28" ) = Sheets("Bibliothèque VELUX®" ).Range("C2" ).Value


 
Il fonctionne, mais comme si il n'y avait pas .Value


Message édité par jimmy1120112 le 21-10-2010 à 16:19:38
Reply

Marsh Posté le 21-10-2010 à 15:32:35    

Je rappel que se n'est pas la CheckBox en elle même qui fonctionne pas, ses l'addition de plus CheckBox qui gène.
 
Je viens de mettre en place ma 3ème CheckBox.
 
Les 3 CheckBox sont configurer a l'identique.
 
Seulement il faut que la première soit cocher pour que la deuxième fonctionne puis la troisième fonctionne même pas, que la 1ou2 soit coché ou non elle marche pas.


Message édité par jimmy1120112 le 21-10-2010 à 16:22:32
Reply

Marsh Posté le 21-10-2010 à 16:21:18    

Il faut lire ce que te met olivthill... Et surtout répondre aux questions...

olivthill a écrit :

Que veut dire signifie "passer", "buter" ?
 
Si cela signifie donner le focus, alors il faut utiliser ".Select", par exemple Range("C2" ).Select
 
Si cela signifie récupérer la valeur de C2, alors utiliser Range("C2" ).Value


Dans ces deux exemples, que ce soit Select ou Value, ca s'applique au Range...
 
Si au lieu de nous pondre un code dont on ne connait ni les tenants, ni les aboutissants, si tu l'argumentais ?
Par exemple : "Je voudrais que quand ma checkbox est cochée que la cellule C28 de l'onglet Devisation soit egal à la cellule C2 de l'onglet Bibliothèque VELUX®" etc.

Citation :

je voudrait que lorsque la case C28 C29 C30 H28 V28 soit déjà rempli qu'elle passe automatiquement a C31 H31 V31 si je coche une autre CheckBox, et ainsi de suite

J'ai beau aider pas mal de monde sur VB/VBA, cette phrase, désolé, mais elle ne veut rien dire. C'est qui elle ? Les cellules C28 etc. de quel onglet ? Passer aux autres cellules ca veut dire quoi pour toi ? Juste les selectionner ? Affecter des valeurs d'autres cellules ? Etc.
 
La tu nous ponds un truc dont on ne sait rien, tu emploies des termes dont on ne sait meme pas ce qu'ils veulent dire pour toi etc.
 
Novice ou pas, le meilleur moyen de se faire aider c'est de bien expliquer la problématique et le résultat souhaité.
 

Citation :

Sheets("Devisation" ).Select("C28" ) = Sheets("Bibliothèque VELUX®" ).Range("C2" )


Ici, deja la syntaxe n'est pas bonne.
Ca serait Sheets("Devisation" ).range("C28" ).Select Comme te l'a montré olivthill
Et ca, F1 sur le mot Range t'aurait renseigné
 
Et ensuite ca ne veut rien dire. Tu veux affecter la valeur de C2 au fait que tu selectionnes C28...


Message édité par SuppotDeSaTante le 21-10-2010 à 16:24:32

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 21-10-2010 à 16:37:52    

Bon désoler pour l'explication, c'est vrai que j'ai fait court.
 
Mais quand je met Sheets("Devisation" ).range("C28" ).Select  il me le sur ligne et la checkbox fonctionne pas !
 
ensuite la checkbox fonctionne parfaitement.
 
Ses le fait d'additionner une multitude de checkbox coché, qui gène.
 
exemple :
 
si CheckBox1 est coché les cellules C28:C30 seront remplis.
si CheckBox2 est coché et que la Checkbox1 y est également alors elle ne remplacera pas les valeurs de C28:C30 mais les copiera a C31:C33
si CheckBox3 est coché et que les 2 autre y sont également alors elle copiera dans C34:C36.
 
autre situation :
 
si CheckBox3 est coché et que les 2 autre n'y sont pas alors elle copiera dans C28:C30
 
de même pour les autres...
 
Et pour finir :
   
Dim Lg As String, i As Long, IntLigne As Long
IntLigne = ActiveSheet.Cells(2, 1).End(xlDown).Row + 1
Lg = Sheets("Devisation" ).Cells(65536, 1).End(xlUp).Row + 1
 
viens de l'un de met boutons qui copie la valeur d'un TextBox dans la cellule B2.  
Puis si l'action est répéter il ne remplace pas la valeur de B2 par celle de Textbox, mais il la re-copie automatiquement a B3.

Reply

Marsh Posté le 21-10-2010 à 16:52:19    

jimmy1120112 a écrit :

IntLigne = ActiveSheet.Cells(2, 1).End(xlDown).Row + 1
Lg = Sheets("Devisation" ).Cells(65536, 1).End(xlUp).Row + 1

 
viens de l'un de met boutons qui copie la valeur d'un TextBox dans la cellule B2.  
Puis si l'action est répéter il ne remplace pas la valeur de B2 par celle de Textbox, mais il la re-copie automatiquement a B3.

Euh ces 2 lignes recuperent la derniere ligne utilisée pour tes deux onglets. Rien de plus.
 
Pour tes conditions, et bien il te suffit d'imbriquer des If

Code :
  1. If CheckBox1 = True And CheckBox2 = True And CheckBox3 = True
  2.         Sheets("Devisation" ).Range("C34" ) = Sheets("Bibliothèque VELUX®" ).Range("C2" )
  3.         Sheets("Devisation" ).Range("C35" ) = Sheets("Bibliothèque VELUX®" ).Range("C3" )
  4.         Sheets("Devisation" ).Range("C36" ) = Sheets("Bibliothèque VELUX®" ).Range("C4" )
  5.     ElseIf CheckBox1 = True And CheckBox2 = True
  6.         Sheets("Devisation" ).Range("C31" ) = Sheets("Bibliothèque VELUX®" ).Range("C2" )
  7.         Sheets("Devisation" ).Range("C32" ) = Sheets("Bibliothèque VELUX®" ).Range("C3" )
  8.         Sheets("Devisation" ).Range("C33" ) = Sheets("Bibliothèque VELUX®" ).Range("C4" )
  9.     ElseIf CheckBox1 = True
  10.         Sheets("Devisation" ).Range("C28" ) = Sheets("Bibliothèque VELUX®" ).Range("C2" )
  11.         Sheets("Devisation" ).Range("C29" ) = Sheets("Bibliothèque VELUX®" ).Range("C3" )
  12.         Sheets("Devisation" ).Range("C30" ) = Sheets("Bibliothèque VELUX®" ).Range("C4" )
  13.         Sheets("Devisation" ).Range("H28" ) = Sheets("Bibliothèque VELUX®" ).Range("B2" )
  14.         Sheets("Devisation" ).Range("V28" ) = Sheets("Bibliothèque VELUX®" ).Range("F2" )
  15.     ElseIf ETC.
  16.     End If


 
C'est un exemple hein. Car tu n'es encore pas assez précis  

Citation :

si CheckBox1 est coché les cellules C28:C30 seront remplis. Seulement elle ? Que CheckBox1 ?
si CheckBox2 est coché et que la Checkbox1 y est également alors elle ne remplacera pas les valeurs de C28:C30 mais les copiera a C31:C33 Que veut dire copier pour toi ?
si CheckBox3 est coché et que les 2 autre y sont également alors elle copiera dans C34:C36. Idem
 
autre situation :  
 
si CheckBox3 est coché et que les 2 autre n'y sont pas alors elle copiera dans C28:C30 Comme la CheckBox1 donc ? Etrange non ?
Et s'il n'y a que la CheckBox2 de cochee, il se passe quoi ? Avec ta description des conditions, rien. Normal ?


 
Imagine tes 3 CheckBox.
Le test If CheckBox1 = True sera vrai, si :
- Que CheckBox1 est cochée
- Elles le sont toutes
- CheckBox1 et CheckBox2 sont cochées
- CheckBox1 et CheckBox3 sont cochées.
 
Donc, il faut tester d'abord toutes les eventualités max d'abord.
 
 
Edit : tu as l'air tout speedé... Calme toi, respire un bon coup, et explique clairement, calmement, point par point. Tu pars un peu dans tous les sens ;)

Message cité 1 fois
Message édité par SuppotDeSaTante le 21-10-2010 à 17:05:19

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 21-10-2010 à 17:13:57    

SuppotDeSaTante a écrit :


Edit : tu as l'air tout speedé... Calme toi, respire un bon coup, et explique clairement, calmement, point par point. Tu pars un peu dans tous les sens ;)


 
Je sais bien mais comprend moi sa fait quand même 3 jours que je suis en furie a cause de sa...  
 
si CheckBox1 est coché les cellules C28:C30 seront remplis. Seulement elle ? Que CheckBox1 ? si ses la seul de cocher parmi toutes autre, oui.
si CheckBox2 est coché et que la Checkbox1 y est également alors elle ne remplacera pas les valeurs de C28:C30 mais les copiera a C31:C33 Que veut dire copier pour toi ?
si CheckBox3 est coché et que les 2 autre y sont également alors elle copiera dans C34:C36. Idem
 
Pour moi je dit copier moi pour vous sa doit être "égal a la valeur de ...."  
je dit copier mais ses comme si vous faisiez par exemple : dans la cellule B5 vous écrivez, =SOMME(A1) le résultat est le même, enfin pour moi, après l'action qui est derrière en VBA je ne la connait pas.
 
 
Euh ces 2 lignes recuperent la derniere ligne utilisée pour tes deux onglets. Rien de plus.
 
Ses a dire ?
 
EDIT :  
 
pour le test que tu a éditer il faut le faire obligatoirement pour que sa face se que je veut ?
Sa me fait peur parce que plus tard il y en aura un peut plus de 15000, donc si il faut faire tous sa, sa va en faire beaucoup  :D
 
Vous voulez le fichier pour me suivre ?
parce que la j'ai les doigt qui tremble sa va pas être facile.


Message édité par jimmy1120112 le 21-10-2010 à 17:20:24
Reply

Marsh Posté le 21-10-2010 à 17:26:20    

:lol:
 
Aller, envoi le fichier, je suis dans un jour de bonté :p
 
Si tu en as plus de 15000 (de checkbox on est d'accord ?) il vaudra mieux passer par un select case alors, et surtout expliquer clairement ce que tu veux !! C'est ca la clé


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 21-10-2010 à 17:26:20   

Reply

Marsh Posté le 21-10-2010 à 17:46:11    

Merci.
 
Pour tous dire, je doit faire une sorte de logiciel, pour faire des devis et factures, donc a l'intérieur du document excel il y deux bibliothèques.
 
pour une ses une dizaines de mille article et pour l'autre ses 25000 articles. Donc les deux sa fais une trentaines de mile articles.
 
et a chaque article des deux bibliothèques il faut qu'il y est en face une case a cocher et qui une fois que ses cocher sa envoie dans la feuil devisation, le prix, le descriptif, la référence et le format.
 
pour faire un devis, au lieux de tous écrire tous le temps, et de ressortir la calculatrice tous les 5 minutes.
 
Merci encore


Message édité par jimmy1120112 le 21-10-2010 à 19:03:15
Reply

Marsh Posté le 21-10-2010 à 17:52:24    

Vous êtes la ?  :p


Message édité par jimmy1120112 le 21-10-2010 à 18:14:43
Reply

Marsh Posté le 21-10-2010 à 18:36:34    

Euh tu t'emmerdes pas un peu la ?
 
Au lieu de mettre des checkbox, tu mets des "x" dans une cellule a coté... Deja ca sera plus simple pour boucler dessus...!!
 
Ensuite, si c'est "juste" pour recup des articles... Hum, je vais voir la tronche de ton fichier


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 21-10-2010 à 18:48:36    

de quoi ?  
 
t'en vois ou des "x" j'ai aucun "x" et les checkbox ses des checkbox avec des coche, et la caption sont réduite car il n'y a pas besoin de voir la caption, rien d'autre !
 
et ses un fichier .xlsm parce quand xls et xlsx sa marche pas ou alors il y a un message de test de compatibilité !
 
je sais peut être mal expliquer mon problème, mais je sais encore se que j'ai a l'écran !!
 
ensuite ses pas pour RÉCUPÉRER DES ARTICLES ses pour les insérer dans une autre feuil !


Message édité par jimmy1120112 le 22-10-2010 à 17:03:06
Reply

Marsh Posté le 21-10-2010 à 18:55:13    

Si c'est pour t'ennerver, tu te débrouilles  [:cyborg21]  
 
Je fais ca sur mon temps libre hein, je ne suis pas payé. Donc le minimum demandé, c'est un peu de correction. ;)
 
Bon courage.


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 21-10-2010 à 19:00:58    

Je demande, comment on fait pour renvoyer a la ligne du dessous si la cellule est déjà rempli, sa doit pas être la mer a boire...
Je suis sur que ses encore une bidouille a modifier ou a ajouter... comme sa ma fait a plusieurs reprise.
 
A+


Message édité par jimmy1120112 le 22-10-2010 à 15:12:52
Reply

Marsh Posté le 22-10-2010 à 15:15:37    

Bonjour,
 
Voila je le savait bien que c'était pas la mer a boire, juste sa :
 

Code :
  1. Private Sub CheckBox1_Click()
  2. Dim Lg As String, i As Long, IntLigne As Long
  3. IntLigne = ActiveSheet.Cells(2, 1).End(xlDown).Row + 27
  4. Lg = Sheets("Liste des clients" ).Cells(65536, 1).End(xlUp).Row + 27
  5.   If CheckBox1 = True Then
  6.     Sheets("Devisation" ).Cells(Lg, "C" ).Value = Sheets("Bibliothèque VELUX®" ).Range("C2" ).Value
  7.   Else
  8.     Sheets("Devisation" ).Cells(Lg, "C" ) = ""
  9.   End If
  10. End Sub


Maintenant il me met sa a C28.
 
Sauf que mon autre problème est que si je coche la deuxième CheckBox elle viens remplacer la valeur de la 1er, et non se mettre a la suite, ses a dires C29.
 
A+

Message cité 1 fois
Message édité par jimmy1120112 le 22-10-2010 à 15:16:31
Reply

Marsh Posté le 22-10-2010 à 15:26:27    

jimmy1120112 a écrit :

Sauf que mon autre problème est que si je coche la deuxième CheckBox elle viens remplacer la valeur de la 1er, et non se mettre a la suite, ses a dires C29.


C'est bien de ca que je cosais comme étant un souci. Et c'est aussi pour ca que je t'ai donné l'exemple des ElseIf. Maintenant si pour toi se palucher 30000 ElseIf c'est pas la mère à boire, tant mieux. Pour moi ca l'est. D'ou mon idée de mettre des "x" dans une colonne adjacente, plutot que d'utiliser des Checkbox. Parceque quand tu vas vouloir faire une boucle sur tes 30000 CheckBox dont le nom ne sera pas forcement continu, tu vas t'amuser. Sur des cellules ca prend 20 secondes.
 
Maintenant si pour toi, c'est simple et donc pas la mère à boire et qu'en plus tu le savais, tant mieux. Et surtout bon courage.
 
Topic clos pour ma part. :jap:


Message édité par SuppotDeSaTante le 22-10-2010 à 15:29:53

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 22-10-2010 à 15:35:25    

Bonjour,
 
Je me base sur les CheckBox parce que je ne connait que sa pour le moment, les Select case, j'ai beau chercher n'importe ou je ne trouve rien a se sujet.
 
Et non je ne le savait pas, puisque je viens de le trouvé se matin même en modifiant le code, de manière multiple.
 
Si se tapé les 30000 articles ses pas facile, je parlait du code VBA et pas la conséquence qui allait suivre.
 
Mais tu a dit Sur des cellules ca prend 20 secondes. on peut le faire sur des cellule ?
 
Topic clos également sinon ses du hors sujet...
 
A+


Message édité par jimmy1120112 le 22-10-2010 à 17:02:42
Reply

Marsh Posté le 27-10-2010 à 18:03:52    

Bonjour a tous.
 
Pour tous ceux qui veulent que la valeur des checkbox se mette a la suite l'une de l'autre voici le code : (200 personne a vue le post, a mon avis sa va faire quelque heureux)
 
CheckBox :  
 

Code :
  1. Private Sub CheckBox1_Click()
  2. Dim Lg As String, i As Long, IntLigne As Long
  3. Macro2
  4.   If CheckBox1 = True Then
  5.     ActiveCell.Value = Sheets("Bibliothèque VELUX®" ).Range("C2" ).Value
  6.     ActiveCell.Range("f1" ).Value = Sheets("Bibliothèque VELUX®" ).Range("B2" ).Value
  7.     ActiveCell.Range("a2" ).Value = Sheets("Bibliothèque VELUX®" ).Range("B3" ).Value
  8.     ActiveCell.Range("a3" ).Value = Sheets("Bibliothèque VELUX®" ).Range("B4" ).Value
  9.     ActiveCell.Range("r1" ).Value = Sheets("Bibliothèque VELUX®" ).Range("G2" ).Value
  10.     ActiveCell.Range("s1" ).Value = Sheets("Bibliothèque VELUX®" ).Range("H2" ).Value
  11.     ActiveCell.Range("u1" ).Value = Sheets("Bibliothèque VELUX®" ).Range("F2" ).Value
  12.   Else
  13.     ActiveCell.Value = ""
  14.     ActiveCell.Range("f1" ) = ""
  15.     ActiveCell.Range("a2" ) = ""
  16.     ActiveCell.Range("a3" ) = ""
  17.     ActiveCell.Range("r1" ) = ""
  18.     ActiveCell.Range("s1" ) = ""
  19.     ActiveCell.Range("u1" ) = ""
  20.   End If
  21. End Sub


 
et la Macro2 :

Code :
  1. Sub Macro2()
  2. Sheets("Devisation" ).Select
  3. Range("C1000" ).Select
  4. Selection.End(xlUp).Select
  5. ActiveCell.Range("a2" ).Select
  6. End Sub


 
La macro est dans un module.
Vous pouvez mettre le code de la macro au début de la checkbox, cela fait la même action, ses utile quand par exemple vous avez une trentaine de Checkbox au lui de copier/coller a chaque fois, vous écriver Macro2 et ses bon.
 
Par exemple pour : ActiveCell.Range("u1" ).Value le ("u1" ) est a la colonne V et pas U, ses "décaler". pareil pour toutes les autre,  
remplacer le ("Bibliothèque VELUX®" ) par le nom de votre onglet de destination,
Range("C1000" ).Select est la cellule de départ pour aller vers le haut, donc si vous voulez que se soit dans la colonne Z et a 30 ligne alors vous obtiendrez ceci : Range("Z30" ).Select
 
Je précise bien que les CheckBox sont pas dans un UserForm mais bien dans la feuil excel.
 
dje69r : Pas besoin de test If CheckBox1 = True sera vrai, si : [...]  
et sa fonctionne parfaitement bien.
 
<TOPIC RÉSOLUE>
 
A+


Message édité par jimmy1120112 le 27-10-2010 à 18:13:48
Reply

Marsh Posté le 27-10-2010 à 18:15:35    

Heu pour te résumer la pensée qui je pense est générale,
Tu expliques très très mal ton problème, et la résolution idem :D
 
Avant de parler du code de ta checkbox, il faut expliquer dans quoi est ta checkbox, à quoi elle sert, et ce que tu veux qu'elle fasse (le tout sans parler de VBA), et ensuite seulement tu détaille :)
 
Bonne continuation.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed