Microsoft 365 Effacer sous condition

  • Initiateur de la discussion Initiateur de la discussion Claudy
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Claudy

XLDnaute Accro
Bonjour à tous,
Comment faire un Range("A1:F60").ClearContents, mais ne pas effacer si une cellule contient le mot "OUT" ?

Merci d'avance,
Claudy
 
ou mieux :
VB:
Sub ClearContentsSpecialClaudy(Plage, Chaine)
    Set MaPlage = Range(Plage)
     With MaPlage
        For Each c In MaPlage
            If c.Value <> Chaine Then c.Value = ""
        Next c
    End With
End Sub

Sub EssaiPourTest()
    ClearContentsSpecialClaudy "A1:F60", "OUT"
End Sub
De cette façon la macro est universelle, et vous pourrez la réutiliser sans modification.
Pour l'executer il faut lancer EssaiPourTest avec deux paramètres : la plage et la chaine à exclure.
 
Le temps n'était pas dans les specs de départ 🙂
Il faut figer l'écran pendant l'effacement. ca accélère beaucoup l'éxécution.
Code:
Sub ClearContentsSpecialClaudy(Plage, Chaine)
    Application.ScreenUpdating = False
    Set MaPlage = Range(Plage)
     With MaPlage
        For Each c In MaPlage
            If c.Value <> Chaine Then c.Value = ""
        Next c
    End With
    Application.ScreenUpdating = True
End Sub

Sub EssaiPourTest()
    ClearContentsSpecialClaudy "A1:F60", "OUT"
End Sub
 
Sur mon PC je passe de 0.531s à 0.109s avec la dernière version.
Avez vous beaucoup de calculs dans votre fichier ?
Si oui, rajouter au début : Application.Calculation=xlManual
et à la fin : Application.Calculation=xlautomatic.
( çapasse le mode de recalcul en manuel )
 
Sur mon PC je passe de 0.531s à 0.109s avec la dernière version.
Avez vous beaucoup de calculs dans votre fichier ?
Si oui, rajouter au début : Application.Calculation=xlManual
et à la fin : Application.Calculation=xlautomatic.
( çapasse le mode de recalcul en manuel )
Re bonjour et merci
Dans ce classeur test je n'ai rien comme calculs.
Mais ouvert un autre classeur avec des centaines de formules (normales ou matricielles)
Et aucun lien avec fichier test.
Est ce que ça peut influencer?
A+
Claudy
 
Surement s'ils sont dans la même session.
Dans ce cas ajouter les deux lignes Application.Calculation=xlManual , ça devrait résoudre le problème.
Voici la dernière version, j'ai intégré :
VB:
Sub ClearContentsSpecialClaudy(Plage, Chaine)
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Set MaPlage = Range(Plage)
     With MaPlage
        For Each c In MaPlage
            If c.Value <> Chaine Then c.Value = ""
        Next c
    End With
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True
End Sub
Sub EssaiPourTest()
t0 = Timer
    ClearContentsSpecialClaudy "A1:F60", "OUT"
MsgBox Timer - t0
End Sub
Dans le test j'ai introduit la mesure du temps d'éxecution.
 
Bonsoir sylvanus,

Toutes les cellules de la plages sont à effacer sauf pour celle qui contiennent "OUT"
En passant par une variable tableau le résultat est instantané.
l'objet range est bien plus lourd est donc moins rapide.
VB:
Sub Effacer()
Dim TabR() As Variant
TabR = Range("A1:F60")
t0 = Timer
For i = LBound(TabR, 1) To UBound(TabR, 1)
    For j = LBound(TabR, 2) To UBound(TabR, 2)
        If TabR(i, j) <> "OUT" Then
            TabR(i, j) = ""
        End If
    Next j
Next i
Range("A1").Resize(UBound(TabR, 1), UBound(TabR, 2)) = TabR
MsgBox Timer - t0
End Sub
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
13
Affichages
346
Retour