Effacement conditionnel d'une plage de donnée

sniper2002

XLDnaute Occasionnel
Bonjour

Dans une feuil1 je souhaite instaurer une règle de saisie :
Pour chaque saisie dans la colonne F (à partir F15) il m'efface le contenu de la plage G15 : Z15, avec un vérouillage de cette plage

NB : Avec le menu validation je ne trouve pas l'interactivité lorsqu'un utilisateur revient pour saisir une donnée dans la cellule F15, la plage de donnée G15 : Z15 garde les données initililes, même si j'ai bien personnalisé la validation de données !!? (sauf erreur de ma part).

L'objectif est d'avoir une interactivité dans la feuil1 si jamais l'utilisateur revient sur saisie.

Merci pour votre aide.
 

roro69

XLDnaute Impliqué
Re : Effacement conditionnel d'une plage de donnée

Bonjouir
A essayer avec cette macro événementielle :
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Plage As Range
Set Plage = Range("F15:F200")
If Application.Intersect(Target, Plage) Is Nothing Then: Exit Sub: Else: For x = 1 To 15: Target.Offset(0, x).ClearContents: Next
End Sub
 

sniper2002

XLDnaute Occasionnel
Re : Effacement conditionnel d'une plage de donnée

re
merci pour ta réponse, ça marche, est ce que tu peux m'expliquer la synthaxe de cette ligne stp :
If Application.Intersect(Target, Plage) Is Nothing Then: Exit Sub: Else: For x = 1 To 15: Target.Offset(0, x).ClearContents: Next
histoire que je puisse capitaliser pour l'avenir
merci
 

roro69

XLDnaute Impliqué
Re : Effacement conditionnel d'une plage de donnée

Bonjour:
En décomposant
If Application.Intersect(Target, Plage) Is Nothing Then: Exit Sub


On vérifie si la sélection est contenue dans la plage si elle ne l'est pas donc "exit sub " on sort de la procédure
Si elle y'est donc on continu dans la procédure donc:
Else: For x = 1 To 15: Target.Offset(0, x).ClearContents: Next
On charge un valeur x de 1 à 15 ce qui correspond au colonne G à Z,ensuite "Target"(cellule active).OFFSET(0,x),le 0 = la ligne donc on reste sur la même ligne ,le x la colonne et la "Next" on boucle sur les colonnes
A++
 

sniper2002

XLDnaute Occasionnel
Re : Effacement conditionnel d'une plage de donnée

Bonjour

Je tiens tout d'abord à vous souhaiter une bonne année 2012, avec un pogrès sans limite sur Excel pour l'ensemble des membres du forum.


Je reviens à la charge sur ce topic. La solution qui m'a été proposé, répondait à mon besoin, je pu comprendre comment cela fonctionne.
Cependant je me suis rendu compte lorsque je suprimme ou j'insere une ligne, il m'affiche une un débocage en signalant en jaume le "Next".

Je signale que la ligne se supprime malgré le message d"erreur.


Private Sub Worksheet_Change(ByVal Target As Range)
Dim Plage As Range
Set Plage = Range("F15:F65000")
If Application.Intersect(Target, Plage) Is Nothing Then: Exit Sub: Else: For x = 1 To 2: Target.Offset(0, x).ClearContents: Next
If Application.Intersect(Target, Plage) Is Nothing Then: Exit Sub: Else: For x = 5 To 150: Target.Offset(0, x).ClearContents: Next
End Sub

Comment on peut contourner cela.
Merci d'avance pour votre aide.
 

JNP

XLDnaute Barbatruc
Re : Effacement conditionnel d'une plage de donnée

Bonjour le fil :),
Pour que ton code ne beugue pas, il faut sortir de la sub en cas de sélection multiple, donc en début de Sub
Code:
If Target.Count > 1 Then Exit Sub
Par contre, je ne vois pas trop l'intérêt des 2 tests et des 2 boucles
Code:
If Application.Intersect(Target, Plage) Is Nothing Then
Exit Sub
Else
Target.Offset(0, 1).Resize(, 2).ClearContents
Target.Offset(0, 5).Resize(, 145).ClearContents
End If
fonctionnera aussi bien :rolleyes:...
Bonne suite :cool:
 

sniper2002

XLDnaute Occasionnel
Re : Effacement conditionnel d'une plage de donnée

RE
j'ai toujours le même problème. si j'ai bien compris le code est le suivant :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Plage As Range
Set Plage = Range("F15:F65000")

If Target.Count > 1
Then Exit Sub
end if

If Application.Intersect(Target, Plage) Is Nothing
Then Exit Sub
Else
Target.Offset(0, 1).Resize(, 2).ClearContents
Target.Offset(0, 5).Resize(, 145).ClearContents
End If
End sub.

Merci pour votre aide.
 

JNP

XLDnaute Barbatruc
Re : Effacement conditionnel d'une plage de donnée

Re :),
A priori tu as un Then sur la ligne du dessous :rolleyes:...
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Plage As Range
Set Plage = Range("F15:F65000")
If Target.Count > 1 Or Application.Intersect(Target, Plage) Is Nothing Then Exit Sub
Target.Offset(0, 1).Resize(, 2).ClearContents
Target.Offset(0, 5).Resize(, 145).ClearContents
End Sub
Tester en suppression et en insertion, pas de soucis :p...
Bonne suite :cool:
 

sniper2002

XLDnaute Occasionnel
Re : Effacement conditionnel d'une plage de donnée

Super, merci.

une petite perfection si c'est possible? j'ai une formule dans la colonne D à partir de la ligne 15, une simple rechercheV :
"=SI($C15="";"";RECHERCHEV($C15;Nomenclatures!$B$8:$C$424;2;FAUX))"

Est ce que c'est possible lorsqu'on insere une ligne il reprend la formule au dessus ou au dessous ? histoire d'éviter d'avoir cellules vides.

Merci bcp pour votre aide.
 

sniper2002

XLDnaute Occasionnel
Re : Effacement conditionnel d'une plage de donnée

je viens de me rendre compte que le fichier est en xls(2003) et non pas xlsx (2007). et la conversion n'est pas possible ! (problème de compatibilité pour l'utilisateur .....)
Donc j'aurai besoin d'un complement de code pour reintégrer la formule dans la ligne inserer (juste la pour les cellules en colonne D).
Merci pour votre aide
 

JNP

XLDnaute Barbatruc
Re : Effacement conditionnel d'une plage de donnée

Re :),
Euh, c'est pas "un petit supplément de code", mais bien un gros problème pour savoir si tu viens d'insérer une ligne ou pas :eek:...
Fait passer ton utilisateur en 2007, ce sera le plus simple :p...
Sinon, il faudrait regarder du côté du fichier (de Skooby il me semble) qui suivait les modifications pour voir comment intercepter ce type d'événement, mais ce ne sera pas de la tarte :rolleyes:...
Bon courage :cool:
 

Discussions similaires

Statistiques des forums

Discussions
312 493
Messages
2 088 955
Membres
103 989
dernier inscrit
jralonso