Concatenantion de "range" [Résolu]

Signaler
Messages postés
24
Date d'inscription
mercredi 9 janvier 2008
Statut
Membre
Dernière intervention
28 mars 2008
-
Messages postés
24
Date d'inscription
mercredi 9 janvier 2008
Statut
Membre
Dernière intervention
28 mars 2008
-
We all trust in tartiflette
A voir également:

24 réponses

Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
9
Salut,

je ne connais pas grand chose au VB6 mais il me semble que la fonction range est specifique a excel. Donc si je ne me trompe pas ben unglued tu n'es pas dans le bon theme.

bouf , un objet range comme son nom l'indique est un objet donc il faut
utiliser Set pour assigner un objet a une variable. Ta methode
fonctione si tu concatenes les valeurs contenues dans ces objets

Ce que je comprend de la question de unglued c'est qu'il souhait faire une union d'objet range donc pour cela:

Dim x_values As Range
Set x_values = Union(Range("A1") ,Range("B1"))

Vala

A+
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
68
Set x_values = Range("A1" , "B1")

ou encore

Set x_values = Range(Range("A1") ,Range("B1"))
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
68
largement assez, n'aies crainte. (des millions de caractères...)
Messages postés
24
Date d'inscription
mercredi 9 janvier 2008
Statut
Membre
Dernière intervention
28 mars 2008

Ops desole jai envoyer du vide :D





Bonjour,

Je souhaite concatener 2 range dans une seule
pour commencer je voudrais faire un truc simple du genre:

Dim x_values As Range
Set x_values = Range("A1") + Range("B1")

mais le hic c'est ke je nai pas le concateneur adekouat (dsl jai pas la bonne orthographe pour ce mot).

si quelqu'un a une idee sur la facon de gerer mon petit probleme je suis preneur!!!

Merci,

Si jamais ya un moyen, il y a des chance que je vous redemande de m'aider par la suite, mon probleme s'annonce corser :D
Messages postés
55
Date d'inscription
lundi 3 mars 2008
Statut
Membre
Dernière intervention
17 avril 2008

Range("A:B")
Messages postés
114
Date d'inscription
lundi 6 septembre 2004
Statut
Membre
Dernière intervention
20 mars 2008

Salut,
j'ai plus de mal à lire ton français qu'à comprendre ton VB. Prend ton temps pour ecrire, on est pas à la seconde !

resultat= Range("A1") & Range("B1")
a+

Cliff le bouffeur
Messages postés
24
Date d'inscription
mercredi 9 janvier 2008
Statut
Membre
Dernière intervention
28 mars 2008

pour repondre a Bouf :
    Set x_values = Range("A1") & Range("B1")
ne marche pas sur mon VB, je ne sais pas si jai une version differrente mais le programme ne se compile pas...
(et au passage je ne voit pas en quoi mon francais est incomprehensible :( )

La methode de Bigfish marche bien, ainsi que celle de Rienfield!

Donc merci a vous 2 je vais continuer mon pti programme, et a la prochaine galere je reviendrais vous demander un coup de main...
Messages postés
24
Date d'inscription
mercredi 9 janvier 2008
Statut
Membre
Dernière intervention
28 mars 2008

Bon aussitot apres avoir accepter les reponses, me revoila :)

bon je vous donne tout de suite mon probleme et je vous mettrais plus bas tout mon programme, pour savoir si il n'y aurais pas une moyen plus simple de resoudre ce que je veux faire.

alors mon probleme est qu'il y a une difference entre cette ligne
Set x_values = Range("A1,D10")      
et celle ci
Set x_values = Range("A1","D10")      
l'une selectione juste A1 et D10, l'autre selectionne la table en A1 et D10 

bon voila ce que je veux faire
je veux recuperer dans une variable de type range des donnees qui sont en collone, malheuresement les donnee qui m'interresse se trouve toute les 4 lignes
donc jai taper ca :

Dim x_values As Range
Dim y_values As Range
Dim axe_X As String
Dim axe_Y As String
Dim ligne As String

'j'initialise mes 2 valiables (par la suite je ne me concentre que sur x_values)
Set x_values = Range("B11")
Set y_values = Range("R11")

