PROBLEME D'IDENTIFICATION DE CELLULE

cs_Berrot Messages postés 7 Date d'inscription vendredi 12 décembre 2008 Statut Membre Dernière intervention 20 juin 2009 - 18 juin 2009 à 17:42
cs_Berrot Messages postés 7 Date d'inscription vendredi 12 décembre 2008 Statut Membre Dernière intervention 20 juin 2009 - 20 juin 2009 à 19:30
Bonjour ou bonsoir à tous et merci d’avance pour l’intérêt  que vous voudrez bien porter à mon problème.



Système d’exploitation:
Windows Vista.




Excel 2007.




<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>

 





J’ai une macro que je voudrais faire fonctionner comme suit :



Lorsque la plage de cellules  F6 à T6 est vide et que je clique sur la cellule C6 il faut que rien ne se passe sur  F6 à T6 et que la MsgBox  n’apparaisse pas et que l’on puisse saisir dans la cellule C6.



Ensuite  lorsque, une, plusieurs, ou toutes les cellules de la plage F6 àT6 est ou sont remplies et que je clique sur la cellule “C6“ une MsgBox apparaisse. «si vous voulez modifier le contenu de cette cellule la ligne 6 sera effacée» : si on clique sur non rien ne se passe  et “F6“ est sélectionnée.  Si on clique sur oui, “C6“ et “ F6 à T6“ sont effacées. Cellule C6 sélectionnée.




 







DANS TOUS LES CAS AVANT DE RENSEIGNER UNE DES CELLULES DE LA PLAGE “F6 :T6“ IL FAUT QUE LA CELLULE “C6“ SOIT RENSEIGNEE (les cellules sont renseignées en numéro ou en chiffre).






 





Voici la macro que j’ai faite, elle fonctionne bien comme je désire,  mais mon problème est qu’elle fonctionne si seulement une des  cellules de la plage “F6 àT6“ est programmée.  




Ex:  If Range (“F6”) <> “” Then






(CELLULE “C6“ RENSEIGNEE, CELLULE  “F6” VIDE, CLIC SUR “C6“ RIEN NE SE PASE  ON PEUT SAISIR DANS “C6“.   



CELLULE  “F6” RENSEIGNEE, CLIC SUR “C6“ MsgBox. “si vous voulez modifier le contenu de cette cellule la ligne 6 sera effacée” CLIC SUR OUI, TOUT S’EFFACE, CELLULE  “C6“ SELECTIONNEE.



CLIC SUR NON, RIEN NE SE PASSE, CELLULE “F6“ SELECTIONNEE.




 





Si je programme toute la ligne comme suit :



If Range (“F6 :T6 “) <> ““  Then



Lorsque j’exécute la macro en cliquant  sur la cellule “C6“, une boîte de dialogue apparaît,



« Erreur d’exécution  ‘13 ‘ incompatibilité de type »



Je clique sur débogage et :  If Range (“ F6 :T6 “)<> ““ Then  est surlignée en jaune.



Après plusieurs modification et recherche sur le Net, je n’ai pu résoudre ce problème.




Pouvez-vous  me dire où se situe le problème ?





Encore merci pour votre aide.





 







Voici  la macro sous ses trois aspects.






 







CELLE-CI  FONCTIONNE  BIEN  MAIS  QUE  SUR  UNE  CELLULE






 
 





Private Sub Worksheet_SelectionChange(ByVal Target As Range)







Dim Plage As Range, Intersection As Range








 Application.EnableEvents = False







Set Plage = Range("C6")








    Set Intersection = Application.Intersect(Plage, Target)








   If Not Intersection Is Nothing Then







 


If Range("F6") <> "" Then


         





   
Dim a As Long






a = MsgBox("si vous voulez modifier le contenu de cette cellule la ligne 6 sera effacée!", vbYesNo)




   If a = (vbNo) Then




        ' il a cliqué sur NON




    
Range("F6").Select







ElseIf a = (vbYes) Then








       
' il a cliqué sur OUI




[C6:D6,F6:T6].ClearContents








            End If








            End If








          End If







Application.EnableEvents = True








 
End Sub




 








CELLE-CI  NE  FONCTIONNE  PAS


     (DEBOGAGE)




 






Private Sub Worksheet_SelectionChange(ByVal Target As Range)







Dim Plage As Range, Intersection As Range








 Application.EnableEvents = False







Set Plage = Range("C6")








    Set Intersection = Application.Intersect(Plage, Target)








   If Not Intersection Is Nothing Then








 


If Range("F6:T6") <> "" Then












    Dim a As Long






a = MsgBox("si vous voulez modifier le contenu de cette cellule la ligne 6 sera effacée!", vbYesNo)




   If a = (vbNo) Then




        ' il a cliqué sur NON




    
Range("F6").Select







ElseIf a = (vbYes) Then








       
' il a cliqué sur OUI




[C6:D6,F6:T6].ClearContents








            End If








            End If








          End If







Application.EnableEvents = True








 
End Sub





CELLE-CI  FONCTIONNE, MAIS , MÊME  SI LA PLAGE DE CELLULES  (“F6 :T6“) EST VIDE  ET QUE  JE CLIQUE SUR “C6“ LA MsgBox  S’AFFICHE  ALORS  QU’ELLE  NE  DEVRAIT  PAS  S’AFFICHER  SI  LA PLAGE  DE  CELLULES  (“F6 :T6“) EST  VIDE.






Private Sub Worksheet_SelectionChange(ByVal Target As Range)







Dim Plage As Range, Intersection As Range








 Application.EnableEvents = False







Set Plage = Range("C6")








    Set Intersection = Application.Intersect(Plage, Target)








   If Not Intersection Is Nothing Then








 


If Target.Cells = ("F61:T61") <> ("") Then












    Dim a As Long






a = MsgBox("si vous voulez modifier le contenu de cette cellule la ligne 6 sera effacée!", vbYesNo)




   If a = (vbNo) Then




        ' il a cliqué sur NON




    
Range("F6").Select







ElseIf a = (vbYes) Then








       
' il a cliqué sur OUI




[C6:D6,F6:T6].ClearContents








            End If








            End If








          End If







Application.EnableEvents = True








 
End Sub

3 réponses

us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
19 juin 2009 à 15:36
Bonjour,

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

' Vérifie que la selection courante est C6 sinon sort
If Target.Address <> "$C$6" Then Exit Sub

' Test si toutes la plage C6:T6 est remplie sinon sort
Dim Plage As Range, Cellule As Range
Set Plage = Range("F6:T6")
For Each Cellule In Plage
    If Cellule.Value = vbNullString Then Exit Sub
Next

' Message avertissement pour confimation effacement
If vbYes = MsgBox("si vous voulez modifier le contenu de cette cellule la ligne 6 sera effacée!", vbYesNo) Then
    [C6,F6:T6].ClearContents
Else
    Range("F6").Select
End If

End Sub

Amicalement,
Us.
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
19 juin 2009 à 15:45
euh oui... en relisant ton charabia, je ne suis pas sur de bien comprendre... Mais, tu auras compris que pour passer en revue une plage de cellule tu peux utiliser FOR EACH...

Amicalement,
Us.
0
cs_Berrot Messages postés 7 Date d'inscription vendredi 12 décembre 2008 Statut Membre Dernière intervention 20 juin 2009
20 juin 2009 à 19:30
salut us_30

merci pour ta réponse rapide et pour t'être intéressé à mon (charabia)problème.

je vais tester ta  réponse. merci pour le conseil  FOR EACH, je ne savais pas car je débute en programmation macro.

Cordialement
Berrot
0
Rejoignez-nous