Intersect Union

Fermé
lagodille Messages postés 99 Date d'inscription vendredi 16 novembre 2007 Statut Membre Dernière intervention 6 mars 2008 - 8 janv. 2008 à 21:10
lagodille Messages postés 99 Date d'inscription vendredi 16 novembre 2007 Statut Membre Dernière intervention 6 mars 2008 - 15 janv. 2008 à 06:31
Bonjour,
lorsque j'insère quelque chose en H11 ou L11 par exemple je devrai avoir la cellule qui se colore alors qu'il ne se produit rien.
ci joint mon fichier http://www.cijoint.fr/cij452076843748.xls

merci pour votre aide

27 réponses

phil232 Messages postés 607 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 31 janvier 2008 178
9 janv. 2008 à 17:46
la transmission de pensées n'éxiste pas encore sous Windows. moi, j'ajouterais une macro pour colorié.
0
gildautal Messages postés 16 Date d'inscription samedi 8 décembre 2007 Statut Membre Dernière intervention 9 janvier 2008 3
9 janv. 2008 à 17:54
je ne comprends pas ta réponse puisque :
Private Sub Worksheet_Change(ByVal Target As Range)

Dim MytargetPart1 As Range
Dim MytargetPart2 As Range
Dim MyBigtarget As Range
Dim Mytargetmdp1 As Range
Dim Mytargetmdp2 As Range
Dim MyBigtargetmdp As Range


Set MytargetPart1 = Union([I11], [I14], [I17], [I20], [I23], [I26], [I41], [I44], [I47], [I50], [I53], [I56], [I71], [I74], [I77], [I80], [I83], [I86], [I101], [I104], [I107], [I110], [I113], [I116])
Set MytargetPart2 = Union([I131], [I134], [I137], [I140], [I143], [I146], [I161], [I164], [I167], [I170], [I173], [I76], [I191], [I194], [I197], [I200], [I203], [I206])

If Intersect(Target, Union(MytargetPart1, MytargetPart2)) Is Nothing Then Exit Sub
If Target.Offset(0, 0).Value = "X" Or Target.Offset(0, 0).Value = "x" Then Target.Offset(0, 0).Value = "X"
If Target.Offset(0, 0).Value = "X" Then
Target.Offset(0, -4).Resize(3, 4).ClearContents
Target.Offset(0, 1).Resize(3, 4).ClearContents
End If


Set Mytargetmdp1 = Union([H11:H28], [H41:H58])
Set Mytargetmdp2 = Union([L11:L28], [L41:L58])

If Intersect(Target, Union(Mytargetmdp1, Mytargetmdp2)) Is Nothing Then Exit Sub
If Target.Offset(0, 0).Value <> "" Then Target.Offset(0, 0).Interior.ColorIndex = 3

End Sub

je colore bien avec "Interior.ColorIndex = 3" non ?
0
lagodille Messages postés 99 Date d'inscription vendredi 16 novembre 2007 Statut Membre Dernière intervention 6 mars 2008 4
9 janv. 2008 à 18:08
pour phil
d'abord dans ma procédure je colorie bien la case (voir le précedent post), ensuite mon problème réside surtout dans le fait que je n'arrive pas à concretiser cela :

Set Mytargetmdp1 = Union([H11:H28], [H41:H58])
Set Mytargetmdp2 = Union([L11:L28], [L41:L58])

If Intersect(Target, Union(Mytargetmdp1, Mytargetmdp2)) Is Nothing Then Exit Sub
If Target.Offset(0, 0).Value <> "" Then Target.Offset(0, 0).Interior.ColorIndex = 3

Si je l'esaye toute seule ca marche mais placé dans ma sub ca ne marche plus !

merci de m'éclairer
0
phil232 Messages postés 607 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 31 janvier 2008 178
9 janv. 2008 à 18:25
je travaille dans une banque c'est peut-être pour ça (sécurité et copagnie), pardon :(
0
phil232 Messages postés 607 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 31 janvier 2008 178
9 janv. 2008 à 18:32
qq chose dont je me sers souvent c'est Tools --> Macro --> Record New Macro

peut-être tu verras qu'Excel utilise un autre range
0
lagodille Messages postés 99 Date d'inscription vendredi 16 novembre 2007 Statut Membre Dernière intervention 6 mars 2008 4
9 janv. 2008 à 21:24
merci pour ton immense aide mais editer des macros avec des conditions moi je ne sais pas faire.
De plus si je pose des questions c'est que j'ai quand meme au préalable cherché un peu.
Maintenant j'espérai que quelqu'un m'aide car je suis sur que pour un pro c'est du gateau
0

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

Posez votre question
Bonsoir lagodille