Range("B11").Select



Do While Selection.Value <> 0



    ligne = Selection.Row
    MsgBox "dans la boucle -- ligne : " & ligne



'j'ecrit dans une variable string, la colonne et la ligne actuelle dans laquelle se trouve la donnee qui m'interresse

    axe_X = "B" & ligne
    axe_Y = "R" & ligne
   
'Je fait comme vous m'avez dit pour la concatenation de range, et la est le probleme: si jecrit comme vous me lavez indiquer, ca me selectionne la table entre ces 2 cellules...
    Set x_values = Range(x_values, Range(axe_X))          

    
x_values.Select
    MsgBox " show x values "
    
    Selection.End(xlDown).Select



Loop


Voila mon probleme je sais pas si ca peux vous interresser mais je fais ca pour apres actualiser un graph avec les valeurs contenu dans ce Range

Si vous avez des idee, elle sont toujours les bienvenues
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
68
rien compris...
Messages postés
24
Date d'inscription
mercredi 9 janvier 2008
Statut
Membre
Dernière intervention
28 mars 2008

est il possible d'ajouter mon fichier excel a un message, ca sera plus simple a expliquer comme ca ???

par ce que je ne me sent pas expliquer la facon dont est construit mon tableau...
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
68
non, pas possible
Messages postés
24
Date d'inscription
mercredi 9 janvier 2008
Statut
Membre
Dernière intervention
28 mars 2008

<colgroup>
<col style=\"WIDTH: 72pt; mso-width-source: userset; mso-width-alt: 3510\" width=\"96\" />
<col style=\"WIDTH: 43pt; mso-width-source: userset; mso-width-alt: 2084\" width=\"57\" />
<col style=\"WIDTH: 66pt; mso-width-source: userset; mso-width-alt: 3218\" width=\"88\" />
<col style=\"WIDTH: 68pt; mso-width-source: userset; mso-width-alt: 3291\" width=\"90\" />
<col style=\"WIDTH: 47pt; mso-width-source: userset; mso-width-alt: 2304\" width=\"63\" />
<col style=\"WIDTH: 62pt; mso-width-source: userset; mso-width-alt: 2998\" width=\"82\" />
<col style=\"WIDTH: 68pt; mso-width-source: userset; mso-width-alt: 3291\" width=\"90\" />
<col style=\"WIDTH: 65pt; mso-width-source: userset; mso-width-alt: 3145\" width=\"86\" />
</colgroup>

----

Name,
Date,
Voc - Average,
Max - Average,
Average - Min,
Isc - Average,
Max - Average,
Average - Min,

----

C1,
06.03.08,
1.308,
0.033,
0.041,
8.478,
0.294,
0.188,

----

C1_annealed,
 ,
1.322,
0.005,
0.019,
9.306,
0.287,
0.305,

----

C2,
 ,
1.321,
0.015,
0.083,
8.956,
0.144,
0.136,

----

C2_annealed,
 ,
1.318,
0.003,
0.008,
9.707,
0.309,
0.342,

----

C1,
12.03.08,
1.254,
0.033,
0.051,
10.645,
0.128,
0.144,

----

C1_annealed,
 ,
1.271,
0.005,
0.003,
10.683,
0.086,
0.086,

----

C2,
 ,
1.016,
0.263,
0.840,
10.705,
0.117,
0.135,

----

C2_annealed,
 ,
1.274,
0.003,
0.005,
10.784,
0.073,
0.138


c'est bon jai trouver, alors je re explique (en esperant que ca soit comprehensible):

Je me positionne en B11 avec :
Range("B11").Select
ce qui correspond a la cellule contenant la date 03.03.08

Je boucle jusqu'a l'obtention d'une cellule vide:
Do While Selection.Value <> 0 

Dans 'ligne' je met la ligne en cours soit 11 pour la 1ere boucle
ligne = Selection.Row

J'ecrit dans 'axe_X' qui est un string la position de la cellule dans laquelle je me trouve en ce moment
axe_X = "B" & ligne 'ca donne B11 pour le 1er tour de boucle

