Lister tous les nombres entre 2 cellules

Bonjour

Novice dans l'utilisation d'Excel et ne connaissant pas encore bien toutes les focntions, j'aimerais savoir comment faire pour lister rapidement tous les nombres entre 2 cellules.

J'ai 3 colonnes :

First SN : 201365987 LAst SN : 201366000 Qté : 14

J'aimerais lister toutes les numéros de série entre la colonne A1 et B1 dans une 3ème colonne comme suit:

201365987

201365988

201365989

201365990

201365991

201365992

201365993

201365994

201365995

201365996

201365997

201365998

201365999

201366000

Ensuite, je dois transposer la suite de ces numéros de série à l'horizontale séparé par 1 ;.

Comment faire?

Quelqu'un peut m'aider?

Bonjour,

pas bien clair...

avec ce que tu as au départ et le résultat final voulu.

eric

Bonjour, salut eriiic !

Un essai de fonction personnalisée VBA (à coller dans un module standard de l'éditeur VBA, ALT + F11, puis utiliser comme une fonction classique) :

Public Function ListerNoSerie(ByVal NoDépart As String, ByVal NoFin As String, Optional ByVal SepSortie As String = ";") As String

Dim N As Long, Res As String

For N = NoDépart To NoFin
    If N = NoDépart Then Res = N Else Res = Res & SepSortie & N
Next N
ListerNoSerie = Res

End Function

Dans une cellule :

=ListerNoSerie(A1;B1)

Ou par exemple :

=ListerNoSerie(A1;B1;"; ")

Si besoin, le fichier exemple :

18ylaure.xlsm (13.97 Ko)

Bonjour

Voici un exemple dans l'onglet 1 et le modèle dans l'onglet 2 qui correspond à l'attendu.

J'espère que ce sera plus clair.

15exemple.xlsx (12.10 Ko)

Merci pour votre retour

Salut tous,

Une interprétation (sans certitude) en pièce jointe. La liste en colonne D se met à jour en fonction de A2 et C2

La formule en F3 sera à proscrire si on a une Qté supérieure à +/-20

9exemple-2-1.xlsx (28.23 Ko)

Bonjour

J'ai testé et ça ne fonctionne pas

Aussi, j'ai des qtés qui avoisinent les 100 pour certaines références et numéros de série .

Dans l'idéal, je souhaiterais des formules qui puissent se glisser sur l'ensemble des SN.

Je vous mets le fichier complet, peut-être qu'il pourra vous être plus utile

D'autres pistes?

As tu testé la fonction personnalisée ?

Re-bonjour,

J'ai testé et ça ne fonctionne pas

Mais qu'est-ce donc qui ne fonctionne pas ?

Nous avons essayé de deviner, avant que tu ne joignes un fichier

Dans ton fichier joint, la formule en colonne F est recopiée jusqu'en ligne 105

En J2, j'ai remplacé la "formule à rallonge" par une fonction personnalisée (donc les macros devront être activées !)

Les valeurs prises en compte sont A2 et B2 (C2 est ignorée)

[Edit:] Salut Pedro22

PS: J'ai travaillé sur ton fichier de 14:04 ... le dernier est encore différent !?

Bonjour Umilité et Pedro 22

Je vous remercie pour vos retours.

Je vais organiser mon fichier un peu différemment pour que la formule fonctionne, car comme vous avez pu le voir sur le dernier fichier, j'ai beaucoup de lignes à traiter.

Je précise que j'ai la version anglaise d'Excel.

Pour la fonction personnalisée, j'avoue que j'ai essayé mais comme déjà dit, je commence seulement à utiliser les fonctions complexes d'Excel alors le VBA, c'est sans commentaires ..

Par contre, si quelqu'un veut bien m'aider à tester avec les différentes étapes "pas à pas", comme on dit, je veux bien ..

Tenez moi informée

Bonne apm

Bonjour,

Au vu de ton dernier fichier, la seule solution passera par une macro ou une fonction personnalisée, comme proposée par Pedro22. D'autant que tu as jusqu'à ... 300 SN à traiter (ligne 338)

Précise de quel type d'aide tu as besoin, concrètement ... je suis certain que Pedro22 t'expliquera

S'il ne repasse pas d'ici-là je pourrai répondre.

Bonjour, salut U.Milité !

Je vais essayer d'apporter plus de précisions...

Le principe d'une fonction personnalisée est pouvoir utiliser une fonction qui n'existe pas dans la version de base d'Excel. Il s'agit de s'appuyer sur le langage VBA pour créer un code général capable de renvoyer une donnée, le plus souvent à partir de données d'entrée (par exemple une plage de cellules pour une fonction SOMME()).

Les plus simples n'ont besoin d'aucune donnée d'entrée pour renvoyer une donnée de sortie, par exemple :

Public Function MaFonctionBonjour() As String 'Syntaxe générale : Nom_de_la_fonction(argument(s) [facultatif]) As Type_de_donnée_renvoyée
    MaFonctionBonjour = "Bonjour !" 'Résultat renvoyé par la fonction
End Function

Ensuite, dans n'importe quelle cellule du classeur, on peut écrire :

=MaFonctionBonjour()

On verra alors apparaître "Bonjour !" dans la cellule.

Concernant la fonction proposée pour répondre à votre problématique :

Public Function ListerNoSerie(ByVal NoDépart As Long, ByVal NoFin As Long, Optional ByVal SepSortie As String = ";") As String
'1er argument : NoDépart qui doit correspondre à un nombre entier (Long est le type pour les entiers potentiellement de grande taille)
'2eme argument : NoFin qui doit correspondre à un nombre entier (Long est le type pour les entiers potentiellement de grande taille)
'3ème argument [optionnel] : SepSortie, qui correspond au(x) caractère(s) à utiliser comme séparateur pour les numéros de série (";" par défaut)
'La valeur renvoyée par la fonction est un texte ("String" dans VBA)
'On déclare 2 variables utiles pour la fonction, N qui sera utilisé comme compteur numérique pour parcourir les numéros de série, et Res qui contiendra les résultats intermédiaires sous forme de texte
Dim N As Long, Res As String 

'Boucle pour parcourir les numéros de séries, du premier au dernier par pas de 1
For N = NoDépart To NoFin  
    'Si c'est le premier tour de boucle
    If N = NoDépart Then 
         Res = N 'Res est vide donc on ajoute simplement le numéro sans utiliser de séparateur entre les résultats
    Else 
         Res = Res & SepSortie & N 'sinon on ajoute le numéro de série à la suite des autres séparé avec le séparateur
    End If
Next N 'Numéro suivant
'Arrivé à ce stade, la boucle est terminée donc Res contient l'ensemble des résultats
ListerNoSerie = Res 'La fonction retourne donc le contenu de Res

End Function

La fonction est donc utilisée comme ceci dans une cellule :

=ListerNoSerie(A1;B1)

Ou pour utiliser un séparateur défini :

=ListerNoSerie(A1;B1;" - ")

Bonjour à vous.

Alors là, je suis en train de prendre la base de la formule de Umilité et je modifie pour chaque ligne les cellules de base. soit A et B

(cf PJ). J'ai commencé à 13:30 et je suis même pas à la moitié.

Du coup, je testerais bien la fonction personnalisée car j'imagine que ce serait beaucoup plus rapide.

MAis il faudrait m'expliquer comment le mettre en place du début à la fin avec toutes les manip associées.

Du coup, je testerais bien la fonction personnalisée car j'imagine que ce serait beaucoup plus rapide.

MAis il faudrait m'expliquer comment le mettre en place du début à la fin avec toutes les manip associées.

Comme indiqué dans mon premier post :

1. Ouvrir l'éditeur VBA (raccourci = ALT + F11)

2. Insérer un module standard (Insertion --> Module)

3. Coller le code

4. Enregistrer le classeur au format ".xlsm" ou tout autre format prenant en charge les macros

5. C'est prêt ! La fonction peut-être utilisée comme indiquée...

Le code à copier-coller :

Public Function ListerNoSerie(ByVal NoDépart As Long, ByVal NoFin As Long, Optional ByVal SepSortie As String = ";") As String
Dim N As Long, Res As String 
For N = NoDépart To NoFin
    If N = NoDépart Then Res = N Else Res = Res & SepSortie & N 
Next N 
ListerNoSerie = Res 
End Function

Pedro

La fonction personnalisée marche.

Merci pour ton support.

Par contre, il m'indique #VALEUR #NOMBRE;

J'ai changé le format de cellule et désactiver la protection mais rien ne se passe.

Penses-tu que le script n'est pas correct?

D'où ça pourrait provenir?

Des pistes?

C'est ma faute, les numéros de série sont trop grands pour le type Long (accepte les nombres compris entre -2 147 483 648 et 2 147 483 647). Tu peux remplacer les 3 types Long par Double :

Public Function ListerNoSerie(ByVal NoDépart As Double, ByVal NoFin As Double, Optional ByVal SepSortie As String = ";") As String
Dim N As Double, Res As String
For N = NoDépart To NoFin
    If N = NoDépart Then Res = N Else Res = Res & SepSortie & N
Next N
ListerNoSerie = Res
End Function

Pedro

Ca a fonctionné. Je suis vraiment contente ...

Que dois-je changer si je veux cette fois les numéros de série les uns en dessous des autres et à la suite dans la colonne "among each other"?

Tu peux utiliser le séparateur "saut de ligne" (CAR(10)). Ils seront tous dans la même cellule, mais cette fois ci les uns en dessous des autres.

=ListerNoSerie(A1;B1;CAR(10))

L'option "retour à la ligne automatique" doit être active sur la plage où la fonction est utilisée.

Bonjour à tous

A noter que cela est faisable par PowerQuery, intégré à Excel à partir de 2016 et en add on à partir de 2010.

Il manque cependant quelques précisions :

la colonne Side by side pourrait être juxtaposée à F mais, si on doit lister sur des lignes différentes les colonnes Among each other, Warranty Expiration, Status, Warranty ends in x days, c'est un autre tableau ou bien duplique t-on les lignes initiales ?

Si on crée un autre tableau : Status est-il à saisir ou existe-il déjà dans le fichier ?

SAlut Pedro

Je te remercie.

Cela fonctionne mais néanmoins, il ne m'affiche pas pour tous, la totalité des numéros de série.

Une recherche V va t'elle fonctionner si plusieurs n° Série sont dans une même cellule?

Le cas échéant, est-il possible par exemple de les afficher dans chaque case à la suite les uns en dessous des autres même si elles ne sont pas parralélles aux données dans les colonnes A et B?

En tout cas, merci pour ton aide, tu es un génie

Salut 78Chris,

Toutes les données sont sur un même tableau- > cf pièce jointe.

La seule différence avec mon fichier initial, c'est que les numéros de série dans la colonne Among each other étaient les uns en dessous des autres (case par case).

Peux-tu m'en dire plus de Power Query?

En quoi cela consiste?

Salut 78Chris,

La seule différence avec mon fichier initial, c'est que les numéros de série dans la colonne Among each other étaient les uns en dessous des autres (case par case).

Justement c'est bien pourquoi je pose la question

Si on doit mettre 5 lignes ou 38 ou... là où on n'en avait une il faut bien expliquer ce que l'on fait

Soit on répète 5 ou 38 ou ... fois les données des colonnes A à F (D sans info ni titre semble séparer plusieurs tableaux)

ou sinon quoi ?

Par ailleurs pourquoi as-t-on Warranty Expiration en double ?

Peux-tu m'en dire plus de Power Query?

C'est un outil très puissant de type requêteur avec une logique base de données, qui permet de retraiter les fichiers, Excel ou autres. Ses possibilités sont tellement larges qu'il est difficile de résumer

Dans nombre de cas il est plus souple et intuitif que VBA.

Comme le resultat n'est recalculé qu'à la demande il évite les temps de calcul des formules.

Il est intégré à Excel depuis la version 2016 mais disponible en add on pour 2010 et 2013

Vérification faite tu as 2 lignes, 816 et 817, que ni le VBA ni PowerQuery ne peuvent traiter car ce ne sont pas des nombres permettant de calculer une suite mais des textes : il contiennent les lettres BA et la fonction VBA appliquée à ces lignes renvoie une erreur

Sinon on peut obtenir ce type de tableau avec ou sans les colonnes First et Last mais c'est un autre tableau que celui d'origine

series
Rechercher des sujets similaires à "lister tous nombres entre"