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 :

Effacer colonne en fonction d'une plage de cellule [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 15
    Par défaut Effacer colonne en fonction d'une plage de cellule
    Salut à tous,

    Nouveau problème: j'essaye d'effacer une colonne si un nombre se trouve dans une plage de cellule.

    Exemple si j'ai 2009 dans la plage "A1:A10", la macro efface la colonne F. Pas de problème pour effacer mais comment faire une recherche sur une plage de cellule ?

    Merci d'avance.

  2. #2
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Bnjour, vois l'aide vba à Find
    Cette méthode recherche une information spécifique dans une plage et renvoie un objet Range qui représente la première cellule où cette information apparaît. Cette méthode renvoie la valeur Nothing si l'information n'est pas trouvée. N'affecte ni la sélection ni la cellule active.
    il y a même un exemple

    cordialement,

    Didier

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 15
    Par défaut
    Merci pour la réponse. Juste pour être sur, je dois regarder dans le help de l'interface VBA? Par ce que leur exemple n'est pas des plus clair.

    Si j'applique à mon cas, ce que je comprends pour le moment c'est qu'un:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheet1.Range("A1:A10").Find(What:="2008", LookIn:=xlValues).Activate
    Et il va à la cell A9, si j'ai 2008 en A9.

    Mais ce que je cherche à faire, c'est que si j'ai 2008 dans mon range, que ma macro efface la colonne F, si j'ai 2009, la macro efface la colonne G, etc...

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 67
    Par défaut
    Juste une idée rapide :


    Si je comprends bien, tes dates doivent commencer à 2002 pour effacer la colonne A en cas de présence de l'année 2002.

    F est la 6ème lettre de l'alphabet qui s'efface si tu trouves 2008 dans ton range.

    Donc voici l'idée :

    Tu peux faire un while qui passerait sur toutes tes lignes de la colonne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    While cells(numligne,2) <> "" 
                     If cells(numligne,2) - 2002 >= 0 Then
                             numcolonne = cells(numligne,2) - 2002
                             columns(numcolonne).delete
                      End If
                Wend
    Je ne l'ai pas encore testé, mais si ça peut t'aider, dis moi.

    Bon courage!

  5. #5
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Bonjour,

    je répondais à cette question :

    Pas de problème pour effacer mais comment faire une recherche sur une plage de cellule ?
    vois si la soluce de Coklin te convient, sinon reformules ta demande de façon plus explicite, on finira par y arriver...

    cordialement,

    Didier

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 15
    Par défaut
    Merci à vous deux.

    Je vais être plus précis. J'ai mis un fichier exemple.

    Sur la feuille 1 j'ai un listbox2 avec des années dedans. Les valeurs du listbox2 dépendent d'un autre listbox (listbox1). Si par exemple lisbox1 = choix 1, les années du listbox2 sont de 2003 à 2009, si listbox1 = choix 2, les années du listbox2 sont de 2010 à 2012, si choix 3 alors on a toutes les années.

    Pour le moment, j'ai un code vba qui recopie les choix sélectionnés dans le listbox2 vers une plage de cellule (B20 et en dessous).

    J'ai un tableau de résultat sur une autre feuille 2, avec des données de 2003 à 2012. Ce que je cherche à faire, c'est effacer les colonnes pour lesquels les dates ne sont pas selectionnées dans la listbox2.

    Mon problème est que les années ne sont pas copiées toujours à la meme place, aussi non je pouvais faire un truc du style if range("B20") <> 2003 then Sheet2.Columns("B:B").Delete.

    Je pensais donc faire un truc du style find 2000 dans le range sheet1.range("B20:B35"), si il le trouve on garde la collonne B sur la feuille 2 au sinon on l'efface

    Je dois surement coder comme un pied et avoir un esprit tordu, donc tout conseil est le bienvenue.

    Merci
    Fichiers attachés Fichiers attachés

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 15
    Par défaut
    J'ai trouvé une parade, mais c'est pas top top à mon avis: j'exporte les années selectionnée dans ma listbox sur la plage H7:H21. Je rajouter des 1 partout en I7:I21.

    Puis je fais un nouveau tableau avec les années en H26:H40, et en I26 j'ai une formule du style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =IF(ISNA(VLOOKUP(H26,$H$7:$I$21,2,FALSE)),0,VLOOKUP(H26,$H$7:$I$21,2,FALSE))
    J'aurai donc 1 si l'année est selectionnée et 0 aussi non, et je peux faire tourner ma macro.

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

Discussions similaires

  1. [XL-2013] Copier des cellules en fonction d'une plage de cellules
    Par Flows dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 24/02/2014, 18h38
  2. [XL-2010] Affichage d'un Msgbox en fonction d'une plage de cellules complétées
    Par thomasdu40 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 01/06/2013, 08h18
  3. [VBA-E] Effacer les valeurs d'une plage de cellules
    Par jfamiens dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 10/06/2006, 11h07
  4. [VBA-E] Effacer le contenu d'une plage de cellules
    Par nicobox dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 02/06/2006, 12h20
  5. Contraite NULL sur une colonne en fonction d'une autre colon
    Par speedy1496 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 25/04/2004, 19h29

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