Pb VBA Ecrire dans la cellule du dessous
Résolu
Grobibi34
Messages postés
83
Statut
Membre
-
Le Pingou Messages postés 12713 Date d'inscription Statut Contributeur Dernière intervention -
Le Pingou Messages postés 12713 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour, à tous.
Je suis toujours en train d'éditer ma macro et je rencontre encore un petit problème.
Je vous explique un peu: J'ai une fenêtre avec plusieurs checkbox et quand je clic sur ok j'ai un code qui regarde quel checkbox a été cliquée et écrit alors dans la colonne A la valeur des différentes checkbox cliqué l'un en dessous de l'autre. Voici le code que sa me donne:
Private Sub CommandButton1_Click()
Dim Ctrl As Control, r
r = Range("a9").End(xlDown).Row + 1
For Each Ctrl In Me.Controls
'Si une CheckBox est cliquer on écrit la valeur de la checkBox dans la cellule du dessous
If TypeName(Ctrl) = "CheckBox" Then
If Ctrl.Value = True Then
ActiveSheet.Cells(r, 1) = Ctrl.Caption
r = r + 1
End If
End If
Next Ctrl
Set Ctrl = Nothing
Unload limiteur
End Sub
Bon ça marche bien y a pas de soucis là dessus.
J'aimerai faire pareil mais avec des TextBox, si les Textbox 1,2,3 sont changés, quand je clique sur Ok ce que l'on a écrit dans les textbox s'écriera l'un en dessous de l'autre, j'imagine que le code ne doit pas être très différent.
J'èspere avoir été suffisament explicite.
Merci d'avance pour toute vos remarques ou remarques.
Cordialement,
Grobibi34
Je suis toujours en train d'éditer ma macro et je rencontre encore un petit problème.
Je vous explique un peu: J'ai une fenêtre avec plusieurs checkbox et quand je clic sur ok j'ai un code qui regarde quel checkbox a été cliquée et écrit alors dans la colonne A la valeur des différentes checkbox cliqué l'un en dessous de l'autre. Voici le code que sa me donne:
Private Sub CommandButton1_Click()
Dim Ctrl As Control, r
r = Range("a9").End(xlDown).Row + 1
For Each Ctrl In Me.Controls
'Si une CheckBox est cliquer on écrit la valeur de la checkBox dans la cellule du dessous
If TypeName(Ctrl) = "CheckBox" Then
If Ctrl.Value = True Then
ActiveSheet.Cells(r, 1) = Ctrl.Caption
r = r + 1
End If
End If
Next Ctrl
Set Ctrl = Nothing
Unload limiteur
End Sub
Bon ça marche bien y a pas de soucis là dessus.
J'aimerai faire pareil mais avec des TextBox, si les Textbox 1,2,3 sont changés, quand je clique sur Ok ce que l'on a écrit dans les textbox s'écriera l'un en dessous de l'autre, j'imagine que le code ne doit pas être très différent.
J'èspere avoir été suffisament explicite.
Merci d'avance pour toute vos remarques ou remarques.
Cordialement,
Grobibi34
A voir également:
- Vba ecrire dans une cellule
- Écrire plusieurs lignes dans une cellule excel mac - Guide
- Excel compter cellule couleur sans vba - Guide
- Ecrire en gras sur whatsapp - Guide
- Comment écrire # sur pc - Guide
- Écrire en majuscule - Guide
14 réponses
Bonsoir,
Juste en passant, pour les "textbox" c'est pareil il faut juste faire attention à la colonne (certainement différente de "A") et la ligne :
If TypeName(Ctrl) = "CheckBox" Then .... devient : If TypeName(Ctrl) = "Textbox 1" Then
Juste en passant, pour les "textbox" c'est pareil il faut juste faire attention à la colonne (certainement différente de "A") et la ligne :
If TypeName(Ctrl) = "CheckBox" Then .... devient : If TypeName(Ctrl) = "Textbox 1" Then
Bonjour,
Vous avez parlé de Textbox 1,2,3 ......est ce que le nom est correct dans la ligne If TypeName(Ctrl)=.....
Vous avez parlé de Textbox 1,2,3 ......est ce que le nom est correct dans la ligne If TypeName(Ctrl)=.....
En effet TextBox tout court était peut être insuffisant, je viens donc de modifier par TexTbox1 (le nom générique) pour voir si cela marche déja sur la 1.
Mais rien de plus ne se produit...
Pour moi le problème pourrait venir de:
For Each Ctrl In Me.Controls
If TypeName(Ctrl) = "TextBox1" Then
C'est un code que j'avai récupérer et donc je ne le maitrise pas à 100% mais ce petit bout de code là je ne le comprend absolument pas.
Le problème pourrait il venir de là ?
Mais rien de plus ne se produit...
Pour moi le problème pourrait venir de:
For Each Ctrl In Me.Controls
If TypeName(Ctrl) = "TextBox1" Then
C'est un code que j'avai récupérer et donc je ne le maitrise pas à 100% mais ce petit bout de code là je ne le comprend absolument pas.
Le problème pourrait il venir de là ?
Bonjour,
J'ai pensé que vos "CheckBox, TextBox" se trouvaient sur un "userForm" et je viens de me rendre compte que ce n'est pas le cas probablement et qu'ils sont directement sur la feuille........merci de me le préciser ?
C'est aussi possible de mettre une copie du classeur sur https://www.cjoint.com/ se sera plus facile de vous aider.
J'attends....
Salutations.
Jean-Pierre
J'ai pensé que vos "CheckBox, TextBox" se trouvaient sur un "userForm" et je viens de me rendre compte que ce n'est pas le cas probablement et qu'ils sont directement sur la feuille........merci de me le préciser ?
C'est aussi possible de mettre une copie du classeur sur https://www.cjoint.com/ se sera plus facile de vous aider.
J'attends....
Salutations.
Jean-Pierre
Non non c'est bien dans une userform.
Alors je passe ici mon document complet: https://www.cjoint.com/?edqeice0te
La Userform en question est celles qui sont nommé Technicien et Sous-traitant.
Sur beaucoup d'autre UserForm il y a des checkbox avec le code que j'ai inscrit plus haut.
Si vous préferez je fais une petite version allégé.
Cordialement,
Grobibi34
Alors je passe ici mon document complet: https://www.cjoint.com/?edqeice0te
La Userform en question est celles qui sont nommé Technicien et Sous-traitant.
Sur beaucoup d'autre UserForm il y a des checkbox avec le code que j'ai inscrit plus haut.
Si vous préferez je fais une petite version allégé.
Cordialement,
Grobibi34
Bonjour,
Je viens d'exécuter un petit test sur le code proposé et j'ai un sérieux doute sur son fonctionnement car l'instruction
r = Range("a9").End(xlDown).Row + 1 pointe vers la ligne 65537 se qui correspond à la dernière ligne d'une feuille ......pas possible de mettre des données.....
Merci de votre réponse.
Je viens d'exécuter un petit test sur le code proposé et j'ai un sérieux doute sur son fonctionnement car l'instruction
r = Range("a9").End(xlDown).Row + 1 pointe vers la ligne 65537 se qui correspond à la dernière ligne d'une feuille ......pas possible de mettre des données.....
Merci de votre réponse.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour,
Première question : d'ou vient cette ligne d'instruction r = Range("a9").End(xlDown).Row + 1?
Elle provoque une erreur .....
Première question : d'ou vient cette ligne d'instruction r = Range("a9").End(xlDown).Row + 1?
Elle provoque une erreur .....
Et bien je ne sais plus qui m'a donné cette astuce.
Comme je vien d'expliquer en effet elle peut provoquer une erreur si jamais il y a une cellule vide dans la colonne A à partir de la ligne 9. Donc dans la première Userform qui intervient si l'on clique sur minimum 2 checkbox, il n'y aura plus de pb.
Ca peut paraitre bete, mais je n'ai pas trouvé d'autre solution, et dans la logique d'utilisation du fichier l'utilisateur doit normalement cliqué plus de 2 checkbox (ce sont des phases obligatoires sur le chantier).
J'èspere avoir était suffisament clair et expressif.
Je vous remercie déja de prendre de votre temps pour répondre à mes problèmes.
Cordialement
Grobibi34
PS: je ne pourrais plus répondre jusqu'a demain matin, n'ésitez pas à accumuler les remarques auquels je tenterai d'y répondre demain matin
Comme je vien d'expliquer en effet elle peut provoquer une erreur si jamais il y a une cellule vide dans la colonne A à partir de la ligne 9. Donc dans la première Userform qui intervient si l'on clique sur minimum 2 checkbox, il n'y aura plus de pb.
Ca peut paraitre bete, mais je n'ai pas trouvé d'autre solution, et dans la logique d'utilisation du fichier l'utilisateur doit normalement cliqué plus de 2 checkbox (ce sont des phases obligatoires sur le chantier).
J'èspere avoir était suffisament clair et expressif.
Je vous remercie déja de prendre de votre temps pour répondre à mes problèmes.
Cordialement
Grobibi34
PS: je ne pourrais plus répondre jusqu'a demain matin, n'ésitez pas à accumuler les remarques auquels je tenterai d'y répondre demain matin
Bonsoir,
Ci-joint ma contribution https://www.cjoint.com/?edstYuWO6J
Est-ce que celà correspond à votre attente ?
Ci-joint ma contribution https://www.cjoint.com/?edstYuWO6J
Est-ce que celà correspond à votre attente ?
Bonjour,
Petit complément:
il serait bien de donner un titre à la colonne "A" de la "Feuil1" par exemple "Récapitulatif..." en "A8".
De cette maniére les enregistrements des diverses "CheckBox" et "TextBox" débuteront à la suite du titre grâce à l'instruction [r = Range("a65536").End(xlUp).Row + 1] contenue dans les divers codes.
Bonne journée
Petit complément:
il serait bien de donner un titre à la colonne "A" de la "Feuil1" par exemple "Récapitulatif..." en "A8".
De cette maniére les enregistrements des diverses "CheckBox" et "TextBox" débuteront à la suite du titre grâce à l'instruction [r = Range("a65536").End(xlUp).Row + 1] contenue dans les divers codes.
Bonne journée
Bon c'est exactement ce que je voulai.
Je ne sais pas comment vous remercier, vous m'avais bien dépanné sur ce coup là.
Ceci dis, je me permet d'abuser un peu... le nouveau code est excellent mais il génere plein de ligne vide en dessous ce qui me pose un problème si je veu imprimer mon document. Je pensai donc à selectionner toutes les lignes à partir de r jusqu'a 65537et faire supprimer, mais je ne vois pas le code pour pouvoir faire ça.
j'avai pensé à:
Rows("r:65536").Select
Selection.Delete Shift:=xlUp
Mais bien sur il y a là un problème de syntaxe avec le r (ma variable)
(je peu ouvrir un nouveau sujet si nécessair)
Cordialement,
Grobibi34
Je ne sais pas comment vous remercier, vous m'avais bien dépanné sur ce coup là.
Ceci dis, je me permet d'abuser un peu... le nouveau code est excellent mais il génere plein de ligne vide en dessous ce qui me pose un problème si je veu imprimer mon document. Je pensai donc à selectionner toutes les lignes à partir de r jusqu'a 65537et faire supprimer, mais je ne vois pas le code pour pouvoir faire ça.
j'avai pensé à:
Rows("r:65536").Select
Selection.Delete Shift:=xlUp
Mais bien sur il y a là un problème de syntaxe avec le r (ma variable)
(je peu ouvrir un nouveau sujet si nécessair)
Cordialement,
Grobibi34
Bonjour,
Il ne doit pas y avoir des lignes vide car la ligne d'instruction [r = Range("a65536").End(xlUp).Row + 1] ne fait que trouver la première cellule vide qui suit une pleine. J'ai contrôlé pour les "UserForm" Technicien et Sous-traitant c'est tout OK. Le probléme est alleur, je viens à l'instant de faire un essai d'impresseion et il me donne 37 pages à imprimé pour la feuille 1 qui est vide.
Je contrôle se qui se passe, la réponse va suivre.
Concernant :j'avais pensé à: Rows("r:65536").Select
La plage n'est pas correcte, plutôt ceci : Rows("9:65536").Select
Il ne doit pas y avoir des lignes vide car la ligne d'instruction [r = Range("a65536").End(xlUp).Row + 1] ne fait que trouver la première cellule vide qui suit une pleine. J'ai contrôlé pour les "UserForm" Technicien et Sous-traitant c'est tout OK. Le probléme est alleur, je viens à l'instant de faire un essai d'impresseion et il me donne 37 pages à imprimé pour la feuille 1 qui est vide.
Je contrôle se qui se passe, la réponse va suivre.
Concernant :j'avais pensé à: Rows("r:65536").Select
La plage n'est pas correcte, plutôt ceci : Rows("9:65536").Select
Bonjour,
Concernant l'impression, ce n'est pas les lignes vides qui génèrent les 37 pages d'impression.
Vous avez la ligne 5 qui comprend 256 colonnes (remplie avec "Janvier") donc si on compte environ 7 colonnes par page vous avez vos 37 pages d'impression. Vous pouvez le visualiser en faisant un apperçu avant impression .
Concernant l'impression, ce n'est pas les lignes vides qui génèrent les 37 pages d'impression.
Vous avez la ligne 5 qui comprend 256 colonnes (remplie avec "Janvier") donc si on compte environ 7 colonnes par page vous avez vos 37 pages d'impression. Vous pouvez le visualiser en faisant un apperçu avant impression .
heu oui mais si je met:
Rows("9:65536").Select
Toutes mes cellules se suppriment!
Rows("9:65536").Select
Toutes mes cellules se suppriment!
Je voudrais supprimer les lignes qui continuent de s'éditer sous mon tableau alors qu'il n'y a rien d'écris dessus.
Et donc sa me pose des problèmes pour l'impression vu qu'il veu imprimer des lignes vides...
Je n'ai pas encore pris le temps d'essayé je m'y met de suite.
Cordialement
Grobibi34
Et donc sa me pose des problèmes pour l'impression vu qu'il veu imprimer des lignes vides...
Je n'ai pas encore pris le temps d'essayé je m'y met de suite.
Cordialement
Grobibi34
Bonjour,
Pouvez-vous m'envoyer la partie qui génère les lignes vide........ !
Une ligne vide ne sera jamais prise en compte pour l'impression sauf si vous le voulez.
Avez-vous lu mon explication au poste 19
Concernant l'impression, ce n'est pas les lignes vides qui génèrent les 37 pages d'impression.
Vous avez la ligne 5 qui comprend 256 colonnes (remplie avec "Janvier") donc si on compte environ 7 colonnes par page vous avez vos 37 pages d'impression. Vous pouvez le visualiser en faisant un apperçu avant impression .
Pouvez-vous m'envoyer la partie qui génère les lignes vide........ !
Une ligne vide ne sera jamais prise en compte pour l'impression sauf si vous le voulez.
Avez-vous lu mon explication au poste 19
Concernant l'impression, ce n'est pas les lignes vides qui génèrent les 37 pages d'impression.
Vous avez la ligne 5 qui comprend 256 colonnes (remplie avec "Janvier") donc si on compte environ 7 colonnes par page vous avez vos 37 pages d'impression. Vous pouvez le visualiser en faisant un apperçu avant impression .
Excusez moi non je ne l'avai pas lu ok.
Je vien d'identifier la partie de mon code qui génére ces 200lignes de trop.
J'ai voulu griser les jours de week-end, j'ai donc écris ce code ci:
Range("C7:IV200").Select
ActiveWindow.SmallScroll Down:=-21
Selection.FormatConditions.Delete
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
"=JOURSEM(C$8;2)>5"
Selection.FormatConditions(1).Interior.Pattern = xlGray16
Selection.HorizontalAlignment = xlCenter
C'est donc bien le IV200 qui créait problème.
Comment puis-je garder la meme formule mais en remplaçant le IV200 par un IV la cellule la plus bas dans mon tableau ?
Merci encore pour tout le temps que vous me consacrez afin de résoudre mes problèmes.
Cordialement,
Grobibi34
Je vien d'identifier la partie de mon code qui génére ces 200lignes de trop.
J'ai voulu griser les jours de week-end, j'ai donc écris ce code ci:
Range("C7:IV200").Select
ActiveWindow.SmallScroll Down:=-21
Selection.FormatConditions.Delete
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
"=JOURSEM(C$8;2)>5"
Selection.FormatConditions(1).Interior.Pattern = xlGray16
Selection.HorizontalAlignment = xlCenter
C'est donc bien le IV200 qui créait problème.
Comment puis-je garder la meme formule mais en remplaçant le IV200 par un IV la cellule la plus bas dans mon tableau ?
Merci encore pour tout le temps que vous me consacrez afin de résoudre mes problèmes.
Cordialement,
Grobibi34
Bonjour,
Je vous propose se qui suit :
vous ajoutez l'instruction suivante juste avant votre (range("C7......))
la référence est la colonne "C" (elle a toujours une valeur pour chaque ligne concernée.....)
r = Range("C65536").End(xlUp).Row + 1
Votre ligne "Range("C7.....) qui suit, devient :
Range("C7:IV" & r).Select
Note: avez-vous mis le titre "Récapitulatif.." dans la feuil1 en cellule "A8" oui / non ?
Bonne fin de journée.
Je vous propose se qui suit :
vous ajoutez l'instruction suivante juste avant votre (range("C7......))
la référence est la colonne "C" (elle a toujours une valeur pour chaque ligne concernée.....)
r = Range("C65536").End(xlUp).Row + 1
Votre ligne "Range("C7.....) qui suit, devient :
Range("C7:IV" & r).Select
Note: avez-vous mis le titre "Récapitulatif.." dans la feuil1 en cellule "A8" oui / non ?
Bonne fin de journée.
(Je reste dans la colonne A)
Private Sub CommandButton2_Click()
Dim Ctrl As Control, r
r = Range("a9").End(xlDown).Row + 1
For Each Ctrl In Me.Controls
If TypeName(Ctrl) = "Textbox" Then
If Ctrl.Value <> "" Then
ActiveSheet.Cells(r, 1) = Ctrl.Value
r = r + 1
End If
End If
Next Ctrl
Set Ctrl = Nothing
End Sub
Mais il ne se passe rien....
Je seche un peu là