Extraire série de numéros dans une liste

Résolu
cis67 - 25 mars 2013 à 21:24
 cis67 - 4 avril 2013 à 12:14
Bonjour,
Besoin d'aide... Sur une colonne A, j'ai une suite de numeros croissants relativement longue, et souhaite les mettre sous la forme de séries N°128 à 145....

Colonne A Colonne B
124 124 à 128
125 254 à 257
126 ...etc
127
128
254
255
256
257
....etc

9 réponses

cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
28 mars 2013 à 21:05
premièrement, déclare I et Fin As Long parce que ça peut dépasser la capacité d'un Integer

Ensuite
For i = i + 1 To fin
devrait être
For i = 1 To fin

x = ("A" & NumLigne)
devrait être écrit
x = Range("A" & NumLigne)
même chose pour les autres
et tout ça devrait être à l'intérieur de ta boucle, sinon NumLigne = 0 et ça va causer une erreur (Ligne 0 n'existe pas)

Et n'utilise pas Copy si tu ne le Paste pas...
Affecte plutôt le résultat à une variable
If Range("A" & I + 1) <> Range("A" & I) + 1 Then
'La valeur suivante n'est pas supérieure de 1, donc une nouvelle série
ValeurFinSérie = Range("A" & I)
'Gère ta série
ValeurDébutSérie = Range("A" & I + 1)

Ça te donne un début...

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
3
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
29 mars 2013 à 00:33
L'important c'est que tu comprennes ce que tu fais (écris)
Dans le code du dernier message
Range("b1").Select en début ne sert à rien
Pas plus que n'importe lequel Select (ou presque...)

Comme tu sais où commence ta série - ligne 1 (ou 2 s'il y a des entêtes)
tu peux commencer ta procédure en disant que
ValeurDébutSérie = Range("A2") si la série commence sur la ligne 2

Ensuite, tu commences ta boucle
Ligne = 1 'début pour inscrire les séries
For i = 1 To fin
If Range("A" & i + 1) <> Range("A" & i) + 1 Then
'on vient de trouver la fin de la série
ValeurFinSérie = Range("A" & i)
'alors on l'inscrit sur la ligne "Ligne"
Range("B" & Ligne) = ValeurDébutSérie & " à " & ValeurFinSérie
Ligne = Ligne + 1 'pour la prochaine entrée
ValeurDébutSérie = Range("A" & i + 1)
..................

Tu as pas mal tout ce que tu as besoin maintenant...
Mets-y un peu de graisse de neurones pour la suite


MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
3
Profil bloqué
25 mars 2013 à 23:54
bonjour
et qu'as-tu codé ?

1 )Tu prends le premier numéro
2 )Tu testes si le suivant est = au précédent + 1
3 )si oui tu retournes au test au dessus
4 )si non ta série est : premier numéro et avant-dernier numéro testé
5 )tu prends le dernier numéro et tu refais le test 2

La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.

GRENIER Alain
0
pas très doué !
voici une ebauche !!!


Sub CommandButton1_Click()

Range("b1").Select

Dim x, y, b, i, fin As Integer
Dim NumLigne As Long
Dim ValeurCourante As Integer
Dim Ancienne As Integer
Dim valeursuivante As Integer

x = ("A" & NumLigne)
y = ("A" & NumLigne + 1)
b = ("b" & NumLigne)
fin = Range("A" & Rows.Count).End(xlUp).Row

NumLigne = 1
Call Range("A" & NumLigne).Activate


For i = i + 1 To fin

If y = x Then

ActiveCell.Select
Selection.Copy ("b1")
Else

End If
'on passe à la cellule suivante
NumLigne = NumLigne + 1

Call Range("A" & NumLigne).Activate
Next i

End Sub
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Profil bloqué
26 mars 2013 à 00:52
bonsoir
tu aurais du poster dans Visual Basic - Langages dérivés - VBA
tu programmes sous Excel
je programme sous VB Net et non VBA ! mais mon raisonnement est indépendant du langage !

La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.

GRENIER Alain
0
Suis pas vraiment avancé.... mais merci quand même !
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
28 mars 2013 à 21:44
Bonjour,
je n'ai personnellement rien compris aux aboutissants !
J'attendrai donc deux choses :
1) et principalement : le déplacement de cette discussion
et (mais uniquement ensuite)
2) un exposé clair et très précis des aboutissants.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
Un grand MERCI MPi....
Ca fonctionne avec ça ! y'a plus qu'à le mettre en forme..si t'as une idée !!! je sais j'abuse...

Sub CommandButton1_Click()


Range("b1").Select


Dim i, fin As Long
Dim NumLigne As Long
Dim ValeurDébutSérie As Integer
Dim ValeurFinSérie As Integer


fin = Range("A" & Rows.Count).End(xlUp).Row


'Boucle jusqu'à ce qu'une cellule soit vide
For i = 1 To fin
Range("B" & i).Select

'La valeur suivante n'est pas supérieure de 1, donc une nouvelle série
If Range("A" & i + 1) <> Range("A" & i) + 1 Then

Range("B" & i) = Range("A" & i)

Else


End If
'Gère ta série
ValeurFinSérie = Range("A" & i)
ValeurDébutSérie = Range("A" & i + 1)

Next i

End Sub
0
Encore MERCI MPi...ça fonctionne
0
Rejoignez-nous