Concatener des cellules comprisent entre 2 cellules vides.

Fermé
Cartman44 Messages postés 1 Date d'inscription vendredi 20 décembre 2013 Statut Membre Dernière intervention 20 décembre 2013 - 20 déc. 2013 à 08:49
 cartman44 - 24 déc. 2013 à 08:05
Bonjour ami developpeur,

Voila mon problème, dans la colonne A j'ai des datas que je veut concatener par groupe.
Chaque groupe de concatenation est séparé par une cellule vide. Sachant qu'un groupe peut contenir de 2 lignes à 10 lignes.

Sur le papier, cela à l'air simple mais le bloque, Exemple de contenu dans la colonne A:

R1: MEAS R AT(17:44:0:GND=0)
DLY=1M RDLY=10U MAX=1.004K
VAL=1K TOL=7 CMSG='R1 (Clous:17,44)'
DMSG='1K' PMSG='REF:RES_1k_5 F8/T';

R48:SET SCAN AT(20:11:49:72);
SET DCV DCS V=200M I=128M DLY=1M;
MEAS DCV DCM INTO VVAL1 MAX=100M RDLY=1M;
MEAS DCI DCM INTO IVAL1 RDLY=1M MAX=3.941M;
LET RVAL=(VVAL1-VVAL2)/IVAL1;
TEST ARITH RVAL VAL=50 TOL=7 DMSG='100//100'
CMSG='R48//R49 - INCLUDES SHUNT IMPEDANCE'
PMSG='REF:RES_100_5 F7/T';

R3: MEAS R AT(81:7:17:GND=17)
DLY=1M RDLY=10U MAX=1.006K
VAL=1K TOL=7 CMSG='R3 (Clous:81,7)'
DMSG='1K' PMSG='REF:RES_1k_5 E8/T';

Je voudrais obtenir dans la cellule B1:
R1: MEAS R AT(17:44:0:GND=0) DLY=1M RDLY=10U MAX=1.004K VAL=1K TOL=7 CMSG='R1 (Clous:17,44)' DMSG='1K' PMSG='REF:RES_1k_5 F8/T';
Puis dans la B2:
R48:SET SCAN AT(20:11:49:72); SET DCV DCS V=200M I=128M DLY=1M; MEAS DCV DCM INTO VVAL1 MAX=100M RDLY=1M; MEAS DCI DCM INTO IVAL1 RDLY=1M MAX=3.941M; LET RVAL=(VVAL1-VVAL2)/IVAL1; TEST ARITH RVAL VAL=50 TOL=7 DMSG='100//100' CMSG='R48//R49 - INCLUDES SHUNT IMPEDANCE' PMSG='REF:RES_100_5 F7/T';

ect......

Merci d'avance.
A voir également:

2 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 15 mars 2023 2 712
20 déc. 2013 à 09:43
Bonjour,

Essaye avec cette fonction personnalisée :

Code :
Function CONCATENE_SPECIAL(Debut As Range, Rang As Long)
Dim Fin As Range, Cel As Range, i As Long

Set Cel = ActiveCell
For i = 1 To (Rang - 1) * 2
    Set Debut = Debut.End(xlDown)
Next
If Cel.Column = Debut.Column Then CONCATENE_SPECIAL = "ERREUR": Exit Function
Set Fin = Debut.End(xlDown)
If Fin.Row = Rows.Count Then CONCATENE_SPECIAL = "FIN DE LA COLONNE": Exit Function
For i = Debut.Row To Fin.Row
    CONCATENE_SPECIAL = CONCATENE_SPECIAL & " " & Cells(i, Debut.Column)
Next i
End Function


Mise en place :
1- Ouvrir le classeur concerné,
2- Tapez ALT+F11 => Visual Basic Editor s'ouvre,
3- Insertion/Module
4- Copiez-collez le code dans le module ainsi créé,
5- fermez Visual Basic Editor

Dans la feuille :
Supposons les données, dans la colonne A, à partir de A4.
Les groupes à concaténer sont séparés par une ligne vide!
En B2 écrire la formule :
=CONCATENE_SPECIAL($A$4;1)
$A$4 = première cellule remplie de la colonne,
1 = Concaténation du 1er groupe
En B3 écrire la formule :
=CONCATENE_SPECIAL($A$4;2)
$A$4 = première cellule remplie de la colonne,
2 = concaténation du 2nd groupe
En B4 écrire la formule :
=CONCATENE_SPECIAL($A$8;3)
$A$4 = première cellule remplie de la colonne,
3 = concaténation du 3ème groupe
etc...

Supplément :
Il est fastidieux de devoir ressaisir la formule à chaque ligne. En effet, le 1, 2 etc ne s'implémente pas avec la poignée de recopie. Pour réaliser cela, il conviendra d'utiliser la formule :
=CONCATENE_SPECIAL($A$8;LIGNE(A1))
Ensuite, vous pouvez "étirer" cette formule vers le bas!
0
Merci pijaku,

Cela fonctionne très bien.
Seul Bémol, lorsque je change le contenu de la colonne A, la concatenation ne se fait pas toute seul.
Il faut que je valide la formule, en faisant 'F2' puis 'Entrée'.

Y a t-il un moyen pour que la formule s'applique tout le temps ?

Merci d'avance. Et Joyeux noël ....

PS: Pour le côté fastidieux, avec un éditeur de txt (UltraEdit par exemple) c'est plus facile.
0