IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Excel Discussion :

supprimer les valeurs zéro


Sujet :

Excel

  1. #1
    Membre habitué
    Homme Profil pro
    comptable principal
    Inscrit en
    Octobre 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Autre

    Informations professionnelles :
    Activité : comptable principal
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2010
    Messages : 434
    Points : 170
    Points
    170
    Par défaut supprimer les valeurs zéro
    Bonjour
    J’ai une plage (A1:BA3000) qui contienne que des nombres.
    J’ai essayé de supprimer les valeurs zéro avec le code suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Range("A1:ba3000").AutoFilter Field:=3, Criteria1:="0,00"
    Range("c2:c3000").SpecialCells(xlCellTypeVisible).ClearContents
    Range("A1:ba3000").AutoFilter Field:=3
    Mon problème ce que je doit répéter ce code 53 fois et je change que le N° de Field (de 3 au 53) et la range ("c2:c3000") au range ("ba2:ba3000")
    Question
    SVP comment faire pour réduire ces 53 codes pour supprimer les valeurs zéro

  2. #2
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Bonjour,

    Si je comprend bien, tu veux mettre a blanc les cellules qui sont à 0 sur la plage A1 à BA3000

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub sup()
    Dim rg As Range
     
    For Each rg In Range("A1:BA3000")
     
        If rg.Value = 0 Then rg.Value = ""
     
    Next rg
     
    End Sub
    Jérôme

  3. #3
    Membre habitué
    Homme Profil pro
    comptable principal
    Inscrit en
    Octobre 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Autre

    Informations professionnelles :
    Activité : comptable principal
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2010
    Messages : 434
    Points : 170
    Points
    170
    Par défaut bonjour
    salut
    merci pour ton code mais il est lent lorsque la plage est grande
    j'ai posté le mémé problème dans un autre forum et Mr ERIC ma envoyé ce code il est rapide
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub suppZero()
        Dim f As Long
        Application.ScreenUpdating = False
        For f = 3 To 53
            Range("A1:ba3000").AutoFilter Field:=f, Criteria1:="0,00"
            On Error Resume Next
            [C2].Offset(0, f - 3).Resize(2999, 1).SpecialCells(xlCellTypeVisible).ClearContents
            On Error GoTo 0
            Range("A1:ba3000").AutoFilter
        Next f
        Application.ScreenUpdating = False
    End Sub
    merci pour toi et merci pour Mr Eric
    et si quelqu'un a une meilleure réponse la discussion est ouverte

  4. #4
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Le code proposé te donne une méthode.

    Si tu souhaites optimiser la vitesse il te faudra aussi neutraliser les calculs et l'affichage
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    Sub sup()
    Dim rg As Range
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual 
     
    For Each rg In Range("A1:BA3000")
     
        If rg.Value = 0 Then rg.Value = ""
     
    Next rg
     
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
    End Sub
    Jérôme

  5. #5
    Membre habitué
    Homme Profil pro
    comptable principal
    Inscrit en
    Octobre 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Autre

    Informations professionnelles :
    Activité : comptable principal
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2010
    Messages : 434
    Points : 170
    Points
    170
    Par défaut salut
    merci mon ami
    mais mon code proposé est toujours rapide que ton nouveau code

  6. #6
    Membre éprouvé Avatar de issoram
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 665
    Points : 929
    Points
    929
    Par défaut
    Bonjour,

    C'est surtout le fait de travailler range par range (boucle For Each) qui ralentit le code.
    Le gain d'efficacité est de l'ordre d'un facteur 20 en travaillant plutôt sur des tableaux.
    Je cite cet excellent tutoriel sur la manipulation de tableaux en VBA:
    Sur les grandes collections, il convient d'éviter l'énumération qui est très lente.
    Du coup le code de Jfontaine adapté:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    Dim Tab As Variant, 
    Dim i As Long, j As Long
     
    Tab = Range("A1:BA3000").Value
     
    For i = LBound(Tab, 1) To UBound(Tab, 1)
        For j = LBound(Tab, 2) To UBound(Tab, 2)
            IIf (Tab(i, j) = 0, "", Tab(i, j) )
        Next i
    Next j
     
    Range("A1:BA3000").Value = Tab
     
    Application.ScreenUpdating = True  ' plus vraiment utile ici étant donné que l'affectation
    'se fait d'un coup sur la plage entière. Mais ça ne coûte rien de le laisser.
    Application.Calculation = xlCalculationAutomatic  ' idem
    Cordialement.

Discussions similaires

  1. Supprimer les valeurs d'un array égale à zéro
    Par vincent gasquy dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 13/04/2011, 11h05
  2. Supprimer les valeurs inférieures à un seuil
    Par annael dans le forum MATLAB
    Réponses: 20
    Dernier message: 28/08/2008, 18h00
  3. [JpGraph] supprimer les valeurs des points
    Par blopjerem dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 30/01/2008, 09h20
  4. Tchar supprimer les valeurs d'une series
    Par bullrot dans le forum C++Builder
    Réponses: 1
    Dernier message: 13/12/2007, 14h47
  5. [RegEx] Supprimer les valeurs répétées d'une chaine
    Par Eliness dans le forum Langage
    Réponses: 1
    Dernier message: 17/12/2006, 19h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo