suite de nombre dans une colonne

perrmi

XLDnaute Occasionnel
bonjour ,

j'ai 5 colonnes de chiffres différents.(jamais les memes ).

Dans chaque colonne j'aimerais extraire les suites de nombres (Chiffres)
exemple:
-colonne A :
J'ai les nombres 1...4.5....9.10.11......
-Colonne B:
12...15
-Colonne C:
2...4....6.7.8....13.14
-Colonne D:
16
-Colonne E:
3

j'aimerais donc faire un tableau ou apparaisse les suite de nombres.
pour chaque colonne j'aurai donc :
A= 9-10-11
B=
C=6-7-8
D=
E=

Merci
Michel

je vais essayer d'etre plus precis
ci dessous un tableau


j'aimerais donc creer un tableau pour chaque colonne A-B-C-D-E
Visualiser les suites de nombres
comme ceci
upload_2017-4-9_19-21-52.png

a partir de ce tableau creer un tableau pour visualiser les suites de nombres
comme le tableau ci dessous.
upload_2017-4-9_19-24-21.png
 

Pièces jointes

  • upload_2017-4-9_19-14-17.png
    upload_2017-4-9_19-14-17.png
    8 KB · Affichages: 25
Dernière édition:

job75

XLDnaute Barbatruc
Re,

Si le tableau source ne dépasse pas 10 ou 20000 lignes on peut utiliser cette macro évènementielle :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim nlig&, tablo, dest As Range, col%, a(), n&, lig&, nmax&
With [A3:E22] ' tableau source, à adapter
  nlig = .Rows.Count
  tablo = .Resize(nlig + 1) '1 ligne de plus
End With
Set dest = [G3] 'à adapter
Application.EnableEvents = False
For col = 1 To UBound(tablo, 2)
  ReDim a(1 To nlig, 1 To 1)
  n = 0
  For lig = 1 To nlig
    If tablo(lig, col) <> "" And tablo(lig + 1, col) = tablo(lig, col) + 1 Then
      n = n + 1
      a(n, 1) = tablo(lig, col)
    ElseIf n Then
      If a(n, 1) <> "" Then
        n = n + 1
        If tablo(lig, col) = a(n - 1, 1) + 1 Then a(n, 1) = tablo(lig, col): If n > nmax Then nmax = n
      End If
    End If
  Next lig
  dest(1, col).Resize(nlig) = a
Next col
dest.Resize(nlig, col - 1).Borders.LineStyle = xlNone 'RAZ des bordures
If nmax Then dest.Resize(nmax, col - 1).Borders.Weight = xlThin
Application.EnableEvents = True
End Sub
Fichier (3).

A+
 

Pièces jointes

  • Séries(3).xlsm
    25 KB · Affichages: 27

perrmi

XLDnaute Occasionnel
Re, salut mapomme,

Il faut du VBA et ce n'est pas très simple.

Voici la macro (affectée au bouton) :
Code:
Sub Series()
Dim nlig&, tablo, dest As Range, col%, a(), n&, lig&, nmax&
With [A3:E22] ' tableau source, à adapter
  nlig = .Rows.Count
  tablo = .Resize(nlig + 1) '1 ligne de plus
End With
Set dest = [B27] 'à adapter
For col = 1 To UBound(tablo, 2)
  ReDim a(1 To nlig)
  n = 0
  For lig = 1 To nlig
    If tablo(lig, col) <> "" And tablo(lig + 1, col) = tablo(lig, col) + 1 Then
      n = n + 1
      a(n) = tablo(lig, col)
    ElseIf n Then
      If a(n) <> "" Then
        n = n + 1
        If tablo(lig, col) = a(n - 1) + 1 Then a(n) = tablo(lig, col): If n > nmax Then nmax = n
      End If
    End If
  Next lig
  dest(col).Resize(, nlig) = a
Next col
dest.Resize(col - 1, nlig).Borders.LineStyle = xlNone 'RAZ des bordures
If nmax Then dest.Resize(col - 1, nmax).Borders.Weight = xlThin
End Sub
Fichier joint.

Edit : j'ai ajouté les bordures sur les résultats.

Bonne nuit.
merci petit bug sur ma feuille excel ouj'ai mis et adapter la macro
merci encore
suite nombres.PNG
 

job75

XLDnaute Barbatruc
Re,

Les cellules de la plage du tableau source doivent contenir des nombres ou être vides.

S'il y a des textes vides "" la ligne que vous indiquez beugue, c'est normal.

Effacez donc tous les textes "vides".

Vous pouvez aussi introduire la fonction Val mais bof :
Code:
If tablo(lig, col) <> "" And tablo(lig + 1, col) = Val(tablo(lig, col)) + 1 Then
A+
 

job75

XLDnaute Barbatruc
Re,

Sur l'image jointe on voit qu'il y a des colonnes masquées dans la plage source.

Ces colonnes contiennent peut-être des formules.

Dans ce cas il faudrait joindre votre fichier Excel pour qu'on puisse adapter correctement.

A+
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour à tous,

Une dernière version plus souple.

EDIT: Le fichier v2 semble ne pas fonctionner.

Je me suis arraché tous les cheveux de la tête pour trouver la cause.
Allez savoir pourquoi la colonne G a été masquée :mad::eek:!?!!?!?
Or j'utilise des instructions OFFSET qui ne prennent pas en compte les colonnes masquées :(
Donc si on réaffiche la colonne masquée G (version v3), la macro fonctionne bien à nouveau :)

