Excel- Explication effacement de zone

Résolu
Bonjour,

Je n'arrive pas à effacer une zone de ma feuille.
On m'a donné ce code VBA mais je n'arrive pas à l'appliquer pour une autre zone.
Quelqu'un peut-il m'expliquer comment ça marche SVP ?

covide = Range("IV3").End(xlToLeft).Column
'covide = Cells(lig, Rows(3).Cells.Count).End(xlToLeft).Column 'cette ligne est équivalente à la première

Range( Cells(lg, cl), Cells(3, covide) ).ClearContents

Ce que je crois :
Range(X,Y).ClearContents : j'interprète que ça efface la cellule en [XY]

Range("YX").End(xlToLeft).Column : trop obscure pour moi et le reste aussi.
---------
Si je veux effacer la zone de la cellule B5 à J10 comment dois-je écrire ces lignes SVP?

Merci.
Configuration: Windows XP
Firefox 3.5.7

26 réponses

Résumé de la discussion

Le sujet porte sur comment effacer une zone précise d'une feuille Excel via VBA, par exemple B5:J10, et sur la compréhension des notions Range, Cells et End pour délimiter la plage à effacer. Plusieurs explications indiquent que Range(Cells(lig, cl), Cells(3, covide)).ClearContents peut effacer une zone délimitée par des indices calculés avec End(xlToLeft) ou End(xlUp), sous réserve d'utiliser des références cohérentes. En pratique, des propositions privilégient une approche structurée sur une feuille donnée, par exemple With Sheets('Feuil1') puis ClearContents sur Range(Cells(3,1), Cells(livide,1)) ou Range('A3:M'+x) selon la situation. Une nuance utile est que la plage peut rester statique pour éviter les erreurs, et que l'adaptation à une autre feuille nécessite de déclarer correctement les objets et de vérifier les types.

