Obtention Plage cellules type "A7:A5;A3" [Excel/VBA] - VB/VBA/VBS - Programmation
Marsh Posté le 06-08-2006 à 21:57:15
bonsoir,
Tu nous pondrais pas un petit classeur démo dans cjoint des fois ?
Si le soucis c'est juste de faire la moyenne de plusieurs cellules disjointes, c'est pas un problème :
En admettant que tu aies plusieurs cellules nommées "galopin", tu lances la macro suivante et tu n'as pas besoin de parcourir toute la zone...
Sub Test()
MsgBox WorksheetFunction.Average(Range("galopin" ))
End Sub
A+
Marsh Posté le 06-08-2006 à 22:12:50
Hum je ne vais malheureusement pas avoir le temps de préparer un fichier propre ce soir.
Mais idéalement ce que je souhaiterais c'est presque obtenir ma plage sous la forme d'une "string" qui s'incrémenterait à chaque itération de ma boucle (A7;A6;A5;A4...) et que je pourrais ensuite "coller" de manière à réaliser à peu près ce qui se fait dans le bas de cette page à la partie intitulée "Ajout d'une ligne horizontale à un graphique". Comme je travaille dans la colonne qui m'intéresse, ça reviendrait peut être à trouver le moyen de convertir le Range actif par ligne et colonne en donnée du type "A4","A5" puis à les concaténer. ??? Je suis vraiment perdu
Marsh Posté le 08-08-2006 à 18:17:02
Me voici de retour
J'ai créé un fichier test simplifié :
http://cjoint.com/?iisukuXLQr
Avec des explications que j'espere suffisante à l'intérieur.
Mon point bloquant tourne toujours autour de la création d'un range d'arguments dans un format facile à rebalancer dans une fonction de feuille excel comme "Moyenne()" ou en tant que valeurs X ou Y d'une série de données graphiques.
J'ai sérieusement besoin d'aide alors merci à tous ceux qui pourront m'apporter ne serait ce que des bribes de réponse
Marsh Posté le 08-08-2006 à 20:24:58
Si j'ai bien compris...
Tu veux faire la moyenne et le graphique de plages disjointes.
Le plus simple est d'utiliser des filtres (sur la colonne B ):
La moyenne d'une zone filtré c'est la moyenne de la partie visible.
Pour un graphe en nuage de point tu obtiendras exactement le même résultat avec une plage filtrée que si tu travaillais avec des plages disjointes. Mais il est infiniment plus simple de manier une plage filtrée que de charger un string de plages disjointes.
Moi je gratterais la dessus : en cinq lignes tu as bouclé tous les cas de figure et tu n'as même pas besoin de 3ème feuille.
A+
Marsh Posté le 08-08-2006 à 20:28:18
merci. je n'ai jamais utilisé de filtres. je vais chercher mais c'est facile à implanter en macro?
Marsh Posté le 08-08-2006 à 20:34:30
je lis des aides sur les filtres avancées. il faut transformer le fichier en base de données pour pouvoir les utiliser :???:
Marsh Posté le 08-08-2006 à 20:47:53
Sinon pour en revenir vraiment à un truc basique sur lequel je bloque...
comment puis-je modifier ce petit bout de code pour obtenir la bonne valeur de moyenne :
Code :
|
?
Marsh Posté le 08-08-2006 à 20:48:48
Ben... il y est déjà plus ou moins sous forme de base de données (au moins dans ton modèle :
Pas besoin de filtre avancé le filtre automatique suffira : Utilise l'enregistreur de macro pour poser un filtre, dessiner le graphe, et enlever le filtre. C'est on ne peut plus simple...
ensuite yaka changer de critère.
Le plus compliqué (si tu n'as pas l'habitude) c'est de transformer la formule average pour excel en formule average pour vba
A+
Marsh Posté le 08-08-2006 à 20:54:52
Sub Macro1()
Dim i As Double
i = WorksheetFunction.Average(Range("A2:B14" ))
MsgBox i
End Sub
Marsh Posté le 08-08-2006 à 21:07:14
Bon ça c'était pour la lecture directe... c'est plus simple que de poser la formule
je ne suis pas certain que tu puisses faire comme tu veux en tout cas pas avec un objet Range.
Peut-être avec un string...
Sub test()
Dim r1 As String
r1 = Range("A2:B14" ).Address
Range("C13" ).Select
Selection.Formula = "=AVERAGE(" & r1 & " )"
End sub
Marsh Posté le 08-08-2006 à 21:20:24
ça correspond à quoi le .Address?
le code ci-dessous fonctionne bien :
Dim r1 As Range, r2 As Range, myMultiAreaRange As Range
Worksheets("Historique Essais" ).Activate
Set r1 = Range("C2:C11" )
Range("C13" ).Select
Selection.FormulaR1C1 = WorksheetFunction.Average(r1)
End Sub
Marsh Posté le 08-08-2006 à 21:30:57
Si tu veux... mais ça ne te pose pas une "FormulaR1C1" :
Si tu regardes sur ta feuille tu n'as pas de formule, ça te met directement le résultat comme si tu avais écrit :
Range("C13" ) = WorksheetFunction.Average(r1)
En gros la question est de savoir ce que tu veux exactement : une formule ou le résultat ?
Marsh Posté le 08-08-2006 à 21:43:04
ok pour la nuance! dans l'absolu le résultat me suffit mais ce serait plus propre avec la formule.
Marsh Posté le 08-08-2006 à 21:45:49
j'ai une question bonus... pour l'édition d'un graphe, lors de l'ajout d'une série de données avec newseries, y-a-t-il un moyen simple de récupérer l'indice correspondant à utiliser avec SeriesCollection() ?
Marsh Posté le 08-08-2006 à 21:58:13
j'ai trouvé un substitut à ce pb en utilisant un set mais ça fait un peu cache misère
Marsh Posté le 08-08-2006 à 22:31:22
Si tu veux renvoyer la formule, tu utilises ma suggestion de 21:07:14
Pour la question bonus j'ai pas compris.
A+
Marsh Posté le 08-08-2006 à 22:39:34
En fait j'ai enregistré en tant que macro une manip de création de graphe.
Et lorsque j'ajoute une série de données à un graphe existant voici ce quue ça donne :
Code :
|
le pb étant que si je veux réutiliser ça en vue d'une automatisation, je ne connaitrai pas a priori l'indice de la nouvelle série (ici 2). je suppose donc qu'il existe une fonction qui permet de le retrouver :???:
je me rends compte que je n'ai pas testé un simple Count sur Seriescollection ceci dit!
Marsh Posté le 08-08-2006 à 22:48:52
ça marche
ça ira pour ce soir merci encore pour tes conseils et ta disponibilité!
bonne nuit! à un prochain up...
Marsh Posté le 06-08-2006 à 20:44:14
Bonjour,
tout d'abord excusez moi de poser cette question sans doute basique et déjà traitée à propos de la sélection d'une plage de cellules avec saut via une macro mais je ne suis pas parvenu à trouver ce que je cherchais avec la fonction Recherche du forum (sans doute parceque je débute et ne connais pas encore tous les mots codes d'Excel/VBA).
Mon problème est le suivant :
J'ai déjà une macro qui effectue différents tests en remontant les données d'une colonne de hauteur variable. Et je souhaiterais intégrer dans cette boucle les lignes de codes qui me permettraient d'obtenir une plage de cellules répondant à un certain critère sous la forme "A7:A5;A3...". Le but final étant d'utiliser cette plage soit en argument d'une fonction comme 'MOYENNE()' ou comme série de valeurs pour un graphique (et pourquoi pas de la définir comme un nom via le menu insertion).
Quel est le meilleur moyen d'obtenir ce résultat? Je n'arrive pas à faire autre chose que du relatif (ligne+x, colonne+y) avec les Range
Merci pour votre aide.