|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Étudiant Inscription : janvier 2012 Messages : 22 ![]() |
Bonjour,
Je découvre l'univers des macros sur Excel 2007, et je vous avoue que quand ça ne marche pas je ne sais pas trop comment corriger mes erreurs. J'ai un fichier avec plus de 4000 lignes, que je voudrais traiter. Pour l'instant je m'entraine sur un petit fichier exemple, et ça ne marche pas Je veux par exemple créer une macro qui me remplit la case A1 avec un chiffre quelconque (1 par exemple), et qui l'étend jusqu'à A10. Ensuite, je voudrais que la macro copie A1:A10 dans la colonne B. J'ai créé une macro qui reproduit ces actions, mais quand je la ré-éxécute, elle ne fonctionne même pas ! Voici le code que j'ai après avoir fait les actions à la main : Code :
Quand je l'exécute, j'ai ".AutoFill" qui se surligne et le message "Erreur de compilation: Membre de méthode ou de données introuvable". Pourquoi ça ne marche pas ? Merci d'avance |
||
|
|
00
|
|
|
#2 | ||
|
Membre Expert
![]() Retraité Inscription : avril 2011 Messages : 700 ![]() |
Bonjour,
L’enregistreur de macro donne de bonnes indications pour rédiger un code mais il a la fâcheuse tendance à abuser de la méthode SELECT. Voici ton code modifié et commenté Code :
Cordialement. |
||
|
|
10
|
|
|
#3 |
|
Invité de passage
![]() Étudiant Inscription : janvier 2012 Messages : 22 ![]() |
Bonjour,
Merci beaucoup de ta réponse, ça marche très bien ! En utilisant Worksheets("feuil1"), cela veut dire que dans la même macro je peux jongler entre différentes feuilles d'un même classeur ? Ca serait pratique car je risque de devoir utiliser des données de feuil1 sur une feuil2 Maintenant que ça marche, j'essaie de faire une moyenne entre 2 cellules d'un tableau de données, toutes les 2 cellules (En clair, faire la moyenne entre A1 et A2, puis A3 et A4 ...etc.). Cela fonctionne avec la macro réalisée à la main, mais je vais essayer de reprendre ta syntaxe, c'est plus clair. Je risque d'avoir d'autres questions à venir ![]() Merci en tout cas !
|
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() Retraité Inscription : avril 2011 Messages : 700 ![]() |
Oui, tu as bien compris.
Si tu écris Code :
Worksheets("Feuil1").Range("A1:A10").Copy Destination:=Worksheets("Feuil2").Range("B1") Bon courage ![]() Cordialement. |
|
|
00
|
|
|
#5 |
|
Invité de passage
![]() Étudiant Inscription : janvier 2012 Messages : 22 ![]() |
Je te remercie, je vais essayer d'avancer comme un grand maintenant
Bon, j'ai réussi à faire ce que je voulais. Maintenant, un autre souci se pose à moi. Voilà le contexte : J'ai un relevé de vent et de puissance pour 3 éoliennes sur un mois, avec un pas de 10'. Soit environ 4000 lignes. Et c'est c'est ces données que je veux trier. Disons qu'elles sont sur feuil1, et qu'il y a 3 colonnes : Dans la colonne A, l'identifiant de l'éolienne (E1, E2, E3), dans B le vent, et dans C la puissance. Ce que je voudrais, c'est trier pour une éolienne, sachant que le nombre de ligne par éolienne est variable. Donc sélectionner la plage de B et C en fonction de la "valeur" en A, puis copier les données sur feuil2 pour les traiter. C'est possible ça ? Je voudrais en être sûr parce que mes recherches sont pas très fructueuses pour l'instant sur le sujet |
|
|
00
|
|
|
#6 |
|
Membre Expert
![]() Retraité Inscription : avril 2011 Messages : 700 ![]() |
C’est possible ? Faut voir !
Tu peux commencer avec l’enregistreur de macro. Sélectionner la plage de la feuille 1 Filtrer Sélectionnez la valeur correspondant à l’éolienne dans la liste des valeurs de texte Copier la plage Sélectionner la feuille 2 Collage spécial / Valeurs / Blancs non compris Cordialement. |
|
|
00
|
|
|
#7 |
|
Invité de passage
![]() Étudiant Inscription : janvier 2012 Messages : 22 ![]() |
Bonjour,
Désolé du retard, je n'ai pas pu travailler dessus depuis 3 jours, mais j'ai réussi à coder ce que je voulais. C'est un mélange entre ta syntaxe et celle de l'enregistreur de macro, donc c'est très laid, mais ca fonctionne et pour l'instant c'est le principal Maintenant que mes 2 colonnes A et B sont triées, je voudrais filtrer A avec un critère et récupérer les colonnes de B correspondantes. Par exemple, je souhaite sélectionner toute la colonne A (ça je sais faire J'ai essayé le filtre automatique, seulement il se sert de la valeur de la cellule active pour faire le tri. Je voudrais m'en affranchir et faire un tri avec ma propre valeur que je lui donne. Je sais pas si je suis clair, mais merci d'avance de vos réponses
|
|
|
00
|
|
|
#8 | ||
|
Membre Expert
![]() Retraité Inscription : avril 2011 Messages : 700 ![]() |
Bonjour,
Tu peux obtenir le résultat attendu avec le filtre automatique. Avec l’enregistreur de macro : Tu sélectionnes A1 puis Menu Accueil / Filtrer Choix du filtre en A1 : Filtres numériques / Entre … / puis choix des valeurs (haute et basse). La seule « anomalie » lors de cet enregistrement, c’est que les valeurs de critères sont enregistrées avec une virgule. Pour que cela fonctionne, il faut remplacer ces virgules par un point. Ensuite, tu fais une copie des cellules visibles vers la feuille 2. Voici le code correspondant pour la plage A1:C50 Code :
|
||
|
|
00
|
|
|
#9 | ||
|
Invité de passage
![]() Étudiant Inscription : janvier 2012 Messages : 22 ![]() |
Bonjour,
Merci de ton aide. J'ai un peu adapté ton code, parce que le filtrage gardait la valeur de A1, même si celle-ci ne faisait pas partie de l'intervalle de valeur Mon souci, c'est que je répète ce filtrage pour d'autres valeurs. En fait je cherche à trier sur un intervalle de +/- 0.05 autour d'un entier : 1 --> [0.95;1.05] 2 --> [1.95;2.05] 3 --> [2.95;3.05] ... jusqu'à N J'ai donc pensé à ce code : Code :
De même, comment je peux lui dire de copier une valeur dans la cellule H associée à la valeur de i ? i=1 --> H1 i=2 --> H2 ...etc. Désolé de toutes ces questions, mais je trouve pas grand chose sur le net pour avancer seul Merci d'avance
|
||
|
|
00
|
|
|
#10 | |||||
|
Membre Expert
![]() Retraité Inscription : avril 2011 Messages : 700 ![]() |
Bonjour,
Citation:
Citation:
Théoriquement, pour intégrer i au critère, il faudrait écrire Criteria1=">=" & Cstr( i-0.05) Avec i=1, cela se traduirait par Criteria1= ">=0,95" Mais comme je te l’ai indiqué précédemment, pour que cela fonctionne il faut remplacer la virgule par un point. D’où la solution pour déclarer le critère : Code :
C1 = Replace(">=" & CStr(i - 0.05), ",", ".") Voici le code correspondant Code :
Citation:
ActiveSheet.Range("H" & i) = ActiveSheet.Range("G" & i) Cordialement. |
|||||
|
|
00
|
|
|
#11 | ||
|
Invité de passage
![]() Étudiant Inscription : janvier 2012 Messages : 22 ![]() |
Merci encore une fois de ton aide, tout ça m'a bien servi !
Je tâtonne mais j 'avance petit à petit malgré tout Bon, j'ai fini de coder mes macros de manière indépendante mais quand je veux les réunir, j'ai un problème ... J'ai ma macro qui trie mes données par ordre croissant, qui fonctionne très bien (j'ose pas montrer le code tellement c'est laid). J'ai ma macro qui filtre les données par intervalle, et qui calcule la moyenne associée, dont voici le code : Code :
Je ne comprends pas pourquoi ça ne marche plus |
||
|
|
00
|
|
|
#12 | ||
|
Membre Expert
![]() Retraité Inscription : avril 2011 Messages : 700 ![]() |
Bonjour,
Avec ce que tu me donnes, difficile de pousser l’analyse très loin (je ne peux pas voir les éléments qui peuvent interagir). Essaie avec ce code (changement du nom des variables). Code :
|
||
|
|
00
|
|
|
#13 |
|
Invité de passage
![]() Étudiant Inscription : janvier 2012 Messages : 22 ![]() |
Bonjour,
Ca marche parfaitement ! Ca a l'air tellement simple, mais n'ayant aucune base, je suis très vite perdu ... Merci encore ! |
|
|
00
|
|
|
#14 |
|
Membre Expert
![]() Retraité Inscription : avril 2011 Messages : 700 ![]() |
As-tu trouvé la variable qui provoquait le dysfonctionnement ?
Si O.K, n'oublie pas de cliquer sur ![]() Cordialement. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com