[VBA Excel] Procédure redondante dans Userform

Procédure redondante dans Userform [VBA Excel] - VB/VBA/VBS - Programmation

Marsh Posté le 26-01-2009 à 13:53:04    

Bonjour à tous !
 
je suis en train de réaliser un tableau où les données seront ajoutées via un userform. voici donc le code :
 
 
Private Sub rechercheA()
    LigneVideA = Cells(Rows.Count, "A" ).End(xlUp).Row + 1
    Range("A" & LigneVideA).Select
End Sub
 
Private Sub rechercheB()
    LigneVideB = Cells(Rows.Count, "B" ).End(xlUp).Row + 1
    Range("B" & LigneVideB).Select
End Sub
 
Private Sub date_VL_Change()
    Call rechercheA
    ActiveCell.Value = date_VL.Value
End Sub
 
Private Sub Valeur_VL_Change()
    Call rechercheB
    ActiveCell.Value = Valeur_VL.Value  
End Sub
 
 
Mon soucis est que lorsque je rentre une valeur dans la case du textbox, la valeur se décompose en plusieurs chiffres sur plusieurs lignes car la procédure rechercheA (ou B) continue de fonctionner (et recherche la cellule vide de chaque colonne). Ainsi je ne peux pas rentrer ma valeur sur la cellule vide de ma colonne A ou B.
 
Pouvez-vous me préciser une fonction ou une astuce ?
 
Merci d'avance !
 

Reply

Marsh Posté le 26-01-2009 à 13:53:04   

Reply

Marsh Posté le 26-01-2009 à 13:56:57    

Je pense qu'en désactivant le recalcul le temps de ta saisie ça doit suffire... non ?
(ou alors j'ai pas bien compris ce que tu voulais faire... si c'est le cas, explique nous ce que tu veux faire précisément plutôt que de poste ton code VBA)
 
au début :
Application.ScreenUpdating = False
et la fin :
Application.ScreenUpdating = True

Reply

Marsh Posté le 26-01-2009 à 14:34:06    

en fait j'ai une colonne A avec des dates et une colonne B avec des prix
la procédure rechercheA me permet de selectionner la première cellule vide de la colonne A ce qui me permet de rentrer facilement avec mon userform ma nouvelle date.
RechercheB me permet de faire la même opération mais avec des prix.
 
Sauf que lorsque je rentre les données dans le user form, il y a un décalage qui s'opère car les deux procédures (rechercherA et rechercheB) continuent de fonctionner et le moindre chiffre est décalé (vers le bas) d'une cellule
 
 
le  
Application.ScreenUpdating je le mets comme ceci ? :
 
 
Private Sub date_VL_Change()  
    Call rechercheA  
Application.ScreenUpdating = False      
ActiveCell.Value = date_VL.Value  
Application.ScreenUpdating = True
End Sub  
 
Private Sub Valeur_VL_Change()  
    Call rechercheB  
Application.ScreenUpdating = False      
ActiveCell.Value = Valeur_VL.Value  
Application.ScreenUpdating = True
End Sub

Reply

Marsh Posté le 26-01-2009 à 15:01:15    

pas exemple lorsque je rentre 150 dans la case valeur de mon userform, cela me donne A1=1, A2= 15 et A3= 150

Reply

Marsh Posté le 26-01-2009 à 15:09:38    

Je dois être idiot... mais tu pourrais nous faire une copie d'écran ?... et avec le résultat attendu aussi surtout.
 
En gros, de ce que j'en ai compris, tu as 2 colonnes A et B... et si tu rentres la valeur dans A, tu veux qu'il t'indique un truc dans B, et si tu rentres un truc dans B, tu veux qu'il t'indique un truc dans A... c'est ça ?
 
A mon avis, c'est plutôt ton événement "change" qui est pas adapté... en tout cas, il faut que tu ne le fasses qu'à la validation de ta cellule, pas dès le début de la frappe.

Reply

Marsh Posté le 26-01-2009 à 15:10:11    

Juste pour être certain... ton "userform"... c'est quoi pour toi ?
Une zone excel, une boîte de dialogue, autre ?

Reply

Marsh Posté le 26-01-2009 à 15:26:17    

j'ai modifié un peu mon code sans faire intervenir de procédure rechercheA et rechercheB.
 
voici le nouveau code et voici la copie écran
 
Private Sub date_VL_Change()
 
    Range("A65536" ).End(xlUp).Offset(1, 0).Select
    ActiveCell.Value = date_VL.Value
     
End Sub
 
 
Private Sub Valeur_VL_Change()
 
    Range("B65536" ).End(xlUp).Offset(1, 0).Select
    ActiveCell.Value = Valeur_VL.Value
 
End Sub
 
http://img231.imageshack.us/img231/1792/sanstitrelu3.th.jpg

Reply

Marsh Posté le 26-01-2009 à 15:55:06    

OKOK... et pourquoi tu ne déclenches pas tes macros sur un autre événement que le "change"...
il vaudrait mieux que tu codes qq chose sur une validation de ta cellule (genre un "on_exit" ou qq chose du style (désolé, je me souviens plus trop des événements existant)... ou sinon que tu codes ça sur la validation par la touche "entrée"...

Reply

Marsh Posté le 26-01-2009 à 15:59:59    

en mettant un "enter" cela ne marche pas mais avec un "afterupdate" ceci fonctionne !
 
merci pour tous !

Reply

Sujets relatifs:

Leave a Replay

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