Pb VBA Ecrire dans la cellule du dessous

Résolu/Fermé
Grobibi34 Messages postés 83 Date d'inscription lundi 3 mars 2008 Statut Membre Dernière intervention 29 mai 2008 - 2 avril 2008 à 10:38
Le Pingou Messages postés 12225 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 décembre 2024 - 4 avril 2008 à 16:35
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

14 réponses

Le Pingou Messages postés 12225 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 décembre 2024 1 452
2 avril 2008 à 21:04
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
0
Grobibi34 Messages postés 83 Date d'inscription lundi 3 mars 2008 Statut Membre Dernière intervention 29 mai 2008 30
3 avril 2008 à 09:15
Merci pour ta réponse Le Pingou, alors j'ai mis:

(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à
0
Le Pingou Messages postés 12225 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 décembre 2024 1 452
3 avril 2008 à 11:41
Bonjour,
Vous avez parlé de Textbox 1,2,3 ......est ce que le nom est correct dans la ligne If TypeName(Ctrl)=.....
0
Grobibi34 Messages postés 83 Date d'inscription lundi 3 mars 2008 Statut Membre Dernière intervention 29 mai 2008 30
3 avril 2008 à 11:52
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à ?
0
Le Pingou Messages postés 12225 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 décembre 2024 1 452 > Grobibi34 Messages postés 83 Date d'inscription lundi 3 mars 2008 Statut Membre Dernière intervention 29 mai 2008
3 avril 2008 à 13:46
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
0
Grobibi34 Messages postés 83 Date d'inscription lundi 3 mars 2008 Statut Membre Dernière intervention 29 mai 2008 30 > Le Pingou Messages postés 12225 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 décembre 2024
3 avril 2008 à 16:04
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
0
Le Pingou Messages postés 12225 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 décembre 2024 1 452
3 avril 2008 à 15:57
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.
0
Grobibi34 Messages postés 83 Date d'inscription lundi 3 mars 2008 Statut Membre Dernière intervention 29 mai 2008 30
3 avril 2008 à 16:15
Non le code ne fonctionne que si il n'y a pas de cellule vide à partir de la cellule A9.
C'est pourquoi dans la premiere UserForm il y a le détail en plus:
r = 9 et là normalement ça marche.
0
Grobibi34 Messages postés 83 Date d'inscription lundi 3 mars 2008 Statut Membre Dernière intervention 29 mai 2008 30
3 avril 2008 à 16:20
Heu la discussion c'est mise en Problème résolu mais se n'est pas franchement le cas...
0
Le Pingou Messages postés 12225 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 décembre 2024 1 452
3 avril 2008 à 16:30
Bonjour,
Pas de probléme, j'ai téléchargé votre fichier, la réponse va suivre, un peu de patience.
0

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

Posez votre question
Le Pingou Messages postés 12225 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 décembre 2024 1 452
3 avril 2008 à 16:57
Bonjour,
Première question : d'ou vient cette ligne d'instruction r = Range("a9").End(xlDown).Row + 1?
Elle provoque une erreur .....
0
Grobibi34 Messages postés 83 Date d'inscription lundi 3 mars 2008 Statut Membre Dernière intervention 29 mai 2008 30
3 avril 2008 à 17:20
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
0
Le Pingou Messages postés 12225 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 décembre 2024 1 452
3 avril 2008 à 18:21
Bonsoir,
Ci-joint ma contribution https://www.cjoint.com/?edstYuWO6J
Est-ce que celà correspond à votre attente ?
0
Le Pingou Messages postés 12225 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 décembre 2024 1 452
3 avril 2008 à 21:35
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
0
Grobibi34 Messages postés 83 Date d'inscription lundi 3 mars 2008 Statut Membre Dernière intervention 29 mai 2008 30
4 avril 2008 à 09:21
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
0
Le Pingou Messages postés 12225 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 décembre 2024 1 452
4 avril 2008 à 11:50
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
0
Grobibi34 Messages postés 83 Date d'inscription lundi 3 mars 2008 Statut Membre Dernière intervention 29 mai 2008 30
4 avril 2008 à 11:55
Oups dsl je n'avais pas vu que vous m'aviez répondu j'ai édité un nouveau sujet.

Je suis tout à fais d'accord pour dire que le problème ne vient pas des lignes que vous m'avez donné

J'essai se que vous m'avez dis.
0
Le Pingou Messages postés 12225 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 décembre 2024 1 452 > Grobibi34 Messages postés 83 Date d'inscription lundi 3 mars 2008 Statut Membre Dernière intervention 29 mai 2008
4 avril 2008 à 13:06
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 .
0
Grobibi34 Messages postés 83 Date d'inscription lundi 3 mars 2008 Statut Membre Dernière intervention 29 mai 2008 30
4 avril 2008 à 12:05
heu oui mais si je met:

Rows("9:65536").Select

Toutes mes cellules se suppriment!
0
Le Pingou Messages postés 12225 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 décembre 2024 1 452
4 avril 2008 à 13:15
Bonjour,
Eh bien oui cela sélectionne les lignes de la 9ième à la dernière (65536) et avec "Delete" ou "Clear" toutes les cellules correspondantes à la sélection seront donc supprimées.
Précisez donc ce que vous voulez effacer ou supprimer !!!!
0
Le Pingou Messages postés 12225 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 décembre 2024 1 452
4 avril 2008 à 13:23
Bonjour,
Avez-vous réalisé ma proposition du poste 14 ?
Merci de votre réponse.
0
Grobibi34 Messages postés 83 Date d'inscription lundi 3 mars 2008 Statut Membre Dernière intervention 29 mai 2008 30
4 avril 2008 à 13:48
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
0
Le Pingou Messages postés 12225 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 décembre 2024 1 452
4 avril 2008 à 13:55
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 .

0
Grobibi34 Messages postés 83 Date d'inscription lundi 3 mars 2008 Statut Membre Dernière intervention 29 mai 2008 30
4 avril 2008 à 14:16
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
0
Le Pingou Messages postés 12225 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 6 décembre 2024 1 452
4 avril 2008 à 16:35
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.
0