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

Macros et VBA Excel Discussion :

VBA Excel : remplacer des "0" dans une colonne


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2014
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Août 2014
    Messages : 45
    Points : 31
    Points
    31
    Par défaut VBA Excel : remplacer des "0" dans une colonne
    Bonjour,

    J'aimerais remplacer, dans une colonne, les "0" par des cellules vides :
    Ca ne me parait pas très compliqué mais pourtant je bloque sur : cell.value = 0
    ça me met le message incompatibilité de type, je ne comprend pas pourquoi...

    Avez vous une idée ?
    Merci,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    dim cell as range
     
    For Each cell In Range("G1").EntireColumn
     
       If cell.Value = 0 Then
          cell.Value = ""
       End If
     
    Next cell

  2. #2
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par markym Voir le message
    ça me met le message incompatibilité de type, je ne comprend pas pourquoi...
    Sans doute parce que certaines de ces cellules ne contiennent pas de valeur numériques mais du texte (une cellule vide dans Excel est considérée comme du texte).

    Cela dit, à mon avis, tu devrais plutôt t'orienter sur la méthode Replace avec le paramètre LookAt à xlWhole.
    Ca t'éviterait une boucle.
    https://msdn.microsoft.com/fr-fr/lib...6(v=office.15)

    Autre détail : plutôt que d'écrire Range("G1").EntireColumn, il est plus simple d'écrire Columns("G") qui a le même résultat.

    EDIT : je n'avais pas remarqué que tu avais mis un nom différent entre la variable de la boucle et celle qui est testée (tu rajoutes un "S"). Ca ne risque donc pas de fonctionner.
    Prends l'habitude de précéder ton code de Option Explicit ou, mieux, fais en sorte qu'il se place par défaut : Menu Outils > Options > Onglet Editeur > coche "Déclaration de variables obligatoire".
    Ca t'évitera beaucoup de problèmes.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2014
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Août 2014
    Messages : 45
    Points : 31
    Points
    31
    Par défaut
    oui merci, c'était bien ça,

    par contre est ce normal maintenant que ça me mette un message d'erreur "mémoire insuffisante"

    et même en réduisant sur 10 cellules


    Markym

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2014
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Août 2014
    Messages : 45
    Points : 31
    Points
    31
    Par défaut
    je n'avais pas vu ton message Menhir,

    Concernant le Replace, ça ne marcherait pas car je ne veux remplacer que les valeurs des cellules qui contiennent "0" uniquement et non pas celle qui contiennent des valeurs numériques avec des "0" comme 420.2 par exemple.

    J'avais bien oublié un S dans le code mais maintenant ça me met un message "mémoire insuffisante"...

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2014
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Août 2014
    Messages : 45
    Points : 31
    Points
    31
    Par défaut
    Mon erreur vient de la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each cell In Range("G1").EntireColumn

    Ce code ci-dessous fonctionne bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    dim cell as range
     
    For Each cell In Range("G1:G10")
     
       If cell.Value = 0 Then
          cell.Value = ""
       End If
     
    Next cell
    Lorsque je change en : Range("G1:G10") alors je n'ai plus de problème concernant le type.

    Et il ne fallait pas rajouter de S à Cell.Value...

    Si une personne à une explication je veux bien sinon je clos le sujet.

    Merci en tout cas

  6. #6
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    bonjour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each cell In Range("G1").EntireColumn.cells
    cela dit!!!!!

    est il vraiment necessaire de boucler sur toute la colonne en entier? : je pense que non

    ne serait il pas preferable de boucler sur seulement les cellules utilisées dans cette colonne "G"? :je pense que oui!!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each cell In Range("G1",cells(rows.count,"G").end(xlup)).cells
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  7. #7
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 819
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 819
    Points : 28 723
    Points
    28 723
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Pourquoi une boucle ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("C1:C101").Replace "0", "", xlWhole
    [EDIT]
    Pour faire l'inverse. Remplacer les cellules vides par une valeur nulle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Range("C1:C101").SpecialCells(xlCellTypeBlanks) = 0
    et pour masquer les valeurs nulles d'une feuille (celle-ci doit être active au moment d'activer l'option)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveWindow.DisplayZeros = False
    Manuellement c'est [Fichier]/Options - Options avancées Options d'affichage de la feuille de calcul : Décocher l'option Afficher un zéro dans les cellules qui ont une valeur nulle
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  8. #8
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par markym Voir le message
    Concernant le Replace, ça ne marcherait pas car je ne veux remplacer que les valeurs des cellules qui contiennent "0" uniquement et non pas celle qui contiennent des valeurs numériques avec des "0" comme 420.2 par exemple.
    Visiblement, tu n'as pas lu correctement mon message, en particulier le conseil concernant le paramètre LookAt.

    J'avais bien oublié un S dans le code mais maintenant ça me met un message "mémoire insuffisante"...
    Pour info, Cells est un objet de VBA qui représente la collection de TOUTES les cellules.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  9. #9
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 819
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 819
    Points : 28 723
    Points
    28 723
    Billets dans le blog
    53
    Par défaut
    Bonjour Menhir,
    Désolé, je n'avais pas lu que tu avais déjà donné dans ton intervention la solution avec la méthode Replace. je me suis contenté de parcourir en vitesse les codes proposés.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2014
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Août 2014
    Messages : 45
    Points : 31
    Points
    31
    Par défaut
    Oui désolé Menhir, j'avais lu un peu trop vite ta réponse et je n'ai pas compris tout de suite le sens de LookAt

    Merci à Patrick et Philippe, ça marche 100 fois mieux!


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Range("G1", Cells(Rows.Count, "G")).Replace "0", "", xlWhole

    Markym

  11. #11
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Il serait judicieux d'un peu limiter la zone de recherche.
    Surtout que ça n'est pas très difficile :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("G1", Cells(Rows.Count, "G").End(xlUp)).Replace "0", "", xlWhole
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. VBA excel extraire des chaines de caractéres d'une cellule
    Par AimeDija dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 01/08/2018, 13h23
  2. [XL-2013] Remplacer des valeurs de cellule dans une plage
    Par Rémy.A dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 26/06/2017, 08h00
  3. [VBA-W][VBA-E]Remplacer ou écrire 1 texte dans une zone de texte
    Par ouskel'n'or dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 17/04/2007, 10h31

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