Pb Excel : validation de cellule & ActiveCell

Résolu/Fermé
Elodie - 24 août 2011 à 16:25
 Elodie - 1 sept. 2011 à 10:16
Bonjour,

Pour lancer l'ouverture d'un Userform lorsque j'indique le mot "ok" dans une cellule, j'ai le code suivant :

Dim li As Long
If Not Intersect(Target, Range("RFI")) Is Nothing Then
li = Target.Row - Range("RFI").Cells(1, 1).Row + 1
If Range("RFI").Cells(li, 1).Value = "ok" Then
Call FormulaireRFI
End If
End If

Ensuite le FormulaireRFI (userform) contient des TextBox et lorsque j'appuie sur le CommandButton du Userform "Valider", une macro se lance pour copier les informations contenues dans les Textbox dans un certain nombre de cellules de ma feuille. Cette copie se fait à l'aide du code suivant :

ActiveCell.Offset(-1, 0).Activate
ActiveCell.Value = "Renseigné"
ActiveCell.Offset(0, 9).Activate
ActiveCell.Value = Userform1.TextBox4.Text

Dans cet exemple "Renseigné" doit venir remplacer le "ok" que j'ai précédemment entré, et le Textbox4 renseigne la cellule située à 9 colonnes de ma cellule.

Le problème est que suivant si j'appuie sur "Entrée" ou si j'utilise les fleches après ma saisie, ma ligne ActiveCell.Offset(-1, 0).Activate ne se repositionne pas toujours sur la bonne cellule.

Quelqu'un pourrait-il m'aider à retrouver/reselectionner systématiquement la cellule où je viens d'écrire "ok" ???

D'avance merci !
Elodie


A voir également:

10 réponses

Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
24 août 2011 à 18:59
Inspire-toi de ce code :
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("RFI")) Is Nothing Or Target.Count > 1 Then Exit Sub
If Target.Value = "ok" Then Call formulaireRFI(Target)
End Sub

Sub formulaireRFI(Cible As Range)
Cible.Value = "Renseigné"
Cible.Offset(0, 9).Value = "Texte" ' Userform1.TextBox4.Text
End Sub

0
bonjour

si tu écris "Ok" en cells(li,1), dans ton formulaire tu peux écrire :
cells(li,1).Value ="Renseigné" 
cells(li,10).Value = Userform1.TextBox4.Text

il faudra déclaré li comme variable publique dans un module pour être connue dans tout ton projet

Bonne suite
0
Bonjour Paf,

N'étant pas une spécialiste, j'ai regardé sur le forum et on indique qu'il faut déclarer une variable publique dans un module avec une fonction ou une procédure.
Donc, dans un nouveau module, j'ai écrit :

Function Variables()
Public li As Long
End Function

Le problème c'est que maintenant le userform1 "FormulaireRFI" ne s'ouvre plus lorsque j'inscris "ok" dans ma cellule...

Une idée pour m'aider ???
Merci
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
24 août 2011 à 22:46
Pour déclarer une variable publique, il suffit d'écrire seulement

Public li As Long 
au début d'un module standard dans la zone déclaration (avant les Sub et Function)
0
re

dans un module tu écris simplement:

Public li As Integer
'(pas besoin de Long et peut-être pas d'integer mais bon...)

cette variable ne doit pas être redéfinie dans d'autres procédures ou fonctions.


autre chose qui n'a rien à voir :
à quoi sert : Call FormulaireRFI
j'ai un doute sur l'appellation du formulaire RFI ou Userform1

A+
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
24 août 2011 à 23:08
Depuis Excel 2007 il est préférable d'utiliser long pour les numéro de ligne (ils peuvent être supérieur à 65536)
0

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

Posez votre question
re,

alors, avec le Cells(li, 1)... ne me recopie pas "Renseigné" dans la cellule où je viens d'inscrire "ok" et Cells(li, 10)... me recopie le contenu de Userform1.TextBox4.Text mais dans une cellule qui n'a rien à voir (plus haut dans mon tableau et dans la 10ème colonne (J)).

Call FormulaireRFI sert à ouvrir le userform1

j'ai aussi essayé la proposition de Patrice33740 mais ça n'ouvre plus mon userform...

A+
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
24 août 2011 à 23:37
Au lieu de li, déclare au début du module:

Option Private Module
Public Cible as Range

et utilises ce code dans la feuille :

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("RFI")) Is Nothing Or Target.Count > 1 Then Exit Sub
If Target.Value <> "ok" Then Exit Sub
Set Cible = Target
Call formulaireRFI()
Set Cible = Nothing
End Sub


et dans le formulaire :
Cible.Value = "Renseigné"
Cible.Offset(0, 9).Value = Userform1.TextBox4.Text
0
re,

Je viens d'essayer et ça me donne :
Erreur d'exécution 91
Variable objet ou variable de bloc With non définie

Et en cliquant sur débogage ça surligne en jaune le "Cible.Value = "Renseigné"

J'suis vraiment désolée pour cette galère...
Merci de ton aide
Elodie
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
25 août 2011 à 00:01
C'est élémentaire mais il me manque des informations
Met un exemple de ton fichier sur http://cijoint.fr/
0
Bonjour,

Mon fichier : http://www.cijoint.fr/cjlink.php?file=cj201108/cijgUG4eCQ.xls

