pin7pin
Messages postés3Date d'inscriptionmardi 24 février 2009StatutMembreDernière intervention16 mars 2009
-
24 févr. 2009 à 17:00
pin7pin
Messages postés3Date d'inscriptionmardi 24 février 2009StatutMembreDernière intervention16 mars 2009
-
24 févr. 2009 à 20:17
Bonjour,
Un instrument me renvoie des données sous forme de tableau csv (le nombre de lignes est variable, selon les cas). Chaque colonne correspond à un paramètre et chaque ligne à un enregistrement. Le premier paramètre peut prendre la même valeur pour plusieurs lignes consécutives. Pour améliorer la visibilité, je souhaiterais insérer une ligne vierge après chaque groupe de lignes dont la première colone comporte la même valeur. De plus je souhaiterais fusionner les cellules de la première (A) et la dernière colonne (J) (et uniquement celles-ci), pour chaque groupe de lignes avec une valeur indentique dans la colonne A (entre les lignes insérées à l'étape précedente, en fait). Et tout cela, en évitant les messages de cofirmtion de la recopie de la première cellules dans la fusion. Finalement (), je souhaiterais centrer verticalement les cases fusionnées.
J'ai essayé deux/trois trucs qui ne fonctionnent pas, mais je pense qu'à l'intérieur de votre communautré je serais de niveau 2/3 degrés Kelvin, alors c'est plutôt logique.
Quelqu'un aurait-il une solution ?
Je fais cette modif à la min sur un tableaus de 1500 à 2500 lignes une fois par semaine, alors cel va sans dire que je serais vraiment très reconnaissant de la moindre aide que vous pourriez- m'apporter.
Note importante : je suis sous mac (OS10.4) avec la version 2008 d'excel, ou OpenOffice 3 avec une très forte préférence pour OpenOffice.
A plus
Christophe
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201578 24 févr. 2009 à 18:28
Salut
Le VB de Excel est du VBA, pas du .Net --> Catégorie modifiée
Est-ce que tu sais le faire à la main ?
Oui : Enregistre une macro pendant que tu le fais et tu auras le code
Non : Essaye un truc du genre (à corriger, fait de tête) :
Dim maZone As Object
Dim maCellule As Object
Dim maMemo As String
Dim bInsertionRecente As Booleen
Set maZone = Range("A:A")
For Each maCellule In maZone
If maCellule.Value = "" Then
If Not bInsertionRecente Then
Exit For ' Cellule vide non volontaire = Fin
Else
bInsertionRecente = False
End If
Else
If maMemo = "" Then
maMemo = maCellule.Value
Else
If maCellule.Value <> maMemo Then
' Nouvelle data
Ici, le code pour insérer une ligne à l'emplacement maCellule.Row
bInsertionRecente = True ' pour prochain cycle
maMemo = "" ' Réinit
End If
End If
End If
Next
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
pin7pin
Messages postés3Date d'inscriptionmardi 24 février 2009StatutMembreDernière intervention16 mars 2009 24 févr. 2009 à 18:52
Merci beaucoup, déjà pour la correction de la catégorie. (l'enregistrement est donc impossible). Pour mon tableau le souci est que ces valeurs identiques à regrouper sont différentes à chaque fois et il faut donc prendre la décision à chaque ligne : si (A,n+1) ? (An) alors insérer une ligne entre (A,n) et (A,n+1). Puis pour toutes les cellules A et J qui sont séparées par 2 lignes vides de fusioner ces cellules. Si je subodore bien ton code, il fait le boulot pour certaines valeurs déterminées en colonne A.
Merci bcp en tous cas
A plus
Christophe
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201578 24 févr. 2009 à 19:24
Non, analyse bien le code, tu verras qu'il mémorise le contenu de la première cellule et qu'il détecte si le contenu change au fur et à mesure qu'il descend.
Par contre, s'il rencontre une ligne vide (autre que celle qu'on aurait pu insérer), il arrête la recherche.
A toi de l'améliorer