version v2 : colonne G masquée -> la macro est KO

version v3 : idem v2 mais colonne G affichée -> la macro est OK
 

Pièces jointes

  • perrmi- suite de nombres- v2.xlsm
    24.4 KB · Affichages: 28
  • perrmi- suite de nombres- v3.xlsm
    24.5 KB · Affichages: 15
Dernière édition:

perrmi

XLDnaute Occasionnel
Re,

Les cellules de la plage du tableau source doivent contenir des nombres ou être vides.

S'il y a des textes vides "" la ligne que vous indiquez beugue, c'est normal.

Effacez donc tous les textes "vides".

Vous pouvez aussi introduire la fonction Val mais bof :
Code:
If tablo(lig, col) <> "" And tablo(lig + 1, col) = Val(tablo(lig, col)) + 1 Then
A+
hello
PARFAIT
avec mes remerciements
bonne journée
vous etes des As
Michel
 

job75

XLDnaute Barbatruc
Bonjour perrmi, le forum,

Dans ces fichiers (1 bis) et (2 bis) je traite le cas plus général où dans le tableau source les nombres peuvent être disposés d'une manière quelconque.

La boucle For lig est modifiée en conséquence :
Code:
Sub Series()
Dim nlig&, tablo, dest As Range, col%, a(), n&, lig&, nmax&
With [A3:E22] 'tableau source, à adapter
  nlig = .Rows.Count
  tablo = .Resize(nlig + 1) '1 ligne de plus
End With
Set dest = [B27] 'à adapter
For col = 1 To UBound(tablo, 2)
  ReDim a(1 To nlig)
  n = 0
  For lig = 1 To nlig
    If tablo(lig, col) <> "" Then
      If tablo(lig + 1, col) = tablo(lig, col) + 1 And lig < nlig Then
        If n Then If tablo(lig, col) <> a(n) + 1 Then n = n + 1
        n = n + 1
        a(n) = tablo(lig, col)
      ElseIf n Then
        If tablo(lig, col) = a(n) + 1 Then n = n + 1: a(n) = tablo(lig, col): If n > nmax Then nmax = n
      End If
    End If
  Next lig
  dest(col).Resize(, nlig) = a
Next col
dest.Resize(col - 1, nlig).Borders.LineStyle = xlNone 'RAZ des bordures
If nmax Then dest.Resize(col - 1, nmax).Borders.Weight = xlThin
End Sub
Cela ne prend pas plus de temps, la macro est même un peu plus rapide.

Edit : j'ai vu que vous aviez des nombres sous le tableau, j'ai ajouté le nombre 21...

A+
 

Pièces jointes

  • Séries(1 bis).xlsm
    27.9 KB · Affichages: 11
  • Séries(2 bis).xlsm
    27.5 KB · Affichages: 12
Dernière édition:

perrmi

XLDnaute Occasionnel
Bonjour perrmi, le forum,

Dans ces fichiers (1 bis) et (2 bis) je traite le cas plus général où dans le tableau source les nombres peuvent être disposés d'une manière quelconque.

La boucle For lig est modifiée en conséquence :
Code:
Sub Series()
Dim nlig&, tablo, dest As Range, col%, a(), n&, lig&, nmax&
With [A3:E22] 'tableau source, à adapter
  nlig = .Rows.Count
  tablo = .Resize(nlig + 1) '1 ligne de plus
End With
Set dest = [B27] 'à adapter
For col = 1 To UBound(tablo, 2)
  ReDim a(1 To nlig)
  n = 0
  For lig = 1 To nlig
    If tablo(lig, col) <> "" Then
      If tablo(lig + 1, col) = tablo(lig, col) + 1 And lig < nlig Then
        If n Then If tablo(lig, col) <> a(n) + 1 Then n = n + 1
        n = n + 1
        a(n) = tablo(lig, col)
      ElseIf n Then
        If tablo(lig, col) = a(n) + 1 Then n = n + 1: a(n) = tablo(lig, col): If n > nmax Then nmax = n
      End If
    End If
  Next lig
  dest(col).Resize(, nlig) = a
Next col
dest.Resize(col - 1, nlig).Borders.LineStyle = xlNone 'RAZ des bordures
If nmax Then dest.Resize(col - 1, nmax).Borders.Weight = xlThin
End Sub
Cela ne prend pas plus de temps, la macro est même un peu plus rapide.

Edit : j'ai vu que vous aviez des nombres sous le tableau, j'ai ajouté le nombre 21...

A+
merci de vous etre donner de la peine
beau travail
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour à tous,

Le fichier v2 du message #20 semble ne pas fonctionner.
je me suis arraché tous les cheveux de la tête pour trouver la cause.
Allez savoir pourquoi la colonne G a été masquée :mad::eek:!?!!?!?
Or j'utilise des instructions OFFSET qui ne prennent pas en compte les colonnes masquées :(
Donc si on réaffiche la colonne masquée G (version v3), la macro fonctionne bien à nouveau :)

version v2 : colonne G masquée -> la macro est KO

version v3 : idem v2 mais colonne G affichée -> la macro est OK
 

Pièces jointes

  • perrmi- suite de nombres- v2.xlsm
    24.5 KB · Affichages: 8
  • perrmi- suite de nombres- v3.xlsm
    24.5 KB · Affichages: 13
Dernière édition:

Discussions similaires

Réponses
8
Affichages
364

Statistiques des forums

Discussions
312 156
Messages
2 085 812
Membres
102 988
dernier inscrit
doryan