Pb Excel : validation de cellule & ActiveCell
Résolu/Fermé
A voir également:
- Pb Excel : validation de cellule & ActiveCell
- Liste déroulante excel - Guide
- Formule excel - Guide
- Si et excel - Guide
- Aller à la ligne excel - Guide
- Mise en forme conditionnelle excel - Guide
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
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
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
bonjour
si tu écris "Ok" en cells(li,1), dans ton formulaire tu peux écrire :
il faudra déclaré li comme variable publique dans un module pour être connue dans tout ton projet
Bonne suite
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
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
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
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
24 août 2011 à 22:46
Pour déclarer une variable publique, il suffit d'écrire seulement
Public li As Longau début d'un module standard dans la zone déclaration (avant les Sub et Function)
re
dans un module tu écris simplement:
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+
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+
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
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)
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+
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+
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
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
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
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
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/
Met un exemple de ton fichier sur http://cijoint.fr/
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
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
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:
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
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
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
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
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)
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)
re
lDans la Sub Worksheet_Change
donc voila le code modifié pour que l'on traite bien en fonction de la cellule modifiée dans la feuille longlist
A+
lDans la Sub Worksheet_Change
If Intersect(Target, Range("RFI")) Is Nothing Or Target.Count > 1 Or Target.Value <> "ok"Then Exit Subprovoquait 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+
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 !
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 !