Effacer le contenu de cellules si ....

Résolu/Fermé
anthony - 12 oct. 2010 à 10:52
Mike-31 Messages postés 18310 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 29 mars 2024 - 20 oct. 2010 à 15:13
Bonjour,

voici ma recherche. j'ai une base de données.
dans la colonne D j'indique l'indice de révision de chaque document recensé.
si le document est créé, il a l'indice A. s'il a été modifié 4 fois il a l'indice E etc etc.
dans les colonnes H, I, J, K et L j'ai des dates et des liens hypertextes.

j'aimerais que les cellules (H:K) deviennent vides dès que la cellule D est modifiée (l'indice prend la valeur alphabet actuelle +1)

comment procéderiez vous ?

amicalement

12 réponses

Mike-31 Messages postés 18310 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 29 mars 2024 5 073
Modifié par Mike-31 le 12/10/2010 à 11:33
Salut,

Jette un oeil sur cette discussion le code peut être facilement adapté à tes besoin, à la place de coloriser en rose en vérrouiller le cellule il suffit de l'effacer

https://forums.commentcamarche.net/forum/affich-19344173-cellule-coloriee-si-reactive#p19459360

Pour l'adapter à ton fichier, il faudrait nous le joindre avec ce lien

https://www.cjoint.com/

A+
Mike-31

Une période d'échec est un moment rêvé pour semer les graines du savoir.
0
https://www.cjoint.com/?0kml7f6zCFB
voici le fichier
j'ai donc du formatage conditionnel sur chaque ligne si le doc est à envoyer, envoyé, l'AR reçu (ça explique les différentes couleurs)
et si je change l'indice de révision de la première ligne, peut on faire en sorte que l'indice de révision de la seconde ligne soit également automatiquement changé vu qu'il s'agit du même document ?!
0
Mike-31 Messages postés 18310 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 29 mars 2024 5 073
12 oct. 2010 à 13:48
Re,

J'ai récupéré ton fichier, en fait tu souhaites que si les valeurs de la colonne D sont modifiées 4 fois, les cellules de H à K soit effacées, c'est bien cela !
0
non un seul changement doit effacer les autres cellules.
donc avec le fichier joint, le document serait mis à jour donc on entrerait dans la base de données et pour le premier doc, on remplacerait "L" par "M3.
si c'était les autres doc on passerait de "F" à "G"

Les valeurs de le colonne D ne peuvent avancer que de +1
0
Mike-31 Messages postés 18310 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 29 mars 2024 5 073
12 oct. 2010 à 14:20
Re,

Avant d'écrire ton code j'essaye de comprendre, colonne D tu saisis des lettres, si ces lettres changent une fois, on efface les données des cellules de H à K

détaille moi cette phrase,
entrerait dans la base de données et pour le premier doc, on remplacerait "L" par "M3.
si c'était les autres doc on passerait de "F" à "G"


En D tu rencontres que les lettres L et F !
par exemple en D tu as L par quelle lettre remplaces tu le L par M3 ou c'est la macro qui doit faire le changement sur quel critère

Idem si en D tu as F tu le remplaces par G
0
Bonjour,
en fait le fichier que j'ai joint est utilisé actuellement donc nous sommes déjà aux versions L et F pour les documents mis en exemple.
imaginons qu'aujourd'hui j'écrive une nouvelle procédure. celle ci serait référencée dans ma base avec le numéro "00000001" révision "A" et le titre "ma procédure". J'envoie ce document aujourd'hui à la société A et B. j'inscris les dates dans la colonne H. la société A me retourne l'AR, j'inscris la date en colonne I avec le fichier en lien hypertexte en colonne L.
la société B ne me renvoie rien donc je procède à différentes relances que je note en colonnes J et K.
Dans un mois je vais me rendre compte que j'ai oublié une information dans ma procédure, donc j'insère cet oubli dans mon doc. je vais dans ma base de données et je change la lettre de révision (colonne D), je marque B. et quand ce changement se fait, j'aimerais que la seconde ligne soit aussi en révision B et que les colonnes H, I, J, K et L deviennent vides car je dois renvoyer le document mis à jour.
et ainsi le formatage conditionnel montrera à l'assistante que le doc doit être envoyé car les deux lignes sont vertes.

je ne sais pas si je suis clair :-/
0

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

Posez votre question
Personne n'aurait une macro à me proposer ?!
0
Mike-31 Messages postés 18310 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 29 mars 2024 5 073
18 oct. 2010 à 16:40
Re,

Plusieurs discussions pertinentes en même temps j'avais zappé la tienne excuse
Fais un clic droit sur l'onglet de ta feuille/Visualiser le code et colle ce code

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect([D8:D250], Target) Is Nothing Then
If Target = "B" Then
Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target.Offset(1, -1) = Target.Offset(0, -1) Then Target.Offset(1, 0) = Target
End If
End If
End Sub

Lorsque tu saisiras un B majuscule les quatres cellules de la ligne, colonne H, I, J et K s'effaceront, si à la ligne inférieure la même valeur est en colonne C, colonne D sera saisi automatiquement un B et les cellules de la ligne, colonne H, I, J et K seront également effacées
0
J'ai essayé et ça fonctionne du tonerre.
par contre tu vas dire que je suis très pénible mais ça ne fonctionne que pour les documents nouvellement créés qui sont A et passeront en B lors d'une mise à jour.
j'ai des documents anciens qui sont déjà C, D .... comment modifier le VBA pour que ça fonctionne aussi pour eux ?
concrètement j'ai le document 3 qui est C et il passe en D
le document 26 est G et il passe en H
0
Mike-31 Messages postés 18310 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 29 mars 2024 5 073
Modifié par Mike-31 le 19/10/2010 à 11:21
Re,

je t'écris un code dans l'après midi

et jusqu'a quelle lettre dois tu aller de A à Z !

A+
Mike-31

Une période d'échec est un moment rêvé pour semer les graines du savoir.
0
si on atteint Z, on continue avec AA, AB, AC etc
pour ma base actuelle ce n'est pas encore le cas mais le projet va être déployer sur uen base plus importante avec des documents en version AG
0
Mike-31 Messages postés 18310 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 29 mars 2024 5 073
19 oct. 2010 à 14:45
Clic droit sur l'onglet de feuille concerné/Visualiser le code et remplace l'ancien code par ce dernier qui prendra en compte tous changement jusqu'à AZ

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect([D8:D250], Target) Is Nothing Then
If Target = "B" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "C" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "D" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "E" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "F" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "G" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "H" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "I" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "J" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "K" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "L" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "M" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "N" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "O" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "P" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "Q" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "R" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "S" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "T" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "U" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "V" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "W" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "X" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "Y" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "Z" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "AA" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "AB" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "AC" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "AD" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "AE" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "AF" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "AG" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "AH" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "AI" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "AJ" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "AK" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "AL" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "AM" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "AN" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "AO" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "AP" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "AQ" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "AR" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "AS" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "AT" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "AU" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "AV" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "AW" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "AX" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "AY" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "AZ" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents

If Target.Offset(1, -1) = Target.Offset(0, -1) Then Target.Offset(1, 0) = Target
End If
End Sub

0
trop fort tu es
ça fonctionne nickel
ça va faire gagner quelques secondes à chaque fois et surtout ça va réduire le nombre d'erreur de saisie.
juste une question. si l'assistante se plante et change la lettre par inadvertance, la fonction "annuler" n'est plus utilisable, seule la fermeture du fichier fera revenir à l'état précédent ?!