Le problème se pose dans la feuille LongList, lorsqu'on renseigne la case "RFI Received" par un "ok", le Userform1 avec un certain nombre de textbox qui permet d'implémenter certaines colonnes du tableau par les informations reçues dans la RFI...
Une fois que les différents TextBox sont remplies, on valide grace au CommandButton "Valider les informations" et cette action doit faire passer la case "RFI Received" avec le "ok" à "Renseigné". Et c'est cette action que je cherche à réaliser car actuellement le report des données n'est pas fiable selon si j'appuie sur "Entrée" après avoir écrit "ok" ou si j'utilise les flèches pour changer de cellule.

Merci
Elodie
0
re

la proposition de variable li en public, répondait à l'extrait de code du premier message!

aux vues du classeur déposé sur cijoint, le code a changé ! pas facile de s'y retrouver, d'autant que les commentaires n'étouffent pas le code.

Après l'humeur, le boulot:
tu peux écrire:
If Intersect(Target, Range("RFI")) Is Nothing Or Target.Count   > 1 Or Target.Value <> "ok" Then Exit Sub

 CibleLigne = Target.row
 CibleColonne = Target.column
Call FormulaireRFI 

cibleligne et ciblecolonne à déclarer en public dans un module

dans ton userform1 tu sais alors les coordonnées de la cellule ou tu as écris "Ok"
puisque tu as = ligne : CibleLigne et colonne : CibleColonne

tu peux donc écrire :
Cells(CibleLigne,CibleColonne).Value = "Renseigné"

et donner les coordonnées absolues dans le reste du code, plutôt que les coordonnées relatives

Bonne suite
0
Re bonjour Paf,

Alors, ta solution marche pour la colone RFI Received mais pas pour RFQ Received. Est-ce lié au fait que ces deux instructions sont dans le même Private Sub Worksheet_Change(ByVal Target As Range) ?

J'ai essayé en gardant CibleLigne et CibleColonne et en déclarant 2 autres variables publiques mais dans les deux cas ça ne marche pas...
As-tu une idée ?
Merci
0
ce qui est fait pour RFI , ne fonctionne pour RFQ que si la définition des coordonnées de la cellule "Ok" est la même.
voir si la variable ln a une utilité par la suite (dans le userform ?) ; mais tu peux très bien mettre le même code que pour RFI.
CibleLigne et CibleColonne peuvent être utilisées pour les 2; puisqu' on lance un userform ou l'autre et jamais les deux ensembles
il faut penser à adapter le userform RFQ pour que ça fonctionne

A+

NB ton classeur présente une anomalie ( ou alors c'est mon ordi ..!) je ne peux plus modifier le code des modules ( message d'erreurs sur accès DLL)
0
Re,

Par contre, le code ci-dessous crée un bug à chaque fois que je supprime/modifie des données (plage de cellule car cellule par cellule pas de pb) sur la feuille LongList... c'est légèrement génant... et je vois pas comment modifier ça.
Une idée ?
0
Quel code ?
0
Oui pardon, c'est le code lié à la plage RFI :
If Intersect(Target, Range("RFI")) Is Nothing Or Target.Count > 1 Or Target.Value <> "ok" Then Exit Sub

Ca entraine une erreur 13 - Incompatibilité de type
0
re
lDans la Sub Worksheet_Change

If Intersect(Target, Range("RFI")) Is Nothing Or Target.Count > 1 Or Target.Value <> "ok"Then Exit Sub
provoquait la sortie de la sub, même si l'on voulait traiter RFQ en mettant ok dans la zone RFQ !!

donc voila le code modifié pour que l'on traite bien en fonction de la cellule modifiée dans la feuille longlist

'ouvre le formulaire RFI lorsque l'on inscrit quelque chose dans la case de la colonne RFI Received
If Not Intersect(Target, Range("RFI")) Is Nothing And Target.Value = "ok" Then
    CibleLigne = Target.Row
    CibleColonne = Target.Column
    'lance la Macro FormulaireRFI
    Call FormulaireRFI
End If
'insère la date du jour dans la colonne A à chaque mise à jour d'une ligne
If Not Intersect(Target, Range("LastUpdate")) Is Nothing Then
    'Cells(Target.Row, 1).Value = Date
    Cells(Target.Row, 1).Value = Now()
End If
'ouvre le formulaire RFQ lorsque l'on inscrit quelque chose dans la case de la colonne RFQ Received
If Not Intersect(Target, Range("RFQ")) Is Nothing And Target.Value = "ok" Then
   CibleLigne = Target.Row
   CibleColonne = Target.Column
   'lance la Macro FormulaireRFQ
   Call FormulaireRFQ
End If


A+
0
Super ça marche !!!!
Merci beaucoup !

Par contre, ça ne résoud pas le problème de l'erreur Incompatibilité de type mais comme la suppression multiple de cellules n'est pas censée être dans l'utilisation courante du doc, c'est pas un bug bloquant.

Encore merci !
0
dans quelle procedure et quelle ligne cette erreur ?

peut tu remettre ton fichier, je n'ai plus accès à la feuille longlist !

décidemment il y a un problème !!!
0
bonjour Paf,

je reviens vers toi car je n'ai toujours pas réussi à résoudre mon problème d'incompatibilité de type sur ma feuille LongList. Ca bug lorsque j'ajoute une ligne ou lorsque je supprime une plage de cellules.
Dans le code, la ligne qui se surligne en jaune est :
If Not Intersect(Target, Range("RFI")) Is Nothing And Target.Value = "ok"

j'ai essayé de remettre mon fichier sur cijoint mais impossible d'accéder à leur page d'accueil ce matin.

aurais-tu une idée pour me débuger ?

merci !
0
bonjour,
Finalement j'ai résolu mon problème en passant par la "fonction" Select Case.

Merci pour l'aide que tu m'as apporté sur l'ensemble de mon fichier.
Bonne suite.
0