Simplification VBA excel

Fermé
enark78 Messages postés 417 Date d'inscription mardi 2 février 2010 Statut Membre Dernière intervention 12 juillet 2012 - 2 mars 2010 à 08:09
enark78 Messages postés 417 Date d'inscription mardi 2 février 2010 Statut Membre Dernière intervention 12 juillet 2012 - 2 mars 2010 à 14:24
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.
A voir également:

24 réponses

garion28 Messages postés 1543 Date d'inscription mardi 16 juin 2009 Statut Membre Dernière intervention 3 avril 2011 404
2 mars 2010 à 08:37
bonjour,
elle est sensé faire quoi ? (parce que a vu de nez, ce macro ne sert a rien a part faire des copier/coller et effacement)
0
enark78 Messages postés 417 Date d'inscription mardi 2 février 2010 Statut Membre Dernière intervention 12 juillet 2012 17
2 mars 2010 à 08:43
elle sert a ca justement.

http://www.cijoint.fr/cjlink.php?file=cj201003/cijQMa5j8y.xls si ca peut t'aider
0
garion28 Messages postés 1543 Date d'inscription mardi 16 juin 2009 Statut Membre Dernière intervention 3 avril 2011 404
2 mars 2010 à 09:22
ah j'ai peur, ya trop de chiffre tout petit ^^'

peut tu dire ce que tu pense que cette macro fait ? (le fichier n'est pas très causant si on ne connais pas le contexte)


a première vu quand tu a réduit la macro tu as viré les principales fonction de copie pour ne garder que 2 copie et des effacements
0
enark78 Messages postés 417 Date d'inscription mardi 2 février 2010 Statut Membre Dernière intervention 12 juillet 2012 17
2 mars 2010 à 09:30
Alors, cette macro fait un copier/coller de C1:N31 en B1 et un autre de C34:N53 en B34 (elle peut faire directement un copier/coller de C1:N53 en B1, ca ne change rien.
Ensuite elle fait quelque chose qui, je crois, s'appelle l'autofill (de M1 en N1).
Enfin, elle efface toute la colonne N appartenant au tableau (qui lui va A1 en N53), a part les ligne 9, 20, 31, 42 et 53.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
garion28 Messages postés 1543 Date d'inscription mardi 16 juin 2009 Statut Membre Dernière intervention 3 avril 2011 404
2 mars 2010 à 09:44
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
enark78 Messages postés 417 Date d'inscription mardi 2 février 2010 Statut Membre Dernière intervention 12 juillet 2012 17
2 mars 2010 à 09:50
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
garion28 Messages postés 1543 Date d'inscription mardi 16 juin 2009 Statut Membre Dernière intervention 3 avril 2011 404
2 mars 2010 à 09:55
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
enark78 Messages postés 417 Date d'inscription mardi 2 février 2010 Statut Membre Dernière intervention 12 juillet 2012 17
2 mars 2010 à 10:04
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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
2 mars 2010 à 10:42
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
garion28 Messages postés 1543 Date d'inscription mardi 16 juin 2009 Statut Membre Dernière intervention 3 avril 2011 404
2 mars 2010 à 10:35
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
enark78 Messages postés 417 Date d'inscription mardi 2 février 2010 Statut Membre Dernière intervention 12 juillet 2012 17
2 mars 2010 à 10:41
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
enark78 Messages postés 417 Date d'inscription mardi 2 février 2010 Statut Membre Dernière intervention 12 juillet 2012 17
2 mars 2010 à 10:46
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
garion28 Messages postés 1543 Date d'inscription mardi 16 juin 2009 Statut Membre Dernière intervention 3 avril 2011 404
2 mars 2010 à 11:31
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
enark78 Messages postés 417 Date d'inscription mardi 2 février 2010 Statut Membre Dernière intervention 12 juillet 2012 17
2 mars 2010 à 11:34
et non, je ne peux pas mettre cut, sinon ca va supprimer les données que je dois garder.
0
garion28 Messages postés 1543 Date d'inscription mardi 16 juin 2009 Statut Membre Dernière intervention 3 avril 2011 404
2 mars 2010 à 11:37
d'ac, donc mon code te va ou ya des truc a faire ?
0
enark78 Messages postés 417 Date d'inscription mardi 2 février 2010 Statut Membre Dernière intervention 12 juillet 2012 17
2 mars 2010 à 11:42
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
garion28 Messages postés 1543 Date d'inscription mardi 16 juin 2009 Statut Membre Dernière intervention 3 avril 2011 404
2 mars 2010 à 11:47
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
enark78 Messages postés 417 Date d'inscription mardi 2 février 2010 Statut Membre Dernière intervention 12 juillet 2012 17
2 mars 2010 à 11:51
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
garion28 Messages postés 1543 Date d'inscription mardi 16 juin 2009 Statut Membre Dernière intervention 3 avril 2011 404
2 mars 2010 à 12:29
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
enark78 Messages postés 417 Date d'inscription mardi 2 février 2010 Statut Membre Dernière intervention 12 juillet 2012 17
2 mars 2010 à 12:36
Pourtant ile me semble l'utiliser autre part, je vais vérifier.
0
garion28 Messages postés 1543 Date d'inscription mardi 16 juin 2009 Statut Membre Dernière intervention 3 avril 2011 404
2 mars 2010 à 12:41
je vien d'essayer ce code, ca ne prend en compte que la premiere cellule donc le reste est "sauté"
0