Je concatene lancienne valeur de 'x_values' avec la cellule dans laquelle je me trouve (dans la 1ere boucle cette ligne n'a aucun effet puisqu'elle concatenne 2 fois B11 )
Set x_values = Range(x_values, Range(axe_X))    

Je cherche la prochaine cellule non vide de la collone B (ce qui ve renvoie a la date 12.03.08)
Selection.End(xlDown).Select

Fin de boucle
Loop

bon je reviens a mon probleme:
Set x_values = Range(x_values, Range(axe_X))
lorsque je suis a mon 2ieme tour de boucle,
j'obtiens dans ma variable 'ligne' = 15
dans mon 'axe_X' = B15
et dans 'x_values' j'obtient ---> Range("B11","B15")
alors que je voudrais avoir ---> Range ("B11,B15")

Bon jespere que c'est comprehensible et que je ne me suis pas emmeller les pinceaux :)
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
68
tu veux l'intervalle "B11:B15" ?
Messages postés
24
Date d'inscription
mercredi 9 janvier 2008
Statut
Membre
Dernière intervention
28 mars 2008

non je veux la cellule B11 et la cellule B15
ce qui devrais normalement s'ecrire Range("B11,B15")
mais j'y arrive po :(
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
68
...
je tapes :
range("A1,E5").Value = 31
dans ma fenetre d'execution VBA, ca impactes A1 et E5

je tapes:
range("A1:E5").Value = 12
ca impacte A1, A2, A3, A4, A5, B1, B2, B3, ..., E5
Messages postés
24
Date d'inscription
mercredi 9 janvier 2008
Statut
Membre
Dernière intervention
28 mars 2008

oui et bien justement je veux ta 1ere possibilite,
juste avoir A1 et E5 (par exemple)

Dans mon cas je veux un range avec les cellule B11 + B15 + B19 + B23 etc...
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
9
si tu beaucoup cellules  une boucle for next serait peut etre le plus simple

dim MaLigne as Long
For MaLigne = 11 to 100 Step 4
    range("B" & MaLigne).Value = 12
Next
Messages postés
24
Date d'inscription
mercredi 9 janvier 2008
Statut
Membre
Dernière intervention
28 mars 2008

Nan, par ce que mon tableau va etre amener a grandir du coup je test avec un end(xldown) la derniere ligne (comme jai ecrit dans le message ou jai essayer d'expliquer ce que je voulais faire :) )

mais bon la n'est pas la question
ma boucle fonctionne tres bien comme elle est, et je ne souhaite pas ecrire dans les cellule, je souhaite simplement recuperer leur nom.
ca serais un truc qui ressemble a ca : range("B11,B15,B19") et qui lorsque je rajouterais des donnees deviendrais range("B11,B15,B19,B23")

comme je lai precedement dit, c'est pour pouvoir construire un graph par la suite
et j'aurais simplement a donne ce range pour que le tableau sache ou trouver les donnees...

pour tout vous dire yaurais un moyen plus simple, ca serais de concatener le nom dans la variable de type string 'axe_X' mais jai peur que j'ateigne un jour la limite de memoire de la variable string...
 

Bon merci de l'aide de cette journee et a demain avec beaucoup de motivation!!!
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
9
come on !

il y a des moyens de gerer un tableau variable sur excel ou autre d'ailleur.

Dim MaLigne As Long, DernierLigne As Long
On Local Error Resume Next 'si pas de valeur trouvée a la ligne suivante il y aura une erreur donc on anticipe
DernierLigne = Range("B:B").Find("*", [B1], , , xlByRows, xlPrevious).Row 'renvois le numeros de la ligne qui contient la          'derniere valeur sur la colonne specifiée. Fonctionne meme si il y a des cellules vide dans l'intervale
For MaLigne = 11 To DernierLigne Step 4
    range("B" & MaLigne).Value = 12
Next
Messages postés
24
Date d'inscription
mercredi 9 janvier 2008
Statut
Membre
Dernière intervention
28 mars 2008

Bon ok je vais changer mon plan de depart et je vais me la faire comme ca :)
Merci