Tu changerais sans doute de couleur en modifiant quelque chose dans tes zones Mytargetmdp1 ou Mytargetmdp2, mais...
Tu as déjà fait un exit sub avant ! au niveau de la ligne If Intersect(Target, Union(MytargetPart1, MytargetPart2)) Is Nothing Then Exit Sub
0
lagodille Messages postés 99 Date d'inscription vendredi 16 novembre 2007 Statut Membre Dernière intervention 6 mars 2008 4
10 janv. 2008 à 00:15
Je suis d'accord mais alors comment est il possible de mélanger les deux ?
0
tu ne connais pas
if.. then
else
endif
?
0
lagodille Messages postés 99 Date d'inscription vendredi 16 novembre 2007 Statut Membre Dernière intervention 6 mars 2008 4
10 janv. 2008 à 20:36
bien sur que si et j'ai essayé plusieurs possibilités mais sans succès et visiblement ce n'est pas si facile que cela car personne ne m'a apporté encore la bonne solution
cordialement
0
Il ne s'agit pas d'essayer plusieurs possibilités, la simple logique permet d'écrire directement la bonne. Il suffit d'un if-then-else

acuellement tu as :

if condition1 then exit sub
traitement1

préparation traitement 2
if condition2  then
  traitement 2
end if

dès que la condition 1 est remplie, le traitement 2 est sûr de ne jamais être exécuté
il suffit de faire

if NOT condition1 then
  traitement1
else
  préparation traitement 2
  if condition2  then
    traitement 2
  end if
endif
0
lagodille Messages postés 99 Date d'inscription vendredi 16 novembre 2007 Statut Membre Dernière intervention 6 mars 2008 4
11 janv. 2008 à 07:43
ca parait tellement simple pour toi !!!
bref je n'y arrive pas car je ne maitrise pas mes deux intersect
j'ai bien essaye ta soluce mais ca tourne au vinaigre, il y a toujours quelque chose qui cloche et je tourne en rond.
ca fait une semaine que je suis dessus et c'est rageant
bonne journée quand meme
0
Il ne s'agit pas de maîtriser les intersect ou tout ce qu'il y a dans les traitements. Ton problème n'est absolument pas à ce niveau.
Il s'agit seulement de comprendre comment le if then else endif détermine quelle partie du programme est ou n'est pas exécutée

Je viens d'essayer ma solution et elle marche.
Qu'est-ce qui selon toi cloche encore ? comment as-tu essayé de l'appliquer ? As-tu bien déterminé ce qui constituait le traitement 1, a préparation au traitement 2 et le traitement 2 ?
0
lagodille Messages postés 99 Date d'inscription vendredi 16 novembre 2007 Statut Membre Dernière intervention 6 mars 2008 4
11 janv. 2008 à 10:35
Private Sub Worksheet_Change(ByVal Target As Range)

Dim MytargetPart1 As Range
Dim MytargetPart2 As Range
Dim MyBigtarget As Range
Dim Mytargetmdp1 As Range
Dim Mytargetmdp2 As Range
Dim MyBigtargetmdp As Range

'If Not condition1 Then
' traitement1
'Else
' préparation traitement 2
' If condition2 Then
' traitement 2
' End If
'End If


Set MytargetPart1 = Union([I11], [I14], [I17], [I20], [I23], [I26], [I41], [I44], [I47], [I50], [I53], [I56], [I71], [I74], [I77], [I80], [I83], [I86], [I101], [I104], [I107], [I110], [I113], [I116])
Set MytargetPart2 = Union([I131], [I134], [I137], [I140], [I143], [I146], [I161], [I164], [I167], [I170], [I173], [I76], [I191], [I194], [I197], [I200], [I203], [I206])

'If Intersect(Target, Union(MytargetPart1, MytargetPart2)) Is Nothing Then Exit Sub
If Intersect(Target, Union(MytargetPart1, MytargetPart2)) Is Nothing Then 'Exit Sub

Set Mytargetmdp1 = Union([H11:H28], [H41:H58])
Set Mytargetmdp2 = Union([L11:L28], [L41:L58])

If Intersect(Target, Union(Mytargetmdp1, Mytargetmdp2)) Is Nothing Then Exit Sub

If Target.Offset(0, 0).Value <> "" Then If Target.Offset(0, 0).Value <> "" Then UserForm3.Show

Else
If Target.Offset(0, 0).Value = "X" Or Target.Offset(0, 0).Value = "x" Then Target.Offset(0, 0).Value = "X"
If Target.Offset(0, 0).Value = "X" Then
Target.Offset(0, -4).Resize(3, 4).ClearContents
Target.Offset(0, 1).Resize(3, 4).ClearContents
End If

End If

'End If

End Sub

