supprimer les valeurs hors plage

jhlamoustache

XLDnaute Occasionnel
Bonjour le forum

Dans mon fichier j'ai nommé une plage "AConserver" Comment puis-je supprimer les valeurs hors de cette plage?
Je vous précise que j'ai échoué en créant une plage "ASupprimer" car elle était instable au fil de l'évolution du fichier : l'ajout d'agent (ligne) ou d'outils (colonnes) n'incluaient pas correctement dans la plage.
J'ai touillé avec des resize lu sur d'autres fils sans succès.
Merci de votre aide
 

Pièces jointes

  • A conserver.xlsx
    8.8 KB · Affichages: 35

job75

XLDnaute Barbatruc
Re : supprimer les valeurs hors plage

Bonjour,

2 solutions, la 2ème est normalement plus rapide :

Code:
Sub Effacer1()
Dim P As Range, c As Range
Set P = [AConserver]
For Each c In P.Parent.UsedRange
  If c <> "" Then If Intersect(c, P) Is Nothing Then c = ""
Next
End Sub

Sub Effacer2()
Dim P As Range, c As Range, sup As Range
Set P = [AConserver]
For Each c In P.Parent.UsedRange
  If c <> "" Then If Intersect(c, P) Is Nothing _
    Then Set sup = Union(c, IIf(sup Is Nothing, c, sup))
Next
If Not sup Is Nothing Then sup = ""
End Sub
A+
 

job75

XLDnaute Barbatruc
Re : supprimer les valeurs hors plage

Re,

S'il y a des formules renvoyant un texte vide "" ou des valeurs d'erreur utiliser :

Code:
Sub Effacer1()
Dim P As Range, c As Range
Set P = [AConserver]
For Each c In P.Parent.UsedRange
  If Not IsEmpty(c) Then If Intersect(c, P) Is Nothing Then c = ""
Next
End Sub

Sub Effacer2()
Dim P As Range, c As Range, sup As Range
Set P = [AConserver]
For Each c In P.Parent.UsedRange
  If Not IsEmpty(c) Then If Intersect(c, P) Is Nothing _
    Then Set sup = Union(c, IIf(sup Is Nothing, c, sup))
Next
If Not sup Is Nothing Then sup = ""
End Sub
A+
 

jhlamoustache

XLDnaute Occasionnel
Re : supprimer les valeurs hors plage

Re bonjour,
Transcrit dans mon code ça tourne comme un coucou suisse
Encore merci

Le temps de rédiger pas vu le deuxième post. je note

Ce bout de code ne serait-il pas à publier dans les trucs et astuces ?
Bravo
 

Staple1600

XLDnaute Barbatruc
Re : supprimer les valeurs hors plage

Bonjour à tous

job75
Joli code mais rassures moi tes derniers codes proposés sont identiques au premier, non ?
Sans doute pas le bon copier/coller de ta dernière mouture, non ?

EDITION: Désolé, je me rassure moi-même tout en me faisant peur (car j'ai la berlue ou pire je vieillis plus vite que je ne pensais)
Au moins, j'aurai eu le plaisir de te croiser dans le fil ;)
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : supprimer les valeurs hors plage

Re,

salut Jean-Marie, je suppose que tu as vu le IsEmpty :)

Ce bout de code ne serait-il pas à publier dans les trucs et astuces ?
Je ne sais pas où c'est sur XLD, mais dans la plupart de mes codes il y en a :)

Edit : merci 00 pour le lien, effectivement j'aurais dû connaître l'endroit depuis longtemps...

A+
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : supprimer les valeurs hors plage

Re

Job75
Je l'ai vu le Isempty mais à la deuxième lecture
D’où l'édition de mon premier message.
Et comme 00 vient de t'indiquer le chemin des astuces avant que je ne le fasse, non seulement j'ai la berlue mais en plus je m’aperçois que je ne suis plus aussi réactif qu'antan quand j'avais la cuisse alerte et la mèche dans le vent.
 

Efgé

XLDnaute Barbatruc
Re : supprimer les valeurs hors plage

Bonjour à toute(s) et tous,
Z'êtes nombreux, c'est vrai que c'est marrant comme idée :D
Juste pour jouer.
Ce qui doit être vidé est complètement vidé, le reste est conservé y compris les formules.
VB:
Sub Test()
Dim T As Variant, D As Object, K As Variant
Dim Plg As Range, Sh As Worksheet, J&, Ar As Range

