Problème VBA CLear Content

chrystou

XLDnaute Nouveau
Bonjour à toutes et tous,

Je souhaite modifier le code ci-dessous trouvé sur Internet et l'adapter à la situation suivante

Si cellule AX4, AX5, AX6:AX1200... contiennent une date, alors effacer le contenu de la cellule C4, C5, C6:C1200...


Un immense merci à vous car je suis perdue et novice dans les VBA.

Chrystou


Option Explicit

Sub EffacerOK()
Dim J As Long

For J = 4 To Range("A" & Rows.Count).End(xlUp).Row
If UCase(Range("A" & J)) = "OK" Then
Range("A" & J & ":B" & J & ",D" & J).ClearContents
End If
Next J
End Sub
 

chrystou

XLDnaute Nouveau
Re : Problème VBA CLear Content

Bonjour,

Pourrais-tu me dire ce que veut dire J et au lieu de "OK" que puis-je mettre pour dire que si une date est saisie en AX4... puis-je mettre <>"" à la place de "OK".

Merci pour ton aide je suis nulle en VBA
 

tototiti2008

XLDnaute Barbatruc
Re : Problème VBA CLear Content

Re,

Oups j'avais mis A à la place de AX

Code:
Sub EffacerDate()
Dim J As Long


For J = 1 To Range("AX" & Rows.Count).End(xlUp).Row
If isdate(Range("AX" & J).value)  Then
Range("C" & J).ClearContents
End If
Next J
End Sub

Pourrais-tu me dire ce que veut dire J

J est une variable qui varie de 1 à la dernière ligne remplie de la colonne AX
 

job75

XLDnaute Barbatruc
Re : Problème VBA CLear Content

Bonsoir chrystou, Marc,

Oui avec IsDate :

Code:
Sub Effacer()
Dim t1, t2, i&
t1 = [AX4:AX1200] 'plage à adapter
With [C4].Resize(UBound(t1)) 'cellule à adapter
  t2 = .Formula
  For i = 1 To UBound(t1)
    If IsDate(t1(i, 1)) Then t2(i, 1) = ""
  Next
  .Formula = t2
End With
End Sub
Avec des tableaux VBA (t1, t2) c'est bien plus rapide.

Bonne fin de soirée.
 

job75

XLDnaute Barbatruc
Re : Problème VBA CLear Content

Bonjour chrystou, Marc, le forum,

Si en colonne AX les valeurs numériques sont toujours des dates :

Code:
Sub Effacer()
On Error Resume Next
With [AX4:AX1200].SpecialCells(xlCellTypeConstants, 1)
  Intersect(.EntireRow, [C4:C1200]) = ""
End With
With [AX4:AX1200].SpecialCells(xlCellTypeFormulas, 1)
  Intersect(.EntireRow, [C4:C1200]) = ""
End With
End Sub
Bonne journée.
 

chrystou

XLDnaute Nouveau
Re : Problème VBA CLear Content

Merci à vous pour vos réponses. C'est très apprécié.

Job 75
Sub Effacer()
On Error Resume Next
With [AX4:AX1200].SpecialCells(xlCellTypeConstants, 1)
Intersect(.EntireRow, [C4:C1200]) = ""
End With
With [AX4:AX1200].SpecialCells(xlCellTypeFormulas, 1)
Intersect(.EntireRow, [C4:C1200]) = ""
End With
End Sub

Ce code là ne fonctionne pas ou je ne le copie pas au bon endroit.

j'ai fait ALT + F11 pour aller en mode VBA puis dans VBAprojects puis Microsoft Excel Objets, dans la feuille concernée j'ai fait un double clique et j'ai copié ton code dans la fenêtre qui s'est ouverte puis j'ai enregistré.

Quand je reviens sur mon tableau, lorsque 'j'insère une date en AX4, le contenu de ma cellule en C4 ne s'efface pas. Pourquoi ?

Désolée pour mes questions très basiques pour des experts comme vous mais c'est comme ca que l'on apprend.

Chrystou
 

chrystou

XLDnaute Nouveau
Re : Problème VBA CLear Content

Bonjour,

J'ai fait ce que tu m'as conseillé mais Ca ne fonctionne pas, je souhaitais joindre mon fichier mais il est trop lourd même zippé. Donc si j'inscrit une date en AC4, je souhaite que le contenu de ma cellule A4 s'efface.

Puis-je te l'envoyer par courriel ?

Encore un immense merci.

Chrystèle
 

job75

XLDnaute Barbatruc
Re : Problème VBA CLear Content

Bonjour chrystou,

Relisant vos posts #7 et #9 je vois que vous ne parlez pas de lancer la macro.

Elle ne se lance pas toute seule, pour tester c'est à vous de le faire.

Maintenant si vous voulez que ça se fasse automatiquement placez dans le code de la feuille :

Code:
Private Sub WorkSheet_Change(ByVal Target As Range)
On Error Resume Next
With [AX4:AX1200].SpecialCells(xlCellTypeConstants, 1)
  If Not Intersect(Target, .Cells) Is Nothing Then Intersect(.EntireRow, [C:C]) = ""
End With
End Sub
C'est une macro évènementielle.

A+
 

chrystou

XLDnaute Nouveau
Re : Problème VBA CLear Content

Bonjour Job 75,

Merci de ta patience, elle est très appréciée

Voilà ce que j'ai mis comme code dans ma feuille Excel 1 qui s'appelle Continuum (Pour ton info mes colonnes ont changé, la date est en AC et la case à effacer en A4)

Sub Effacer()
On Error Resume Next
With [AC4:AC1200].SpecialCells(xlCellTypeConstants, 1)
Intersect(.EntireRow, [A4:A1200]) = ""
End With
With [AC4:AC1200].SpecialCells(xlCellTypeFormulas, 1)
Intersect(.EntireRow, [A4:A1200]) = ""
Private Sub WorkSheet_Change(ByVal Target As Range)
On Error Resume Next
With [AC4:AC1200].SpecialCells(xlCellTypeConstants, 1)
If Not Intersect(Target, .Cells) Is Nothing Then Intersect(.EntireRow, [A:A]) = ""
End With
End Sub

Et voilà ce que j'ai mis comme code dans Modules/ Modules 1

Sub Effacer()
On Error Resume Next
With [AC4:AC1200].SpecialCells(xlCellTypeConstants, 1)
Intersect(.EntireRow, [A4:A1200]) = ""
End With
With [AC4:AC1200].SpecialCells(xlCellTypeFormulas, 1)
Intersect(.EntireRow, [A4:A1200]) = ""
Private Sub WorkSheet_Change(ByVal Target As Range)
On Error Resume Next
With [AC4:AC1200].SpecialCells(xlCellTypeConstants, 1)
If Not Intersect(Target, .Cells) Is Nothing Then Intersect(.EntireRow, [A:A]) = ""
End With
End Sub


PS : je suis à l'aise pour faire des macros simples mais pas en VBA.

En fait je ne suis pas sure que je copie les codes au bon endroit et de plus, lorsqu'il y a déjà un code dans une feuille comment en ajoute t-on un ? Juste en dessous ou à l'intérieur du précédent.

Merci beaucoup

Chrystou
 

Discussions similaires

Réponses
13
Affichages
775
Réponses
7
Affichages
581

Statistiques des forums

Discussions
312 495
Messages
2 088 966
Membres
103 993
dernier inscrit
Essens