Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1593 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [Excel/VBA]Obtention Plage cellules type "A7:A5;A3"

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Excel/VBA]Obtention Plage cellules type "A7:A5;A3"

n°1421043
doriAngrAy
Roscoe Action
Posté le 06-08-2006 à 20:44:14  profilanswer
 

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.

mood
Publicité
Posté le 06-08-2006 à 20:44:14  profilanswer
 

n°1421135
galopin01
Posté le 06-08-2006 à 21:57:15  profilanswer
 

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+

n°1421146
doriAngrAy
Roscoe Action
Posté le 06-08-2006 à 22:12:50  profilanswer
 

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 :/


Message édité par doriAngrAy le 06-08-2006 à 22:14:57
n°1421147
doriAngrAy
Roscoe Action
Posté le 06-08-2006 à 22:13:38  profilanswer
 

Merci de proposer ton assistance en tout cas. :jap:

n°1422431
doriAngrAy
Roscoe Action
Posté le 08-08-2006 à 18:17:02  profilanswer
 

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 :)


Message édité par doriAngrAy le 08-08-2006 à 18:20:25
n°1422452
doriAngrAy
Roscoe Action
Posté le 08-08-2006 à 19:19:08  profilanswer
 

help! je desespere vraiment :/

n°1422488
doriAngrAy
Roscoe Action
Posté le 08-08-2006 à 20:21:58  profilanswer
 

aucune idée? :/

n°1422491
galopin01
Posté le 08-08-2006 à 20:24:58  profilanswer
 

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+


Message édité par galopin01 le 08-08-2006 à 20:27:09
n°1422493
doriAngrAy
Roscoe Action
Posté le 08-08-2006 à 20:28:18  profilanswer
 

merci. je n'ai jamais utilisé de filtres. je vais chercher mais c'est facile à implanter en macro?

n°1422497
doriAngrAy
Roscoe Action
Posté le 08-08-2006 à 20:34:30  profilanswer
 

je lis des aides sur les filtres avancées. il faut transformer le fichier en base de données pour pouvoir les utiliser :???:

mood
Publicité
Posté le 08-08-2006 à 20:34:30  profilanswer
 

n°1422504
doriAngrAy
Roscoe Action
Posté le 08-08-2006 à 20:47:53  profilanswer
 

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 :
  1. Dim r1 As Range
  2. Set r1 = Range("C2:C11" )
  3. Range("C13" ).Select
  4. Selection.FormulaR1C1 = "=AVERAGE( r1 )"


?

n°1422505
galopin01
Posté le 08-08-2006 à 20:48:48  profilanswer
 

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+

n°1422506
galopin01
Posté le 08-08-2006 à 20:49:42  profilanswer
 

Ah ! Ah ! Je l'aurais parié...
Waiting...

n°1422507
doriAngrAy
Roscoe Action
Posté le 08-08-2006 à 20:52:22  profilanswer
 

héhé j'avais précisé "débutant" :d

n°1422508
galopin01
Posté le 08-08-2006 à 20:54:52  profilanswer
 

Sub Macro1()
Dim i As Double
i = WorksheetFunction.Average(Range("A2:B14" ))
MsgBox i
End Sub

n°1422510
doriAngrAy
Roscoe Action
Posté le 08-08-2006 à 20:58:50  profilanswer
 

aaaaaaaaaaaaaaaaah! :)
MERCI!!! :jap:

n°1422512
galopin01
Posté le 08-08-2006 à 21:07:14  profilanswer
 

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

n°1422523
doriAngrAy
Roscoe Action
Posté le 08-08-2006 à 21:20:24  profilanswer
 

ç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
[:spamafote]

n°1422526
galopin01
Posté le 08-08-2006 à 21:30:57  profilanswer
 

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 ?


Message édité par galopin01 le 08-08-2006 à 21:32:19
n°1422534
doriAngrAy
Roscoe Action
Posté le 08-08-2006 à 21:43:04  profilanswer
 

ok pour la nuance! dans l'absolu le résultat me suffit :) mais ce serait plus propre avec la formule.

n°1422538
doriAngrAy
Roscoe Action
Posté le 08-08-2006 à 21:45:49  profilanswer
 

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() ?

n°1422548
doriAngrAy
Roscoe Action
Posté le 08-08-2006 à 21:58:13  profilanswer
 

j'ai trouvé un substitut à ce pb en utilisant un set mais ça fait un peu cache misère :d

n°1422574
galopin01
Posté le 08-08-2006 à 22:31:22  profilanswer
 

Si tu veux renvoyer la formule, tu utilises ma suggestion de 21:07:14
 
Pour la question bonus j'ai pas compris.
A+

n°1422577
doriAngrAy
Roscoe Action
Posté le 08-08-2006 à 22:39:34  profilanswer
 

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 :
  1. ActiveChart.SeriesCollection.NewSeries
  2.     ActiveChart.SeriesCollection(2).XValues = "='feuil1'!R6C3"
  3.     ActiveChart.SeriesCollection(2).Values = "='feuil1'!R6C4"


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!

n°1422581
galopin01
Posté le 08-08-2006 à 22:41:43  profilanswer
 

Oui tu pourrais commencer par là.

n°1422584
doriAngrAy
Roscoe Action
Posté le 08-08-2006 à 22:48:52  profilanswer
 

ça marche ;)
ça ira pour ce soir :) merci encore pour tes conseils et ta disponibilité!
bonne nuit! :jap: à un prochain up... :/

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [Excel/VBA]Obtention Plage cellules type "A7:A5;A3"

 

Sujets relatifs
[Résolu]Garder uniquement les doublons sur ExcelRedirection type shell avec script perl cgi
VBA : modifier la valeur d'une cellule en appellant une functionType de bd MySQL
comparaison de cellules[Résolu] [VB.Net] Accès variable de type Generic.List(Of ...) dans
macro de remplacement excelpartage de classeur excel
En VBA comment changer la valeur input de type hidden d'un formulaire 
Plus de sujets relatifs à : [Excel/VBA]Obtention Plage cellules type "A7:A5;A3"


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR