Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2019 Effacement de données ciblées (remise à zéro)

didcac

XLDnaute Occasionnel
Bonjour à tous,
J'ai une feuille de calcul où figure des données de type "option de réservation hôtelière". Il y a une Macro qui a déjà fonctionné pour cela, mais là il semblerait qu'il y ait un souci (ça mouline sempiternellement). En faisant un PAS A PAS, la première ligne est surlignée en jaune.
Je joins un exemple de données fictives où, pour vous aider à comprendre visuellement, figurent en rouge les données verrouillées, et en noir les cellules déverrouillées (que je veux effacer, dans une plage "D6:NE8000"). Ainsi, en "Protégeant le document", le lancement de la Macro n'affectera pas les données qui doivent rester (les verrouillées) à l'issue de l'opération.
La Macro est :
Sub Effacement_des_Options()
Dim Cel As Range
Application.ScreenUpdating = False
On Error Resume Next
For Each Cel In Range("D6:NE8000")
Cel.ClearContents
Next Cel
End Sub

C'est sans doute très simple, mais je ne sais pas comment corriger.
Je suppose que c'est en faisant une copie que, le nom initial ayant été changé, ça perturbe l'ensemble.
Merci de votre aide.
 

Pièces jointes

  • Macro Options Année 2024.xlsm
    26.8 KB · Affichages: 3

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Didcac,
Etes vous sur de votre plage D6:NE8000 ? Cela fait 2917810 cellules à effacer une à une.
Si votre plage est bonne, faites simplement :
VB:
Sub Effacement_des_Options2()
    Application.ScreenUpdating = False
    Range("D6:NE8000").ClearContents
End Sub
Mais pourquoi jusqu'à la colonne NE ? Cela me semble étonnant au vu de votre fichier.

Si NE pour aller du 1er janvier au 31 décembre, voir PJ, l'effacement prend moins de 20ms.
NB : Il suffit de changer D1 pour tout remettre à jour.
 

Pièces jointes

  • Macro Options Année 2024.xlsm
    81.5 KB · Affichages: 2
Dernière édition:

didcac

XLDnaute Occasionnel
Bonjour sylvanu,
Merci pour votre réponse de Macro.
Hélas, il y a un problème.
NB : pour info, je suis sur MAC.

Mon fichier exemple est une version écourtée, en effet.

Quand j'utilise votre Macro, elle efface tout dans la plage. Mais moi je veux conserver les téléphones et noms figurant dans la feuille. Aussi, je protège le document (en cochant Cellules verrouillées et déverrouillées) pour lancer la Macro et là j'ai un message d'erreur.
Comment contourner ce problème ?
Merci.

Exact, NE c'est pour aller jusqu'à la fin de l'année.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
Il y a une Macro qui a déjà fonctionné pour cela
Ca m'étonnerait qu'elle ait fonctionnée telle quelle, car vous parcourez toutes les cellules et vous l'effacez.
VB:
For Each Cel In Range("D6:NE8000")  ' Pour toute cellule de D6 à NE8000
   Cel.ClearContents                ' Effacer la cellule
Next Cel
Donc vous effacez tout quel que soit le contenu.

