Simplification VBA excel
enark78
Messages postés
417
Date d'inscription
Statut
Membre
Dernière intervention
-
enark78 Messages postés 417 Date d'inscription Statut Membre Dernière intervention -
enark78 Messages postés 417 Date d'inscription Statut Membre Dernière intervention -
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.
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:
- Simplification VBA excel
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Déplacer colonne excel - Guide
- Si ou excel - Guide
- Excel compter cellule couleur sans vba - Guide
24 réponses
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)
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)
elle sert a ca justement.
http://www.cijoint.fr/cjlink.php?file=cj201003/cijQMa5j8y.xls si ca peut t'aider
http://www.cijoint.fr/cjlink.php?file=cj201003/cijQMa5j8y.xls si ca peut t'aider
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
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
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.
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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:
mais c'est pas sur que ca fasse ce que tu attend (ce n'est qu'une proposition)
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)
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.
.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.
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 ?
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 ?
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.
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.
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 :
Les points sont importants!!! C'est un peu comme si l'on codait :
de manière plus simple :
Compris?
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?
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)
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
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.
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.
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.
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)
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)
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).
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 :)
après j'ai peut etre compris de travers et t'ai donné du code inutile, et là je m'en excuse :)
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 ?
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 ?
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
tu connais le système des poupée russe ? c'est comme si tu essayai de mettre la grosse poupée dans la petite