Modification de macro pour eviter les bidouilles

Bonjour,

Pour le "bon" fonctionnement de deux macros contenu dans le fichier joint, je suis obligé à cacher des caractères pour les obliger à continuer leur travail sans trouver de ligne vide.

Je voudrais savoir si il était possible de faire autrement, je pense que oui mais je n'ai pas trouvé la solution donc je reviens vers vous

Une explication plus claire, enfin je pense , est dans le fichier joint.

Bon courage et merci

13test-macro.xlsm (30.62 Ko)

Essaie comme ceci ...

Sub Effacer_données()
    Dim dx As Long, i As Long
    dx = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row
    'ActiveSheet.Unprotect
    For i = 5 To ActiveSheet.Range("B" & Application.Rows.Count).End(xlUp).Row
       If ActiveSheet.Range("C" & i) = "" Then
          ActiveSheet.Range("D" & i & ":H" & i).ClearContents
          ActiveSheet.Range("L" & i).ClearContents
        End If
    Next
    'ActiveSheet.Protect
End Sub

Bonjour Steelson,

Déjà merci pour ton travail.

Effectivement, la macro ne tient plus compte des lignes vides entre les semaines mais, car il y a quand même un mais elle efface toujours une partie des entêtes et totaux (le texte) quand la cellule "C" est vide.

Là je ne sais pas si on peut y faire quelque chose.

ça a déjà bien avancé et je t'en remercie

On ajoute donc des conditions sur la colonne B

Sub Effacer_données()
    Dim dx As Long, i As Long
    dx = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row
    'ActiveSheet.Unprotect
    For i = 5 To ActiveSheet.Range("B" & Application.Rows.Count).End(xlUp).Row
       If ActiveSheet.Range("C" & i) = "" _
        And ActiveSheet.Range("B" & i) <> "" _
        And ActiveSheet.Range("B" & i) <> "Jour" Then
          ActiveSheet.Range("D" & i & ":H" & i).ClearContents
          ActiveSheet.Range("L" & i).ClearContents
        End If
    Next
    'ActiveSheet.Protect
End Sub

Bonjour

mettre que des X dans la colonne C

retour de ton fichier

A+

Maurice

7test-macro.xlsm (31.53 Ko)

Re bonjour

il faut mettre Application.EnableEvents aussi dans ta macro

A+

Maurice

Sub Effacer_données()
Dim Nlig As Long, L As Long
ActiveSheet.Unprotect
Nlig = ActiveSheet.Range("B" & Rows.Count).End(xlUp).Row
Application.ScreenUpdating = False
Application.EnableEvents = False
   For L = 5 To Nlig
      If Range("C" & L) = "" Then
         Range("D" & L & ":H" & L & ",L" & L).ClearContents
      End If
   Next
ActiveSheet.Protect
Application.EnableEvents = True
End Sub

Bonjour et re bonjour,

Je ne pensais pas intéresser autant de personne avec mon problème

J'ai testé les différentes propositions et the winner is Steelson

Sans rajouter quoi que ce soit dans les différentes colonnes, la macro fait son boulot.

Un grand merci à toi et aux autres aussi qui ont bien œuvrés. Je vais essayer de comprendre la démarche pour pouvoir me débrouiller un peu plus tout seul la prochaine fois.

Un grand merci à vous tous et bonne fin de week-end

bayard a écrit :

Je vais essayer de comprendre la démarche pour pouvoir me débrouiller un peu plus tout seul la prochaine fois.

Un grand merci à vous tous et bonne fin de week-end

C'est le but du jeu dans un forum, ne pas faire mais faire en sorte que tu puisses comprendre et reprendre plus tard le raisonnement : la macro est simple (du reste tu étais parti sur une solution plus complexe que la simple bouche for).

Oui on peut aussi mettre des Application.EnableEvents ce que personnellement je zappe toujours)

Rechercher des sujets similaires à "modification macro eviter bidouilles"