En PJ un essai. J'ai considéré que si en colonne A on a quelque chose alors on ne touche pas à la ligne.
( j'ai donc rajouté en A6 le code postal pour ABBAYE. ) Et je ne traite pas 8000 lignes mais uniquement jusqu'à la dernière ligne de la colonne C.
Code:
Sub Effacement_des_Options()
    Dim DL%, L%
    Application.ScreenUpdating = False
    DL = Cells(Cells.Rows.Count, "C").End(xlUp).Row     ' Recherche de la dernière ligne
    For L = 6 To DL                                     ' Pour toutes les lignes
        If Cells(L, "A") = "" Then Range("D" & L & ":NE" & L).ClearContents ' Si cel A est vide on efface la ligne
    Next L
End Sub
 

Pièces jointes

  • Macro Options Année 2024 (1).xlsm
    25.7 KB · Affichages: 5

didcac

XLDnaute Occasionnel
Bonjour sylvanu,
Merci beaucoup !!
Cela marche parfaitement, et même mieux que prévu, puisqu'il ne faut même pas renseigner le code postal !! Et c'est tant mieux.
Tout est bien effacé, sans toucher aux coordonnées. Et toutes les lignes (en réalité 5000, ont été traitées, 8000 c'est en prévision que ça augmente)
Et ce jusqu'à la colonne NE...
Bonne journée.
Cordialement
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
puisqu'il ne faut même pas renseigner le code postal !! Et c'est tant mieux.
Le code postal doit être obligatoire car c'est sur ce code postal que je repère quelles lignes doivent être ignorées.
j'ai donc rajouté en A6 le code postal pour ABBAYE.
Dans votre fichier c'était la seule ligne où il n'y avait pas de code postal, et je l'ai rajouté à la main.

Sinon comment savoir que les lignes 6, 19, 38 ... doivent être ignorées ?
( sauf si en colonne A vous mettez le lieu au lieu de le mettre en colonne B.
 

didcac

XLDnaute Occasionnel
Mais oui, j'avais parfaitement compris votre méthode astucieuse, sauf que ce n'est finalement pas ce que vous pensiez qui se produit dans la réalité. Et c'est néanmoins génial pour moi.
Je confirme donc que TOUTES les lignes renseignées des téléphones et noms sont bel et bien maintenues, alors que tout le reste est effacé comme souhaité.
C'est incroyable, je reconnais.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Mais je n'ai pas le même comportement.
Si un code postal est manquant alors le téléphone correspondant s'efface . Regardez, j'efface le code postal en A19, lors de l'effacement le tel en D19 est effacé :



Je ne vois pas comment il pourrait en être autrement car :
VB:
If Cells(L, "A") = "" Then Range("D" & L & ":NE" & L).ClearContents
Si la cellule en colonne A est vide, alors on efface la ligne.
 

didcac

XLDnaute Occasionnel
En effet, c'est étonnant.
Je n'ai pas pu moi-même utiliser votre fichier avec la macro car lors du lancement, on m'alerte qu'elle est corrompue et EXCEL la supprime d'office. Aussi, je l'ai créée directement dans ma feuille. Mais ça n'explique rien.
Il y figure aussi toujours l'ancienne macro, mais comme je ne la lance pas, elle est inopérante.
C'est pour vous aiguiller.
Ceci dit, àa marche merveilleusement ainsi, c'est le principal pour moi.
Mais je comprends votre incompréhension.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Ceci dit, àa marche merveilleusement ainsi, c'est le principal pour moi.
Bien sur. Sauf que c'est toujours dérangeant de ne pas savoir pourquoi.
On dirait que "c'est tombé en marche".

J'ai rouvert ma PJ sans souci. Peut être un problème de sécurité sur votre PC. ( ou plus exactement un niveau de sécurité élevé )
Essayez celle ci pour voir, je l'ai mis en xlsb.
 

Pièces jointes

  • Macro Options Année 2024 .xlsb
    22.5 KB · Affichages: 5

didcac

XLDnaute Occasionnel
Bonjour,
J'ai téléchargé, mais une fois de plus EXCEL supprime la macro en indiquant la corruption.
Peut-être que c'est parce que c'est la version MAC ? Il est possible que mon niveau de sécurité soit élevé.
Désolé de ne pas pouvoir vous apporter une réponse éclairante.
 

didcac

XLDnaute Occasionnel
Cher sylvanu,
Je me dois de revenir vers toi pour te rassurer : il n'y a pas de miracle en informatique.
Je me suis en effet aperçu par hasard que tu avais parfaitement raison, et que la formule ne marchait pas quand le code postal était absent.
Ma mauvaise lecture est sans doute due au fait que j'avais dû saisir des codes sans m'en souvenir et que visuellement tout semblait alors cadrer (je n'avais pas eu le temps de tout pointer minutieusement).
Aussi, j'ai réfléchi à ta façon astucieuse de contourner le problème, et l'ai adapté pour le rendre définitivement opérationnel (car il me manque 2 500 codes postaux sur 5 000 !!!).
J'ai ainsi corrigé :

If Cells(L, "C") <> "" Then Range("D" & L & ":NE" & L).ClearContents

En m'appuyant sur le fait que le colonne C est toujours pleine, sauf dans les fameuses lignes que je veux conserver (où elle est systématiquement vide).
Et là, a priori, ça marche vraiment, cette fois.
Ai-je vu juste, selon toi, dans le raisonnement ?
Merci.
 

didcac

XLDnaute Occasionnel
Très bien.
Dans tous les cas, cette fois est la bonne, et je te remercie pour ton aimable aide, car c'est ta formule qui a structurellement permis d'arriver à ce résultat recherché.
Bonne journée.
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…