Simplification VBA excel

Bonjour, j'ai voulu simplifier une macro (ue je n'ai pas faite) seulement elle ne fonctionne pas. Pouvez-vous m'aider ?

Macro deja faite:
Sheets("P1").Select
ActiveWindow.SmallScroll Down:=-54
Range("C1:N31").Select
Selection.Copy
Range("B1").Select
ActiveSheet.Paste
ActiveWindow.SmallScroll Down:=12
Range("C34:N53").Select
Selection.Copy
Range("B34").Select
ActiveSheet.Paste
ActiveWindow.SmallScroll Down:=-24
Range("M1").Select
Selection.AutoFill Destination:=Range("M1:N1"), Type:=xlFillDefault
Range("M1:N1").Select
Range("N2:N3").ClearContents
Range("N13:N14").ClearContents
Range("N24:N25").ClearContents
Range("N35:N36").ClearContents
Range("N46:N47").ClearContents
ActiveWindow.SmallScroll Down:=-18

ce qu'elle donne une fois simplifiée par mes soins:
Sheets("P1").Select
ActiveWindow.SmallScroll Down:=-54
Sheets("P1").Range("B1").Value = Sheets("P1").Range("C1:N53").Value
Range("M1").Select
Selection.AutoFill Destination:=Range("M1:N1"), Type:=xlFillDefault
Range("M1:N1").Select
Range("N2:N3").ClearContents
Range("N13:N14").ClearContents
Range("N24:N25").ClearContents
Range("N35:N36").ClearContents
Range("N46:N47").ClearContents

Voyez-vous d'ou vient/viennent l'/les erreur(s) ?

Merci d'avance.
--
Le meilleur moyen de résister à la tentation c'est d'y céder -
L'expérience est le nom que chacun donne à ses erreurs (Oscar Wilde)
Configuration: Windows XP / Internet Explorer 6.0

