Concatener des cellules comprisent entre 2 cellules vides.

Cartman44 Messages postés 1 Statut Membre -  
 cartman44 -
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 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 768
 
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
cartman44
 
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