[Résolu][Calc] Concatener une suite de cellule

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
Danse
Membre lOOyal
Membre lOOyal
Messages : 30
Inscription : 20 juil. 2008 10:32

[Résolu][Calc] Concatener une suite de cellule

Message par Danse »

Je voudrais concaténer les cellules A1 à Ax de ma feuille, où x est la valeur dans la cellule B1.
Vue que la formule n'existe pas directement sous Open Office,
J'ai pensé à crée une formule qui réalise cette concaténation :

Code : Tout sélectionner

Function ConcatSpe(Debut As object, nbCell As Double )As String
Dim rowCell as double
ConcatSpe=Debut.Value
While nbCell=0
nbCell=nbCell-1
rowcell=getCellAddress(adresse).Row+1
ConcatSpe=ConcatSpe+getCellByPosition(getCellAddress(adresse).Column,rowCell).Value
Wend
End Function
Sachant que je ne suis pas très douée pour lire les 40 manuels sur les macros, je n'ai pas réussis à corrigé cette macro.
Erreurs possibles :
Le "as object" pour Debut...
et ".value" qui me semble incorrecte pour prendre les caractères que contient une cellule.
Dernière modification par Danse le 26 juil. 2008 15:55, modifié 1 fois.
Open office 2.4 et Vista power =/
Pierre-Yves Samyn
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 11276
Inscription : 02 mai 2006 08:42

Re: [Calc] Concatener une suite de cellule

Message par Pierre-Yves Samyn »

Bonjour

Voici un exemple de solution :

Code : Tout sélectionner

option explicit

function ForumConcat(ExoPlage, ExoNb) as string
dim ExoLig as integer, ExoCol as integer, ExoTrav

'Une plage de plus d'une cellule passée en paramètre est un "tableau"

'On teste que le premier  parametre est une plage ou une cellule seule

if isarray(ExoPlage) then

' On boucle pour concatener les cellules 
' on arrete quand le nombre passe en deuxieme parametre est atteint
' on arrete aussi si ce nombre est trop grand (> au nb total de cellules)
	for ExoLig=lBound(ExoPlage) to iif(ExoNb > uBound(ExoPlage), uBound(ExoPlage), ExoNb)
		for ExoCol=lBound(ExoPlage, 2) to uBound(ExoPlage, 2)
			ExoTrav=ExoTrav & ExoPlage(ExoLig, 1)
		next ExoCol
	next ExoLig
	ForumConcat = ExoTrav
else
' Si cellule seule retourne la cellule

	ForumConcat = ExoPlage
end if

end function
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Danse
Membre lOOyal
Membre lOOyal
Messages : 30
Inscription : 20 juil. 2008 10:32

Re: [Calc] Concatener une suite de cellule

Message par Danse »

Bonjour,
J'ai beaucoup appris de cette macro, merci beaucoup.
J'ai adapté le code que tu m'a donnée pour le faire fonctionné en ligne. (avec le pdf"Andrew5")

Code : Tout sélectionner

function ForumConcatL(ExoPlage, ExoNb) as string
dim ExoLig as integer, ExoCol as integer, ExoTrav

'Une plage de plus d'une cellule passée en paramètre est un "tableau"

'On teste que le premier  parametre est une plage ou une cellule seule

if isarray(ExoPlage) then

' On boucle pour concatener les cellules 
' on arrete quand le nombre passe en deuxieme parametre est atteint
' on arrete aussi si ce nombre est trop grand (> au nb total de cellules)
	for ExoCol=lBound(ExoPlage,2) to iif(ExoNb > uBound(ExoPlage,2),uBound(ExoPlage,2), ExoNb)
		for ExoLig=lBound(ExoPlage,1) to uBound(ExoPlage,1)
			ExoTrav=ExoTrav & ExoPlage(1,ExoCol)
		next ExoLig
	next ExoCol
	ForumConcatL = ExoTrav
else
' Si cellule seule retourne la cellule

	ForumConcatL = ExoPlage
end if

end function
Malgré cela j'ai un doute sur la condition iff , car ExoNb correspond à un nombre de cellule et uBound(ExoPlage,2) au numéro de colonne.
Il ne serait pas plus correcte d'écrire:

Code : Tout sélectionner

iif(ExoNb > (uBound(ExoPlage,2)-lBound(ExoPlage,2)),uBound(ExoPlage,2), lBound(ExoPlage,2)+ExoNb)
Sinon pourquoi y-a-t-il un message d'erreur lorsqu'on revient dans la plage définie :
ForumConcatC(A1:A6;B1)
B1=2 (ça marche)
B1=7 (ça marche)
B1=2 message d'erreur.
Mise à part ça(question de curiosité), le problème est résolu.
Merci
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Open office 2.4 et Vista power =/
Pierre-Yves Samyn
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 11276
Inscription : 02 mai 2006 08:42

Re: [Calc] Concatener une suite de cellule

Message par Pierre-Yves Samyn »

Danse a écrit :ExoNb correspond à un nombre de cellule et uBound(ExoPlage,2) au numéro de colonne.
uBound(ExoPlage,2) ne donne pas un numéro de colonne mais la limite supérieure de la dimension indiquée d'une matrice (en l'occurrence la deuxième).

Concrètement xray sur A1:A6 donne 1 to 6, 1 to 1
Selon la dimension inspectée nous avons donc le nombre de lignes ou de colonnes, pas un numéro

Par ailleurs, la journée avance et je suis sans doute plus fatigué mais je ne comprends pas :
Danse a écrit :B1=2 (ça marche)
B1=7 (ça marche)
B1=2 message d'erreur.
Danse
Membre lOOyal
Membre lOOyal
Messages : 30
Inscription : 20 juil. 2008 10:32

Re: [Résolu][Calc] Concatener une suite de cellule

Message par Danse »

C'est un bug que j'avais sur ma version du fichier...
Après vérification, elle n'est ni sur ta version du fichier ni sur celle que j'ai mis en ligne :marto:
Donc ,on va oublier ça.

Merci pour l'explication :super:
Danse
Open office 2.4 et Vista power =/