Plus je me penche dessus moins je vois et si j''enlève le is nothing then c'est mon intersect qui ne fonctionne plus !
0
ça a l'ai bien sauf que ...

Target.Offset(0, 0) te renvoie dans un certain nombre de cas un objet range qui fait plus d'une cellule. Dans ce cas, Target.Offset(0, 0).Value ne veut rien dire et provoqie une erreur.
Remplace systématiquement tous tes Target.Offset(0, 0).Value par Target.Cells(1, 1).Value (seulement ceux avec .value )

Remarque : Target.Offset(0, 0) veut dire la même chose que Target, ou alors explique moi la différence
0
lagodille Messages postés 99 Date d'inscription vendredi 16 novembre 2007 Statut Membre Dernière intervention 6 mars 2008 4
11 janv. 2008 à 20:25
Merci car enfin ca fonctionne . Je n'aurai jamais trouvé "Remplace systématiquement tous tes Target.Offset(0, 0).Value par Target.Cells(1, 1).Value " ne connaissant pas cette subtilité.
merci pour ton aide précieuse

j'ai une question subsidiaire :
tu as vu que j'utilisai un UserForm pour mon MDP seulement si le test MDP est mauvais, j'aimerai que le target.cells(1,1) retrouve sa valeur initiale c'est à dire "" et je ne sais pas faire

cordialement
0
ne connaissant pas cette subtilité
Moi non plus je ne la connaissais pas. Mais quand VBA m'a dit qu'il ne voulait pas me donner la valeur (.value) d'un range, j'ai demandé dans la fenêtre debug les éléments du range, c'est à a dire target.column, target.row, target.colums.count et target.rows.count, pour vérifier sur quel range il était en train de travailler. Quand j'ai vu qu'il y avait plusieurs cellules, le reste devenait évident.

Question subsidiaire : tu parles de la ligne
If Target.Offset(0, 0).Value <> "" Then If Target.Offset(0, 0).Value <> "" Then UserForm3.Show
d'abord, tu testes 2 fois , je suppose que ça vient d'une recopie malheureuse
partons de
If Target.cells(1, 1).Value <> "" Then UserForm3.Show
pour effacer le contenu erroné, tu as juste à faire
If Target.cells(1, 1).Value <> "" Then
Target.cells(1, 1) = ""
UserForm3.Show
endif
0
lagodille Messages postés 99 Date d'inscription vendredi 16 novembre 2007 Statut Membre Dernière intervention 6 mars 2008 4
12 janv. 2008 à 10:40
Oui mais à la différence près que dans ce cas quelque soit l'issue du mot de passe bon ou mauvais il me fera un remise à "" de la cellule.
j'ai pensé :
dans le userform: si mauvais MDP alors call sub qui m'insere un 1 dans une cellule dans OP1
puis dans le code OP1 après appel du userform , si cellule = 1 alors cell . value =""

mais peut etre y a t il plus simple ?

pascal
0
lagodille Messages postés 99 Date d'inscription vendredi 16 novembre 2007 Statut Membre Dernière intervention 6 mars 2008 4
12 janv. 2008 à 11:07
par rapport à mon post 18 , j'ai essayé ceci
If Target.Cells(1, 1).Value <> "" Then
UserForm3.Show
If Range("O1") = "1" Then Target.Cells(1, 1) = ""
End If

visiblement il ne retrouve pas mon target donc mauvaise soluce
0
Si Userform3 sert juste à saisir le mot de passe , tu n'en as pas besoin. Utilise la fonction inputbox

If Target.Cells(1, 1).Value <> "" Then
if inputbox("Entrez le mot de passe : ","MOT DE PASSE")<>"****" then
Target.Cells(1, 1) = ""
( ici peut-être exit sub, ça dépende de ce que tu veux faire...)
end if
End If
0
lagodille Messages postés 99 Date d'inscription vendredi 16 novembre 2007 Statut Membre Dernière intervention 6 mars 2008 4
12 janv. 2008 à 12:03
merci pour l'info mais je desire garder mon userform (possibilité via un admin de modifier les accès).
mais peut etre que ce que je demande n'est pas possible avec un userform ?
0
Si, ça peut marcher avec un Userform, je viens de faire l'essai. Le problème n'est pas là, peut être que dans ta cellule O1 tu mets la valeur numérique 1 et non pas le texte "1". Il n'y a a priori aucune raison qu'il ne retrouve pas ton target, et s'il y en a une on doit pouvoir la comprendre. Peux-tu montrer le code intéressant de UserForm3 ?
Au passage, au lieu d'utiliser une cellule O1 (visible à l'écran) il vaut mieux utiliser une variable modifiée dans UserForm3 et testée dans Worksheet_Change.
0