Série de données

Bonjour à tous,

Débutant dans Excel voici mon problème:

Dans un fichier j'obtiens une ligne de données de type: C1 C2 C4 C5 C6 C7 C12 C45 C46 C47 C48

Cette ligne de données que j'ai raccourci, je la transpose dans un fichier Word en groupant les données qui se suivent de cette façon: C1, C2, C4-C7, C12, C45-C48.

Le tiret remplace "à". Sur une petite série c'est rapide manuellement mais lorsqu'il y a 500 données c'est très long.

Je cherche donc une formule ou macro qui permettrait de faire ce regroupement.

Merci de votre aide

Bonjour et bienvenue sur le forum

Tu devrais donner un exemple de ce que tu as au départ sur ton fichier Excel et ce que tu voudrais sur ton fichier Word.

Bye !

Sur mon tableau Excel j'obtiens une ligne de repères avec un repère par cellule:

C1 C2 C4 C5 C6 C7 C12 C45 C46 C47 C48

Ce que je veux obtenir dans excel:

C1 C2 C4-C7 C12 C45-C48

Actuellement je me tape toute la série de repères et quand il y a une série qui se suit comme C45 C46 C47 C48 je supprime C46 et C47 et le remplace par un tiret soit C45-C48.

Bonjour Frolik, gmb,

je te propose ce fichier Excel :

9exo-frolik.xlsm (15.03 Ko)

fais Ctrl e ; tu peux déjà ajouter d'autres lignes sans modifier la macro.

c'est juste une piste, à toi de placer le retour dans ton fichier Word.


Alt F11 pour voir le code VBA, puis revenir sur Excel

à te lire pour avoir ton avis.

dhany

bonjour

à quoi ça sert ?

Bonjour jmd,

tu a écrit :

à quoi ça sert ?

mon code VBA sert à faire la demande de Frolik ; eh oui, c'est encore un miracle de plus à mettre au compte de ton langage VBA favori ! surtout que là encore, un TCD, Power Query, ou Power BI sont assurément et absolument d'aucune utilité ! tu veux jamais m'croire quand j'te dis qu'ils savent pas tout faire !

dhany

salut dhany

on ne sait pas à quoi ça sert

note que répondre à une question étrange, telle que celle posée au départ, n'est pas toujours pertinent

dans mon job (en informatique ou dans d'autres domaines), dès qu'une demande sort de l'ordinaire, bien entendu je ne la refuses pas, mais je demande quel est l'objectif. Et 8 fois sur 10, en réalité, la question est posée à partir d'une solution déjà commencée par le demandeur et mal commencée.

et donc 8 fois sur 10 on repart sur une solution évidente et ultra-classique (et fiable).

conséquence directe : VBA sert souvent à résoudre un problème qui ne se pose pas

j'applique sur ce forum ce qui n'est que du bon sens.

"apprendre à un homme à pêcher vaut mieux que de lui donner un poisson"

amitiés

Bonsoir jmd,

Frolik a écrit :

Dans un fichier j'obtiens une ligne de données de type : C1 C2 C4 C5 C6 C7 C12 C45 C46 C47 C48

comment Frolik l'a obtenu ? peut-être l'a-t-il créé lui-même ? mais peut-être aussi que c'est un import, et que le demandeur n'a pas le choix car « il n'a pas la main » sur ce fichier ! en plus, c'est peut-être un fichier protégé par mot de passe, qu'il peut seulement lire et non modifier (le code VBA serait alors dans un autre classeur Excel, qui lirait celui-ci) ; tout c'côté du contexte, que je ne connaît pas, justifie peut-être amplement ce qui te semble être « une question étrange, qui n'est pas toujours pertinente » ; mais j'suis quand même d'accord avec toi qu'il peut arriver bien des cas où on peut faire plus simple ! (mais pas toujours non plus ! )


Frolik a écrit :

Cette ligne de données que j'ai raccourcie, je la transpose dans un fichier Word

en groupant les données qui se suivent de cette façon :

C1, C2, C4-C7, C12, C45-C48.

Le tiret remplace "à".

donc le but est très clair, et le besoin est indiqué très précisément : il faut abréger

C1 C2 C4 C5 C6 C7 C12 C45 C46 C47 C48 en :

C1, C2, C4-C7, C12, C45-C48

ce que Frolik a indiqué de nouveau dans son post d'hier à 08:41 :

Sur mon tableau Excel j'obtiens une ligne de repères avec un repère par cellule:

C1 C2 C4 C5 C6 C7 C12 C45 C46 C47 C48

Ce que je veux obtenir dans excel:

C1 C2 C4-C7 C12 C45-C48

je me suis d'ailleurs référencé à ce post pour sortir un résultat sans séparateur virgule.

(mais si Frolik me le demande, je pourrai très facilement l'ajouter)

dhany

Bonjour Frolik, le forum,

toujours pas d'retour !

je mets ici mon code VBA :

Option Explicit

Dim lig&

Function GetNb(col%) As Integer
  Dim chn$: chn = Cells(lig, col)
  If chn <> "" Then GetNb = Val(Right$(chn, Len(chn) - 1))
End Function

Sub Essai()
  Dim dlig&, c1%, c2%, v1%, v2%, n%, chn$
  dlig = Cells(Rows.Count, 1).End(3).Row
  Application.ScreenUpdating = 0
  For lig = 1 To dlig
    c1 = 1
    Do
      v1 = GetNb(c1): If v1 = 0 Then Exit Do
      c2 = c1: n = 1
      Do
        v2 = GetNb(c2 + n): If v2 = 0 Then Exit Do
        If v2 = v1 + n Then n = n + 1 Else Exit Do
      Loop
      chn = chn & "C" & v1
      If n > 1 Then chn = chn _
        & Chr$(45 + 13 * (n = 2)) _
        & "C" & GetNb(c2 + n - 1)
      chn = chn & " ": c1 = c1 + n
    Loop
    MsgBox chn
  Next lig
End Sub

dhany

Rechercher des sujets similaires à "serie donnees"