en tous les cas je te remercie pour ta réactivité et ta solution.
je n'hésite pas àrevenir vers toi dès que j'ai uen autre idée ^^
0
Mike-31 Messages postés 18310 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 29 mars 2024 5 073
19 oct. 2010 à 15:47
Effectivement si tu te trompes le seul recours est de fermer sans enregistrer et réouvrir le fichier.
Il est possible d'insérer une boite de dialogue de mise en garde en début de procédure ce qui se traduira par une confirmation pour chaque ligne, à tester.

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect([D8:D250], Target) Is Nothing Then
MyValue = MsgBox("Souhaitez vous remplacer la lettre de révision par: " & Target, _
vbYesNo + vbCritical + vbDefaultButton1, "Attention modification de données en " & Target.Address)
If MyValue = vbNo Then
MsgBox "veuillez remplacer le : " & Target & " en " & Target.Address & " par l'ancienne valeur", , _
"Vous souhaitez annuler la dernière saisie "
Exit Sub
Else
If Target = "B" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "C" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "D" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "E" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "F" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "G" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "H" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "I" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "J" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "K" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "L" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "M" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "N" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "O" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "P" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "Q" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "R" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "S" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "T" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "U" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "V" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "W" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "X" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "Y" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "Z" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "AA" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "AB" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "AC" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "AD" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "AE" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "AF" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "AG" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "AH" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "AI" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "AJ" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "AK" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "AL" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "AM" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "AN" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "AO" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "AP" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "AQ" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "AR" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "AS" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "AT" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "AU" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "AV" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "AW" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "AX" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "AY" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target = "AZ" Then Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents

If Target.Offset(1, -1) = Target.Offset(0, -1) Then Target.Offset(1, 0) = Target
End If
End If
End Sub
0
fort, très fort
je vais rester avec la première solution car là on perd tout le temps gagné avec les boîtes de dialogue. parfois j'ai 10 lignes pour le même doc et ça implique 10 confirmations.
Sinon il faudrait seulement une boîte qui dise "confirmez vous le changement de révision ?" quand tu rentres la nouvelles valeur. si OUI les lignes suivantes basculent aussi sans confirmation. Si NON la boîte de dialogue se ferme et l'ancienne lettre se remet comme si on faisait un "annuler"
mais bon ne t'embête pas car là ça va devenir plus compliqué, déjà tu m'as rendu un grand service.
0
Mike-31 Messages postés 18310 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 29 mars 2024 5 073
Modifié par Mike-31 le 19/10/2010 à 22:04
Re,

En testant mon code, je me suis aperçu que si tu saisissais accidentellement une valeur en D alors qu'en C la cellule était vide la lettre saisie bouclait jusqu'en fin de plage.

j'ai revu mon code et te conseille de tester ce dernier largement épuré
à coller à la place de l'ancien

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect([D8:D250], Target) Is Nothing Then
If Target <> "" And Target.Offset(0, -1) <> "" Then
MyValue = MsgBox("La valeur de la cellule: " & Target.Address & " vient d'être remplacée par " & Target & vbLf & vbLf & _
"souhaitez vous continuer", vbYesNo + vbCritical + vbDefaultButton1, "Des données sont en cours de modifications")
If MyValue = vbYes Then

Range(Target.Offset(0, 4), Target.Offset(0, 7)).ClearContents
If Target.Offset(1, -1) = Target.Offset(0, -1) Then
Target.Offset(1, 0) = Target
End If
End If
End If
End If
End Sub

Si tu souhaites supprimer la boite de dialogue efface la pratie en gras et un End If

Si tes attentes sont satisfaites, met le statut de la discussion en résolu merci
A+
Mike-31

Une période d'échec est un moment rêvé pour semer les graines du savoir.
0
c'est ce qu'on appelle condenser un programme ^^
promis je ferme le sujet
juste savoir si la boîte de dialogue peut apparaître seulement une fois.
Si le document 21 est sur 15 lignes la boîte de dialogue apparaît 15 fois, l'idéal serait de confirmer une fois le changement et ensuite les 14 lignes suivantes basculent.
par contre pour le NON c'est vraiment bien, maintenant ça remet l'ancienne valeur.
0
Mike-31 Messages postés 18310 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 29 mars 2024 5 073
20 oct. 2010 à 15:13
Re,

bien sur il est possible de faire apparaitre la boite de dialogue q'une seule fois mais avec un code différent et déclenchement avec un bouton ce qui est plus contraignant. Dans le cas présent, on demande au système de boucler sur une action. En clair si on chage une valeur en D on efface les cellules de H à K et si la référence en C est identique on recommence donc en D nouvelle valeur qui relance le processus.

Je vais voir si on peut shunter cette apparition avec un autre code
0