Bonjour,
En A1, j'ai une liste déroulante avec comme choix "Non affecté", "Pris en charge", "Affectation manuelle", "Clôturé".
En B1, j'ai une liste déroulante avec comme choix "Julien DUPON", "André DURANT", "Marie PIERRE".
Je souhaite que lorsqu'un utilisateur (fichier utilisé en partage collaboratif) modifie la cellule A1, il se passe quelque chose en B1.
Et inversement, que lorsqu'un utilisateur modifie la cellule en B1, il se passe quelque chose en A1.
Le problème que j'ai ai qu'on a vite fait de tourner en rond avec ma macro car chaque cellule modifiant l'autre entraîne une boucle...
J'ai donc essayé de verrouiller mon besoin à savoir :
- Si en A1 la modification apportée est "Non affecté" alors ne rien mettre en B
Sinon si en A1 c'est autre chose que "Non affecté" alors mettre le nom de l'utilisateur en cours (récupéré via Application.Username) en B2.
- Si en B1 le modification est apportée mais qu'en A1 c'est "Affectation manuelle" alors s'arrêter
Sinon si en B1 une modification est apportée et qu'en A1 c'est différent de "Affectation manuelle" alors si le nom de l'utilisateur choisi dans la liste déroulante de B1 est identique au Application.Username dans ce cas mettre A1 en "Pris en charge" sinon ne rien faire.
Avec la macro suivant j'ai 90% des situations qui fonctionne et uniquement une qui me fait planter la macro : si en B1 je mets la modification de B1 = mon Application.Username, j'ai un message d'erreur "Erreur la méthode Value de l'objet Range a échoué".
Il semblerait que l'erreur soit causé par cette ligne précisément car quand je l'enlève tout le reste de la macro fonctionne parfaitement bien :
=> If Range("B1").Value = Application.UserName Then
Quelqu'un aurait-il une idée de mon erreur et comment la résoudre ?
Merci d'avance pour votre aide :)
Aurélien
VOICI MA MACRO :
Private Sub Worksheet_Change(ByVal Target As Range)
Dim UserName_1 As String
UserName_1 = Application.UserName
Sheets("Feuil1").Activate
Set isect = Application.Intersect(Target, Range("A:A"))
If isect Is Nothing Then
'MsgBox "Ranges do not interse
ct"
Else
'MsgBox "test"
If Range("A1").Value = "Affectation manuelle" Then Exit Sub
If Range("A1").Value = "Non affecté" Then
Range("B1").Value = ""
GoTo Fin
End If
Range("B1").Value = Application.UserName
isect.Select
End If
Set isect = Application.Intersect(Target, Range("B:B"))
If isect Is Nothing Then
'MsgBox "Ranges do not intersect"
Else
'MsgBox "test"
If Range("B1").Value = "" Then GoTo Fin
If Range("B1").Value = Application.UserName Then
End If
GoTo Suite
End If
If Range("B1").Value <> UserName_1 Then
Range("A1").Value = "Affectation manuelle"
isect.Select
GoTo Fin
Suite:
Range("A1").Value = "Pris en charge"
isect.Select
GoTo Fin
End If
Fin:
End Sub