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 :

DEBUTANT - Supprimer le contenu d'une colonne à partir de la ligne 4


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Ingénieur d'affaires
    Inscrit en
    Novembre 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'affaires

    Informations forums :
    Inscription : Novembre 2016
    Messages : 9
    Par défaut DEBUTANT - Supprimer le contenu d'une colonne à partir de la ligne 4
    Bonjour à tous,

    Très jeune débutant de 40 ans dans VBA, je souhaite:
    - effacer le contenu d'une colonne à partir de la ligne 4.
    - effacer le contenu de plusieurs colonnes à partir de la xième lignes

    J'ai fait des recherches infructueuses sur le forum (surement pas assez expérimenté pour trouver)

    Merci

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    - 1) constituer (par l'instruction Set) la plage à effacer (sais-tu faire cette partie-là ?)
    - 2) soit Plage cette plage, lui appliquer la méthode ClearContents

  3. #3
    Membre régulier
    Homme Profil pro
    Ingénieur d'affaires
    Inscrit en
    Novembre 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'affaires

    Informations forums :
    Inscription : Novembre 2016
    Messages : 9
    Par défaut
    Merci pour ta réponse,

    Je m'orienterai vers le ClearContents.

    Ma difficulté est : effacer toute le contenu de la colonne à partir de la ligne 4 (par exemple)

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    J'avais bien compris cela.
    Je reviens à ma question N° 1
    constituer (par l'instruction Set) la plage à effacer (sais-tu faire cette partie-là ?)
    Car sinon, c'est d'abord cette difficulté, qu'il te faut résoudre, avant même de parler d'effacement (qui n'est pas la "suppression").
    Alors : sais-tu constituer cette plage ?

    regarde ce que fait ce petit exemple et sers-t-en en l'adaptant comme tu l'entends
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim derlig As Long, plage As Range
    derlig = Range("D" & Rows.Count).End(xlUp).Row ' détermination de la dernière ligne remplie de la colonne D
    Set plage = Range("D2:D" & derlig) ' détermination de la plage constituée des cellules 2 à dernière ligne de la colonne 2
    plage.ClearContents ' effacement de toute cette plage

  5. #5
    Membre régulier
    Homme Profil pro
    Ingénieur d'affaires
    Inscrit en
    Novembre 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'affaires

    Informations forums :
    Inscription : Novembre 2016
    Messages : 9
    Par défaut
    Pour répondre à ta question: Non malheureusement pas encore.

    Je "m'auto-forme" au fur et à mesure et mon niveau est pour l'instant proche du néant. Cependant j'arrive à sortir des produits sympas suite à beaucoup de recherche, d'essais et surtout d'échecs

  6. #6
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    tu as ta réponse (un rajout) dans mon message précédent.

    Cependant j'arrive à sortir des produits sympas suite à beaucoup de recherche
    n'est selon moi pas la meilleure manière d'apprendre.
    Mieux (mille fois mieux) vaut avancer pas à pas, par de petits exercices faits au fur et à mesure de lecture de rubriques de l'aide VBA. C'est en tout état de cause ainsi que je me suis personnellement formé (seul).

  7. #7
    Membre régulier
    Homme Profil pro
    Ingénieur d'affaires
    Inscrit en
    Novembre 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'affaires

    Informations forums :
    Inscription : Novembre 2016
    Messages : 9
    Par défaut Merci
    Citation Envoyé par unparia Voir le message
    tu as ta réponse (un rajout) dans mon message précédent.


    n'est selon moi pas la meilleure manière d'apprendre.
    Mieux (mille fois mieux) vaut avancer pas à pas, par de petits exercices faits au fur et à mesure de lecture de rubriques de l'aide VBA. C'est en tout état de cause ainsi que je me suis personnellement formé (seul).
    Merci pour ton aide

  8. #8
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bien.
    Maintenant :
    1) à "se former" au travers de ce que d'autres ont fait, on en épouse les errements/maladresses/lourdeurs éventuels ... et on les répète alors ensuite souvent.
    2) Pour la seconde partie de ton exposé (ton 1er message), à savoir l'extension à d'autres colonnes :
    ouvre ton aide VBA sur le mot Union.
    Et si difficultés résolues --->> le tag RESOLU permet de libérer la présente discussion.

  9. #9
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    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 374
    Billets dans le blog
    8
    Par défaut re
    re
    bonsoir
    je vais faire encore rager unparia mais il y a les méthodes directes sans "set"

    ton soucis c'est quoi??

    tu a des colonnes dans les quelles tu veux tout effacer apartir d'une ligne X pour chaque colonne

    que devons nous faire ??

    tout dabords determiner jusqu'ou chaque colonne est remplie
    ensuite faire un clearcontents sur chaque plage déterminée

    comment ?

    on peut tout simplement faire un array(variable tableau a 1 dim )avec les 1 ere cellules de chaque colonne a effacer c'est le point A
    ensuite determiner la derniere ligne utilisée de chaque colonne c'est le point B

    allons y
    exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub test()
    Dim tablo as variant,i as long 
    tablo = Array("A4", "B7", "c10", "D5", "E9") 'ceci se sont les adresses de  cellule de depart de chaque colonnes
    For i = 0 To UBound(tablo)'ici on boucle sur tout les cellule dont l'adresse se trouve dans l'array(tablo)
    Range(tablo(i), Cells(Rows.Count, Range(tablo(i)).Column).End(xlUp)).ClearContents'  on efface la plage cellule de l'array(i) vers la dernière ligne de la même colonne 
    Next
    End Sub
    le tout sans set et autre construction de variable seule l'array des addresse cellule number one de chaque colonne compte

    le tout se fait par la ligne 5

    voila
    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

  10. #10
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Bonsoir,

    comme tu veux te former :

    Un petit coup de pouce sur Array :
    VI. La fonction Array

    Des lien utiles
    Vos premiers pas dans l'éditeur de macros Excel
    Apprendre la programmation en VBA pour EXCEL par la pratique - Première partie
    Excel et l'enregistreur de macro

    Pour comprendre un code c'est du travail, voilà des conseils :
    - Utiliser l'aide hors ligne avec F1
    - Utiliser la Faq
    - Faire des recherches internet
    - Faire du pas à pas (F8) en ayant la fenêtre des variables locales (utilisation aussi d'espion dans le code) afin de voir ce qu'il se passe dans le code les valeur, les types (obtenus lors du pas à pas) … etc
    - Utilisation de MsgBox ou Debug.Print sur des parties du codes
    - prendre des petites parties de code afin de les tester et d'en comprendre le fonctionnement

    Voilà là y a pas mal de données afin de comprendre et apprendre

    Ryu
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  11. #11
    Membre extrêmement actif
    Avatar de NVCfrm
    Homme Profil pro
    Administrateur Système/Réseaux - Developpeur - Consultant
    Inscrit en
    Décembre 2012
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur Système/Réseaux - Developpeur - Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 037
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par patricktoulon Voir le message
    ...
    tout dabords determiner jusqu'ou chaque colonne est remplie
    ensuite faire un clearcontents sur chaque plage déterminée...
    Mais ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub test()
    Dim tablo as variant,i as long 
    tablo = Array("A4", "B7", "c10", "D5", "E9") 'ceci se sont les adresses de  cellule de depart de chaque colonnes
    For i = 0 To UBound(tablo)'ici on boucle sur tout les cellule dont l'adresse se trouve dans l'array(tablo)
    Range(tablo(i), Cells(Rows.Count, Range(tablo(i)).Column).End(xlUp)).ClearContents'  on efface la plage cellule de l'array(i) vers la dernière ligne de la même colonne 
    Next
    End Sub
    et ce commentaire en guise de conclusion "le tout sans set et autre construction de variable seule l'array des addresse cellule number one de chaque colonne compte" est la raison de mon intervention.
    là où le bât blesse, c'est bien la volonté de se passer du mot clé Set, sans une alternative équivalente à Set ( une définition sans ambiguité de l'objet Range qui est assez volatile). Il peut arriver qu'en l'espace de 2 lignes lignes d'Instruction Application.Rang(tablo(i)) change de feuille, voir de classeur.

  12. #12
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour patricktoulon
    je vais faire encore rager unparia mais il y a les méthodes directes sans "set"
    tu ne me fais absolument pas "rager"
    J'ai simplement voulu rester le plus près possible du niveau du demandeur, en décomposant le plus possible (et en commentant de sorte à ce que sa solution ne soit pas un "mystère", mais un apprentissage).
    J'ai également VOULU qu'il se mette seul à l'extension à d'autres colonnes, d'autant que (relire son message) l'effacement se fait toujours à partir de la même ligne.

  13. #13
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    bien que toutes vos solutions soient, dans un premier temps, valables, mais dans un second temps tout aussi pertinente que suivant le contexte d'un projet, j'aurai pu être amené à les utiliser ... Est-ce que c'est vraiment ce qu'on a de mieux à proposer ?

    ça je ne le sais en cet instant, car plusieurs informations manquantes pourraient rendre vos proposition non optimales (ou plutôt lourdes pour le besoin)


    - est-ce que tes colonnes sont contiguës ou non ?

    - La détermination de la première ligne est-elle arbitraire ou logique ? J'entends par logique le fait de pouvoir la faire "deviner" par la procédure. Par exemple "la ligne 4" n'est pas logique mais arbitraire, et nécessiterait un inputbox pour demander à l'utilisateur (ou l'écrire en dur dans le code)

    - Même question pour détecter la première colonne + le nombre de colonnes contiguës / OU / Chaque numéro de colonne ? Et est-ce que la "première ligne" de chaque colonne est la même ou est différente (avec détection arbitraire ou logique ?) ?

    - es-tu dans le cadre d'un tableau lambda (= tu as remplis des cellules et ça forme un tableau) ou d'un tableau structuré (crée via le menu insertion >> Tableau) ?


    Ouf, ça en fait des questions, c'est toutes celles que je viens de me poser quand j'ai commencé à réfléchir à ce qui serait "le mieux" (ou le moins pire en mode JoeJoe )

    D'habitude :

    - Patrick nous fait un code en deux lignes ... là on y est pas (et je te connais, oui y'a des commentaires et t'as pas mis des ":" partout )
    - Unparia questionne comme la gestapo avant de lâcher sa première ligne de code ... là on dirait presque qu'il a été payé/sponsorisé par une marque pour dégainer rapidement
    - Moi je propose une bouse en 4 annule et remplace parce que j'ai foncé tête baissé


    C'est l'hiver, on est tous en train de tomber malade


    Manquerait plus que Marc-L nous fasse un message sans point d'exclamation (Pareil pour rdurupt nouvellement baptisé dont j'arrive jamais à écrire le nouveau nom) ou de suspension

  14. #14
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour joe.levrai
    Je salue d'autant ta sagacité que (probablement comme toi) je devine - mais il ne l'a pas dit - que ses 4 premières lignes sont des espèces d'entêtes et qu'il veut effacer tout le reste

  15. #15
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    J'aime de moins en moins deviner, mais t'as marqué un point

  16. #16
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    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 374
    Billets dans le blog
    8
    Par défaut re
    re
    @unparia relis sa demande pour moi elle est tres claire
    et non elle commence pas toute a la lignes 4 sinon il aurait été plus explicit sur ce point



    - effacer le contenu d'une colonne à partir de la ligne 4.
    - effacer le contenu de plusieurs colonnes à partir de la xième lignes
    @joe ya rien a deviner vu la clarté de la demande
    après oui les colonnes contigües ferait que la base de l'array soit pas la bonne façon
    mais la je dis non car

    avec un départ différent en terme de ligne
    meme avec des colonnes contiguë ont est obligé de boucler sur chaque colonne concernées

    conclusion
    si tu a mieux qu'une boucle sur les firstcel de chaque colonne je suis preneur
    conclusion
    cette méthode fonction en colonne contigue ou non et le meme nombre de ligne ou non
    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

  17. #17
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    On va attendre le retour du demandeur.
    Quelle que soient les précisions qu'il apportera, toutefois, l'établissement d'une plage à effacer d'un coup est toujours plus rapide qu'un effacement en boucle.
    Si tu aimes, patricktoulon, les codes "courts" et pas toujours "bons amis", je te montrerai comment y parvenir, y compris avec des lignes de départ différentes.
    A demain.

  18. #18
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Et pour répondre à la place de joe.levrai à ton invite :
    si tu a mieux qu'une boucle sur les firstcel de chaque colonne je suis preneur
    regarde ce que fait par exemple ceci (que je ne ferais jamais pour moi et que je ne recommande à personne) sur les cellules de la feuil2:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With Worksheets("Feuil2").UsedRange
      Union(.Columns("B").Offset(4), .Columns("D").Offset(6), .Columns("F").Offset(5)).ClearContents
    End With
    Pour être "court" et rapide, c'est "court" et rapide ... et à éviter !

  19. #19
    Membre régulier
    Homme Profil pro
    Ingénieur d'affaires
    Inscrit en
    Novembre 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'affaires

    Informations forums :
    Inscription : Novembre 2016
    Messages : 9
    Par défaut
    Bonjour à tous,

    J ai essayé avec les méthodes de unparia et de patricktoulon. Les deux fonctionnent.
    Alors effectivement la cellule b3 est une entête et sont contenu ne doit pas être effacé (ainsi que les cellules c4:g4). j ai associé les codes a un bouton et si je clic dessus une fois les données de la colonne s effacent à partir de la cellule b4 mais si je clic une seconde fois la cellule b3 s efface (dans les deux solutions proposées).

    Pour apporter des précisions à joe.levrai
    - les colonnes sont contiguës
    - les premières ligne et colonne sont toujours les mêmes.

    En fait dans la colonne b il y a la sélection d une listbox.
    Dans la ligne c4:g4, il y a une formule.
    Et j ai écrit une code qui recopie (autofill) le code tant qu il y a des valeurs dans la colonne B.

    Encore merci pour vos réponses.

  20. #20
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    patrick, tu vois c'était pas si clair que ça ?

    c'est contigu, et la first row est idem

    d'où une rationalisation réelle à apporter en partant de la première cellule, avec un petit Resize(Dernière ligne - 4, NbColonne)

    Et mieux encore, si on était dans un tableau structuré, en utilisant databodyrange pour éviter de soustraire les lignes "au dessus")

Discussions similaires

  1. Réponses: 9
    Dernier message: 09/06/2011, 17h03
  2. [DEBUTANT]Recherche mot contenu dans une String
    Par lynxman dans le forum Langage
    Réponses: 7
    Dernier message: 16/12/2005, 11h49
  3. [DEBUTANT]Supprimer les espaces pour une requete
    Par tripper.dim dans le forum Oracle
    Réponses: 4
    Dernier message: 12/10/2005, 16h04
  4. [Debutant] vb.net couleur d'une colonne flexgrid
    Par bestsimo2 dans le forum Windows Forms
    Réponses: 8
    Dernier message: 04/06/2005, 18h27
  5. Index sur le contenu d'une colonne XMLTYPE
    Par haugoyard dans le forum Oracle
    Réponses: 7
    Dernier message: 11/04/2005, 11h10

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