24 réponses

  1. Merci garion28, je connaissais le site developpez mais j'avais jamais vu cette page, elle a l'air interressante.
    0
    1. J'y suis deja allé mais pour le problème que j'avais, il n'y avait rien d'interresaant, ou en tout cas ej ne l'ai pas trouvé.
      0
      1. OK, alors je vais me servir de l'aide que tu m'as apporté (désolé j'étais parti manger).
        Merci encore pour ton aide.
        0
        1. je vien d'essayer ce code, ca ne prend en compte que la premiere cellule donc le reste est "sauté"
          0
          1. Pourtant ile me semble l'utiliser autre part, je vais vérifier.
            0
            1. oui c'est logique, le value est utilisé pour extraire la valeur d'une cellule, dans le cas ou tu met une sélection, tu compte récupérer quel valeur ? ^^
              tu connais le système des poupée russe ? c'est comme si tu essayai de mettre la grosse poupée dans la petite
              0
              1. Non ce n'e'st pas inutile et je te remercie. J'ai juste une derniere question.
                C'est normal si ca marche pas avec Sheets("P1").Range("B1").Value = Sheets("P1").Range("C1:N53").Value mais que ca marche avec un copier/coller ?
                0
                1. oui c'est quasiment le même fonctionnement, mais ce que je tes donné est court (comparé au code non simplifié) et fonctionne (comparé au code simplifié)

                  après j'ai peut etre compris de travers et t'ai donné du code inutile, et là je m'en excuse :)
                  0
                  1. En fait je ne vois pas trop pourquoi tu me donne ca, il me semble avoir la même chose dans mon code non simplifié dans mon premier post (avec juste le smallscroll en moins).
                    0
                    1. d'ac, donc mon code te va ou ya des truc a faire ?
                      0
                      1. et non, je ne peux pas mettre cut, sinon ca va supprimer les données que je dois garder.
                        0
                        1. je tes donné le code de l'enregistreur de macro (outils->macro->nouvelle macro) donc ya surement du code inutile puisque c'est le mode graphique qui nous oblige a faire certaine choses inutile

                          je re regardé le code de l'enregistreur ^^'
                          en faite c'est juste le selection.paste qui ne fonctionne pas, donc en 3 ligne ca donne
                          source.copy
                          cible.select
                          activesheet.paste

                          je pense que tu peu remplacer le copy par cut pour t'éviter de devoir supprimer les données en trop dans la colonne N (ca t'économisera les clearcontents)
                          0
                          1. Bon, ca me met toujours la même erreur ("propriété ou méthode non gérée pas cet objet") au même endroit.

                            Je ne comprends pas trop ton dernier code, il a l'air de copier tout le tableau alors que moi, j'ai 13 ligne bien spécifiques à ne pas toucher. Et je ne vois pas non plusa quoi sert le Range("N53").activate.

                            En tout, merci de te pencher, encore une fois, sur mon problème.
                            0
                            1. Ah mince, j'avais viré les points car je pensais que c'était la juste pour faire joli :s, une sorte de mise en forme. Je vais deja essayer en les rajoutant.
                              0
                              1. je ne sais pas si le code sans . avant le range fonctionne bien, mais j'ai pris l'habitude de le mettre car c'est reconnu par l'application (puisqu'il y a une liste de choix pour la feuille sélectionné)

                                j'ai trouvé le probleme
                                voila le code obtenu avec l'enregistreur de macro (c'est pratique pour avoir le code lorsqu'on fait certaine choses)
                                Range("C1:N53").Select
                                Range("N53").Activate
                                Selection.Copy
                                Range("B1").Select
                                ActiveSheet.Paste
                                0
                                1. J'avais écrit un roman mais je l'ai supprimé par erreur donc je vais essayer de faire plus court.

                                  With Sheets("P1")
                                  Range("C1:N53").Copy
                                  Range("B1").Paste
                                  Range("M1").AutoFill (.Range("N1"))
                                  Range("N2:N3").ClearContents
                                  Range("N13:N14").ClearContents
                                  Range("N24:N25").ClearContents
                                  Range("N35:N36").ClearContents
                                  Range("N46:N47").ClearContents
                                  End With

                                  Voila ce que j'ai fait de ta proposition.

                                  Problème: comme tu l'as peut être comprsi, j'essaie d'exécuter ma macro sur la feuille 'P1' mais quand je la lance, elle s'exécute sur la feuilel a partir de laquelle je l'ai lancée (et je fais ca a partir d'un bouton d'une autre feuille). De plus elle me sort une erreur a la ligne 3 (Range("B1").Paste) avec comme message "propriété ou méthode non gérée pas cet objet". Je pense qu'il doit y avoir un problè avec le "sheets("P1") de la première ligne.

                                  -par contre si c'est juste du code qui va servir une seul fois pour la mise en forme, tu peu ptete faire ca a la main non

                                  Non c'est un code qui sert tous les mois (et exigence du patron donc on ne discute pas).

                                  Je ne sais pas si j'ai été assez clair dans mon premier post mais le premier code (le plus long) marche correctement.
                                  0
                                  1. Modérateur
                                    Salut,
                                    Juste un petit élément (et pardon à Garion de m'incruster) :
                                    Pourquoi supprimer des éléments du code que t'as donné Garion, si tu ne les comprends pas???
                                    Garion te dis :
                                    With Sheets("P1")
                                    .gna gna gna
                                    .bla bla
                                    .etc...
                                    End With

                                    Les points sont importants!!! C'est un peu comme si l'on codait :
                                    Sheets("P1").Range("A1")
                                    Sheets("P1").Range("A2")
                                    Sheets("P1").Range("A3")

                                    de manière plus simple :
                                    With Sheets("...")
                                    .Range("A1")
                                    End With

                                    Compris?
                                    0
                                2. ah ben j'ai pas faux si tu ne m'as pas tout dis ^^
                                  par contre si c'est juste du code qui va servir une seul fois pour la mise en forme, tu peu ptete faire ca a la main non ?
                                  0
                                  1. Merci, e vais etudier ce que tu me proposes et te dire ce que j'en pense (et surtout ce que mon tableau en pense). Deja je peut te dire que tu as faux sur quelques trucs:

                                    .range("N1:N8").clearcontents
                                    .range("N10:N19").clearcontents
                                    .range("N21:N30").clearcontents
                                    .range("N32:N41").clearcontents
                                    .range("N43:N52").clearcontents

                                    Mais c'est normal, c'est moi qui em suis trompé. Ce qu'il y a dans le code initial concernant cette partie est bon, il y a plus de choses a garder que ce que je t'ai dit.

                                    0
                                    1. je n'ai pas vraiment retrouvé ce que tu as dis dans le code
                                      mais en traduisant ce que tu veu en vba ca pourrai donner ca:
                                      with activesheet
                                      .range("C1:N53").copy
                                      .range("B1").paste
                                      .range("M1").autofill(.range("N1"))
                                      .range("N1:N8").clearcontents
                                      .range("N10:N19").clearcontents
                                      .range("N21:N30").clearcontents
                                      .range("N32:N41").clearcontents
                                      .range("N43:N52").clearcontents
                                      end with
                                      


                                      mais c'est pas sur que ca fasse ce que tu attend (ce n'est qu'une proposition)
                                      0
                                      • 1
                                      • 2