Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

suite de nombre dans une colonne

  • Initiateur de la discussion Initiateur de la discussion perrmi
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

a partir de ce tableau creer un tableau pour visualiser les suites de nombres
comme le tableau ci dessous.
 

Pièces jointes

  • upload_2017-4-9_19-14-17.png
    8 KB · Affichages: 31
Dernière édition:
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

merci petit bug sur ma feuille excel ouj'ai mis et adapter la macro
merci encore
 
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+
 
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+
 
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 😡😱!?!!?!?
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

Dernière édition:
hello
PARFAIT
avec mes remerciements
bonne journée
vous etes des As
Michel
 
 
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

Dernière édition:
merci de vous etre donner de la peine
beau travail
 
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 😡😱!?!!?!?
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

Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Microsoft 365 Fonction si
Réponses
7
Affichages
129
Réponses
15
Affichages
674
  • Question Question
Microsoft 365 MFC dans tableau
Réponses
2
Affichages
339
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…