Bobot (l’IA à votre service)
  1. Bonjour,
    Petit complément pour l’écriture du code si l’on se réfère à une autre feuille, c’est plus propre de cette manière :
    With Sheets("Feuil1")
        livide = .Cells(Columns(1).Cells.Count, ["A"]).End(xlUp).Row + 1
        .Range(.Cells(3, 1), .Cells(livide, 1)).Clear
        End With

    Désolé, j’étais un peu dans les nuages … !
    1. Bonjour,
      La procédure se trouvant dans un module de feuille et vous voulez effacer les valeurs sur une autre feuille les 2 lignes deviennent :
      livide = Sheets("Feuil1").Cells(Columns(1).Cells.Count, ["a"]).End(xlUp).Row + 1
      Sheets("Feuil1").Range("A3:A" & livide).ClearContents
      1. Bonjour,

        Je suis désolé j'étais fatigué hier soir et le lien n'est pas passé, sinon vous auriez eu les réponses à vos questions. je remets le lien ici:

        https://www.cjoint.com/?bFnpWPVQK7

        Sinon, j'ai recopié le code de Gilles du poste 3. Ca marche mais pas dans la feuil1.
        Alors j'ai essayé d'adapter ainsi:
        Sheets("Feuil1").Range("A3").Select 'Effacement zone feuil1
        Selection.End(xlDown).Select
        x = ActiveCell.Row
        Sheets("Feuil1").Range("A3:M" & x).Select
        Selection.ClearContents

        Mais j'ai un message d'erreur: "erreur d'éxécution1004, erreur définie par l'application ou par l'objet"

        Je suis sur que ça tien à peu de chose. Mais quoi?

        Merci de votre aide
        1. Bonjour,

          La procédure complète ....! = oui, Merci

          Et ou sont les réponses aux 3 autres points ?
          1.- Qu'elle est le message d'erreur exact ?
          2.- Ou se trouve la procédure, dans le MODULES ou dans celui de la feuille (Feuil1) ?
          3.- Qu'elle est la valeur de la variable [livide] ?
          1. Voici le lien.
            La procédure se trouve sur le bouton nommé "Remise à zero".
            Voici le code:
            Private Sub cmdeffacer_Click()
            ' compteur bat a-b + salle 'RAZ
            Range("bata") = 0
            Range("batb") = 0
            Range("salvideo") = 0
            Range("salchimie") = 0
            Range("salinfo") = 0
            Range("B1").Value = 3
            indente = 0
            Range("C1") = indente
            flagPlac = False

            ' LE PB EST ICI !!
            livide = Sheets("feuil1").Cells(Columns(1).Cells.Count, [“A”]).End(xlDown).Row + 1
            Sheets("feuil1").Range(Cells(3, 1), Cells(livide, 1)).ClearContents

            ' la plage des agencement colonne K dés ligne 4
            covide = Range("IV3").End(xlToLeft).Column
            Range(Cells(4, 11), Cells(Cells(1, 1), covide)).ClearContents 'efface tout apres (4,11)
            Cells(1, 1) = 4 'defini la ligne de départ d'affichage de l'agencement
            End Sub
            1. Bonjour

              Je cherche quelqu'un succeptible de me dépanner sur une formule excel qui ne fonctionne pas dans tout mon tableau, et pourtant c'est la même que j'utilise des centaines de fois à coté seules, 2 cellules ne me donnent aucun résultat !!
              SOMMEPROD !

              Salutations
          2. Bonsoir,
            Alors là j'étais certain de recevoir cette réponse.
            La procédure complète ....!
            Qu'elle est le message d'erreur exact ?
            Ou se trouve la procédure, dans le MODULES ou dans celui de la feuille (Feuil1) ?
            Qu'elle est la valeur de la variable [livide] ?
            1. C'est sur la première ligne que ça plante, mais lorsque je met votre ligne c'est sur la votre que ça se marque en jaune.
              Merci
              1. Bonjour,
                Sans savoir ou la procédure est arrêtée (soulignement jaune) c'est une chance sur deux !
                En principe,, cette ligne n'est pas correcte:
                Range(Sheets("feuil1").Cells(3, 1), Sheets("feuil1").Cells(livide, 1)).ClearContents
                correcte :
                Sheets("feuil1").Range(Cells(3, 1),Cells(livide, 1)).ClearContents
                1. Bonsoir,

                  Quelqu'un peut-il me dire ce qui ne va pas dans ces lignes SVP ? VBA dit " incompatibilité de type"

                  livide = Sheets("feuil1").Cells(Columns(1).Cells.Count, [“A”]).End(xlDown).Row + 1
                  Range(Sheets("feuil1").Cells(3, 1), Sheets("feuil1").Cells(livide, 1)).ClearContents

                  Car je dois effacer la 1ere colonne d'une autre feuille (feuil1) et j'ai essayé d'appliquer les formules précédentes.

                  Merci
                  1. Désolé, il faut voir le poste " Affichage case d'option".

                    Merci à tous.
                    1. Bonjour,
                      Une petite explication sur se que vou faite une fois le choix réalisé ?
                      1. Un grand merci à vous je poste un lien sur le poste en question .

                        Merci.
                        1. Bonjour mod77,
                          Je vais regardé demain.
                          Il serait quand même bien si vous mettiez un petit exemple explicite (sur une feuille excel par exemple)!
                          1. Ok ! merci à tous j'ai compris!
                            J'ai mis le temps je sais mais voila.

                            Merci
                            1. Bonjour,
                              Que représente le "3" de Rows ?
                              Rep : Rows(3) est la ligne numéro 3, mais il faut prendre l’ensemble : Rows(3).Cells.Count ou je compte le nombre des cellules de la ligne 3 et cette valeur est donc l’index de la dernière colonne (petit souvenir, c’est quoi [IV1] ) se qui me donne la position de la dernière cellule et avec le End(xlToLeft).Column je récupère le numéro de la première cellule non vide sur la gauche.

                              Le 1er "3" c'est parce que c'est la ligne 3, non?!
                              C’est l’index de ligne 3. Pour l’objet Cells(IndexLigne, IndexColonne)

                              puis-je mettre "A" à la place du 1 ? l’IndexColonne est un nombre, cependant il est possible d’utiliser la lettre de colonne comme ceci : livide = Cells(Columns(1).Cells.Count, [“A”]).End(xlUp).Row + 1
                              1. Bonsoir Le Pingou,

                                Pouvez-vous m'aider sur mon poste de 17H52 SVP?

                                Merci d'avance.
                            2. Bonjour Le Pingou,

                              Merci pour les fomules.
                              covide = Cells(3, Rows(3).Cells.Count).End(xlToLeft).Column + 1

                              Voila justement dans votre formule ce que je ne comprend pas.
                              Que représente le "3" de Rows ?
                              Le 1er "3" c'est parce que c'est la ligne 3, non?!

                              idem pour la ligne A, faut-il toujours mettre 1 en fin du 1er Cells ?
                              livide = Cells(Columns(1).Cells.Count, 1).End(xlUp).Row + 1
                              puis-je mettre "A" à la place du 1 ?

                              Merci
                              1. Oui et c'est aussi pourquoi je voulais la tester.

                                Encore Merci à tous les 2.
                                1. Bien sûr, la seconde méthode est bonne et c'est même la meilleure, seulement il faut que la zone soit statique.

                                  Gilles
                                  1. Bonjour gilles et mod77,
                                    Eh bien oui la seconde méthode est meilleure et c'est vous qui le dite.
                                    Dans sa se cas en voilà deux très intéressantes :
                                    Numéro de la première colonne vide à droite: par exemple pour la ligne 3
                                    covide = Cells(3, Rows(3).Cells.Count).End(xlToLeft).Column + 1

                                    Idem pour la première ligne vide par exemple la colonne [A] ou [1]
                                    livide = Cells(Columns(1).Cells.Count, 1).End(xlUp).Row + 1

                                2. Oui Gilles, j'ai vu et répondu avant le message de Le Pingou.
                                  Merci pour votre réponse j'essaie le code maintenant, même si le code de Le Pingou me satisfait.

                                  Merci à tous les 2.
                                  1. Je ne sais pas si tu as vu ma réponse mais pour moi çà semble correct
                                    Gilles
                                    • 1
                                    • 2