ActiveSheet.UsedRange
Set Sh = ActiveSheet
Set Plg = Sh.UsedRange
Set D = CreateObject("scripting.dictionary")
ReDim T(1 To Range("AConserver").Areas.Count)

For Each Ar In Intersect(Range("AConserver"), Plg).Areas
    Debug.Print Ar.Address
    J = J + 1
    T = Sh.Range(Ar.Address).Formula
    D(J) = Array(Ar.Address, T)
Next Ar

Application.ScreenUpdating = False
Sh.UsedRange.ClearContents
For Each K In D.Keys
    Sh.Range(D(K)(0)).Formula = D(K)(1)
Next K
Application.ScreenUpdating = True

End Sub
Cordialement

EDIT:
VB:
Sub Test2()
Dim K As Variant, D As Object
Dim Plg As Range, Ar As Range

ActiveSheet.UsedRange
Set Plg = ActiveSheet.UsedRange
Set D = CreateObject("scripting.dictionary")

For Each Ar In Intersect(Range("AConserver"), Plg).Areas
    D(Ar) = Ar.Formula
Next Ar

Application.ScreenUpdating = False
Plg.ClearContents
For Each K In D.Keys
    K.Formula = D(K)
Next K
Application.ScreenUpdating = True

End Sub
 
Dernière édition:

ROGER2327

XLDnaute Barbatruc
Re : supprimer les valeurs hors plage

Bonjour à tous.


Une autre à essayer :​
VB:
Sub tata()
Dim k%, v(), Zon As Range, Plg As Range
  Set Plg = [AConserver]
  With Plg.Parent
    Set Plg = Intersect(.UsedRange, Plg)
    For Each Zon In Plg.Areas: ReDim Preserve v(k): v(k) = Zon.Formula: k = k + 1: Next
    k = 0
    With Application: .ScreenUpdating = 0: .EnableEvents = 0: .Calculation = -4135: End With
    .Cells.ClearContents
    For Each Zon In Plg.Areas: Zon.Value = v(k): k = k + 1: Next
    With Application: .Calculation = -4105: .EnableEvents = 1: .ScreenUpdating = 1: End With
  End With
  Set Plg = Nothing
End Sub


Bonne journée.


ℝOGER2327
#7510


Mercredi 18 Phalle 141 (Saint Lingam, bouche-trou - fête Suprême Quarte)
11 Fructidor An CCXXII, 4,5512h - pastèque
2014-W35-4T10:55:23Z
 

jhlamoustache

XLDnaute Occasionnel
Re : supprimer les valeurs hors plage

Rebonjour le forum

Le temps que je rédige, je vois qu'il y a eu beaucoup de post. Super sympa. Je tâcherai d'intégrer la dernière version.

Là je sors un peu de ce fil, mais j’ai un problème d’appel des procédures
Ce que je souhaite faire c’est ajouter un outil dans l’inventaire Il faut donc :
Saisir le nouvel outil
Vérifier qu’il ne figure pas dans les feuilles d’inventaire (type Tab)
Vérifier qu’il subsiste de la place sur la feuille d’inventaire
Au besoin créer une nouvelle page d’inventaire en dupliquant la précédente (afin de ne pas perdre le patrimoine opérateur, puis effacer les données.
Enregistrer le nouvel Outil
Mais les procédures appelées ne rendent pas la main aux procédures appelantes.
Quelqu’un peut-il y regarder ?
Merci d’avance
 

Pièces jointes

  • A conserver V1.xlsm
    69.2 KB · Affichages: 84

job75

XLDnaute Barbatruc
Re : supprimer les valeurs hors plage

Re,

Ce que je souhaite faire c’est ajouter un outil dans l’inventaire Il faut donc :
Saisir le nouvel outil
Vérifier qu’il ne figure pas dans les feuilles d’inventaire (type Tab)
Vérifier qu’il subsiste de la place sur la feuille d’inventaire
Au besoin créer une nouvelle page d’inventaire en dupliquant la précédente (afin de ne pas perdre le patrimoine opérateur, puis effacer les données.
Enregistrer le nouvel Outil

C'est quoi un outil et c'est quoi l'inventaire :confused:

A+
 

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 305
Messages
2 087 084
Membres
103 459
dernier inscrit
Arnocal