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 :

Code VBA pour effacer une plage pré établie de cellule dans une colonne


Sujet :

Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 28
    Points : 14
    Points
    14
    Par défaut Code VBA pour effacer une plage pré établie de cellule dans une colonne
    Bonjour

    J'ai trouvé un code VBA qui em permet d'effacer les valeurs de toute une colonne pour pouvoir par la suite ré-écrire dessus.

    Voici le code:


    Sheets("Feuil2").Range("b4:b" & Sheets("Feuil2").Range("b65000").End(xlUp).Row + 1).ClearContents


    je souhaiterais effacer uniquement les cellues de la colonne B ( B4 à B19). Le problème est que cette formule m'efface toute la colonne B. Je n'arrive pas résoudre ce problème (difficile de comprendre cette formule).

    est ce que quelqu'un pourrait m'éclairer?

    Merci par avance de votre aide

  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 dimitri70 Voir le message
    J'ai trouvé un code VBA qui em permet d'effacer les valeurs de toute une colonne pour pouvoir par la suite ré-écrire dessus.
    Avant d'intégrer un morceau de code, essaye d'utiliser l'aide VBA d'Excel pour en comprendre chaque éléments.
    Ainsi, rapidement, tu ne seras plus obligé de récupérer du code les yeux fermés mais tu pourras créer ton propre code.

    je souhaiterais effacer uniquement les cellues de la colonne B ( B4 à B19).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Feuil2").Range("b4:b19").ClearContents

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 28
    Points : 14
    Points
    14
    Par défaut
    Merci Menhir pour ton aide

    Je fais de mon mieux pour rechercher dans l'aide et comprendre mais ce n'est pas facile.



    J'ai encore un petit soucis.

    Je voudrais recopier les nouvelles valeurs à partir de la cellule B6, mais si j'ai des valeurs dans les la colonne après la cellule B22, les nouvelles valeurs se mettent en dessous et non pas dans ma plage réservée à cela.
    Voici la formule:

    'Plage de recherche des valeurs PF5 CR1
    Set Plage = Sheets("Visu lignes").Range("c18:r18,c20:r20")
    'Mise en liste des valeurs PF4
    For Each cell In PlageSet Liste = Sheets("Feuil2").Range("b6:b" & Sheets("Feuil2").Range("b64300").End(xlUp).Row + 1)
    If Application.CountIf(Liste, cell) = 0 Then
    Sheets("Feuil2").Range("b65300").End(xlUp).Offset(1, 0) = cell
    End If
    Next cell

    Merci encore une fois

  4. #4
    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 dimitri70 Voir le message
    J'ai encore un petit soucis.
    J'ai l'impression que ça va être un sujet spagetti : ça commence par un petit bout et plus tu tires, plus il s'allonge.

    Je voudrais recopier les nouvelles valeurs à partir de la cellule B6, mais si j'ai des valeurs dans les la colonne après la cellule B22, les nouvelles valeurs se mettent en dessous et non pas dans ma plage réservée à cela.
    Est-ce que c'est ce que ça fait ou est-ce ce que tu veux faire ?

    Voici la formule:
    Pense à utiliser les balise de code (l'icone # dans l'éditeur du forum) et fais des itération de tes structures pour que ce soit plus lisible.

    Et fais attention à tes copier/coller : tu as mis une instruction Set sur la même ligne que ton For Each.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 28
    Points : 14
    Points
    14
    Par défaut
    Ooops désolé Menhir, non après cela je n'ai plus de quesion.

    En faite la formule marche très bien,

    J'ai une première formule qui efface les données recopiées lors de précends usages (plage de B4 à B22).
    Et la deuxième partie de la formule recopie les nouvelles données mises à jours (de B4 à B22).

    Le soucis est que si j'ai des valeurs à partir de B22, les nouvelles valeurs s'affichent en dessous de ces valeurs et nopn pas dans ma plage B4à B22. C'est ce que je cherche à faire

    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
    Sub Lorettelundi()
    Dim Plage As Range, cell As Range
    Dim Liste As Range
    'Départ navette du vendredi 17h: lorette lundi 5-21h et SGL lundi 5h->14
    'Effacement de la liste LOR
    Sheets("Feuil2").Range("b6:b22").ClearContents
    '
    'Plage de recherche des valeurs PF8 CR1
    Set Plage = Sheets("Visu lignes").Range("c8:r8,c10:r10")
    'Mise en liste des valeurs PF8
    For Each cell In Plage
    Set Liste = Sheets("Feuil2").Range("b6:b" & Sheets("Feuil2").Range("b64300").End(xlUp).Row + 1)
    If Application.CountIf(Liste, cell) = 0 Then
    Sheets("Feuil2").Range("b65300").End(xlUp).Offset(1, 0) = cell
    End If
    Next cell
    Encore désolé pour la mise en forme, j'espère être plsu claire.

    Merci pour votre aide

  6. #6
    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 dimitri70 Voir le message
    Le soucis est que si j'ai des valeurs à partir de B22, les nouvelles valeurs s'affichent en dessous de ces valeurs et nopn pas dans ma plage B4à B22. C'est ce que je cherche à faire
    Je ne comprends pas ta question.

    Tu veux dire que s'il y a plus de nouvelles valeur que de cases dans la zone B6:B22, tu ne veux pas qu'elles s'écrivent dans B23 et suivantes ?
    Mais dans ce cas, que veux-tu qu'il se passe ? Que les valeurs supplémentaires ne soient pas écrites ou qu'elles soient écrites à la place des valeurs qui ont déjà été placées ?

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 28
    Points : 14
    Points
    14
    Par défaut
    Non ce n'est pas ca.

    ma plage ou s'affiche les valeurs quand je lance ma macro va de B6 à B22.

    Si après avoir lancé ma macro, j'ajoute des valeurs quelquonques en dessous de B22 et que je relance ma macro, les valeurs de ma plage B6à B22 s'affacent, celles en dessous restent (puisque ne ne sont pas prisent en compte dans ma macro), et les nouvelles valeurs générées par ma macro s'affichent en dessous des autres qui n'ont pas été effacées. => moi je voudrais qu'elle réapparaissent unqiuement dans la plage de B6 à B22.

    l'espace entre B6 et B22 est suffisant.

    En esperant avoir été plus clair

  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
    Dan ce cas, il faudrait que tu commences ta recherches de la dernière cellule à B22 et non à B64300 (ce qui, de toute façon, était une erreur, mieux valait écrire "B" & Rows.Count, c'est plus propre et plus précis).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    For Each cell In Plage
       Set Liste = Sheets("Feuil2").Range("b6:b" & Sheets("Feuil2").Range("b64300").End(xlUp).Row + 1)
       If Application.CountIf(Liste, cell) = 0 Then Sheets("Feuil2").Range("b22").End(xlUp).Offset(1, 0) = cell
    Next cell

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 28
    Points : 14
    Points
    14
    Par défaut
    Merci Menhir ca marche nickel.

    Le vrai problème c'est que j'ai du mal à saisir la formule.

    Est ce qu tu pourrais m'expliquer le raisonnement?

  10. #10
    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 dimitri70 Voir le message
    Le vrai problème c'est que j'ai du mal à saisir la formule.
    Décompose la formule en éléments et regarde chaque éléments dans l'aide.
    VBA est un langage objet. Chaque éléments est un objet (une propriété ou une méthode) de l'élément précédent (en lisant de gauche à droite bien sûr)
    Sheets("Feuil2") c'est la feuille de calcul.
    Range("b22") une cellule de cette feuille
    End(xlUp) et Offset(1, 0), regarde la liste des membre de l'objet Rande dans l'aide Excel.

    Est ce qu tu pourrais m'expliquer le raisonnement?
    Une fois qu'une discussion est déclarée Résolue, il n'y a plus grand monde qui va regarder dedans.

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

Discussions similaires

  1. [Toutes versions] Macro ou code VBA pour effacer des caracteres et aller a la ligne dans un meme cellule
    Par ghisunit dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 07/04/2012, 15h29
  2. Code VbA pour effacer ligne d'un tableau
    Par carottemémé dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 17/01/2011, 07h09
  3. Réponses: 1
    Dernier message: 09/11/2010, 15h50
  4. Réponses: 3
    Dernier message: 01/06/2009, 18h21
  5. Code VBA pour effacement de contenu de cellules
    Par MAMANHOU dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 18/03/2008, 15h51

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