abcabc vs abcdef

Le
d.sundow
Bonjour,

Si je mets en

A1 : janvier
A2 : février

et que je tire ces deux données : mars, avril, mai, vont
s'incrémenter automatiquement

ça fonctionne parfaitement aussi avec les nombres, les dates, les mois,
( au fait quelqu'un aurait-il quelque part une liste de tout ce qui
est possible de tirer ?)

Maintenant si je mets :

A1 : a
B1 : b
C1 : c

Contre toute attente, il ne vient pas à l'idée d'Excel de mettre
éventuellement d, e, f,; mais il se borne à cracher des suites
d'abc, abc, abc

Quelqu'un a-t-il une solution qui permette de générer verticalement
via une formule qu l'on tire une suite de type : a, b, c, . ,z, aa,
ab,, za , zb, , aaa,., ect.

Merci d'avance pour votre aide toujours précieuse - sundow
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
PMO
Le #5447051
Bonjour,

Faites menu Outils/Options.../Liste pers.
Cliquez sur Ajouter
Tapez dans entrées de la liste
a,b,c,d,...x,y,z
et OK

Cordialement.

PMO
Patrick Morange
Philippe.R
Le #5446961
Bonsoir,
en ligne 1 :
Êr(ligne()+96)
à recopier vers le bas
--
Avec plaisir
http://dj.joss.free.fr/trombine.htm
http://jacxl.free.fr/mpfe/trombino.html
Philippe.R
Pour se connecter au forum :
http://www.excelabo.net/mpfe/connexion.php
News://news.microsoft.com/microsoft.public.fr.excel
news:
Bonjour,

Si je mets en

A1 : janvier
A2 : février

et que je tire ces deux données : mars, avril, mai,... vont
s'incrémenter automatiquement

ça fonctionne parfaitement aussi avec les nombres, les dates, les mois,
... ( au fait quelqu'un aurait-il quelque part une liste de tout ce qui
est possible de tirer ?)

Maintenant si je mets :

A1 : a
B1 : b
C1 : c

Contre toute attente, il ne vient pas à l'idée d'Excel de mettre
éventuellement... d, e, f,...; mais il se borne à cracher des suites
d'abc, abc, abc...

Quelqu'un a-t-il une solution qui permette de générer verticalement
via une formule qu l'on tire une suite de type : a, b, c, .... ,z, aa,
ab,..., za , zb, ..., aaa,...., ect.

Merci d'avance pour votre aide toujours précieuse - sundow
d.sundow
Le #5446881
PMO :

Faites menu Outils/Options.../Liste pers.
Cliquez sur Ajouter
Tapez dans entrées de la liste
a,b,c,d,...x,y,z

Philippe.R :

En ligne 1 : Êr(ligne()+96) à recopier vers le bas

Bonsoir Patrick, bonsoir Philippe,

Merci beaucoup pour vos réponses.

Je n'ai pas encore testé celle de PMO car à la maison je suis sur ce
rjvnlmpkrrrrrrr de 2007 et j'en ai pour des plombes à trouver les
menus (que je ne trouve d'ailleurs en général pas; et c'est le cas ce
soir) :-))

Passons donc à la suggestion de Philippe.R dont j'apprécie grandement
le caractère universel.

Je dirais que par rapport à ma question cette réponse est 26 fois
juste, mais au delà de ça... hum !

En effet la formule en question pointe de toute évidence sur la base
de donnée des caratères de la machine (d'où le -96). Aussi passé le z,
nous ne tombons pas sur za, zb, zc, ... mais sur {; |; }; ~; .... et
ça, ça m'arrange pas du tout :-))

Je suis curieux de tester avec demain la solution à PMO avec mon bon
vieux 2003 (bouh 2007!) .

Je vous tiens bien sure au courant.

Merci encore pour votre intervention et très bonne soirée - sundow
Modeste
Le #5446751
Bonsour® avec ferveur ;o))) vous nous disiez :

et que je tire ces deux données : mars, avril, mai,... vont
s'incrémenter automatiquement
Quelqu'un a-t-il une solution qui permette de générer verticalement
via une formule qu l'on tire une suite de type : a, b, c, .... ,z, aa,
ab,..., za , zb, ..., aaa,...., ect.


similaire au codage décimal vers Hexa
une fonction perso :
Dec2Alpha

Function Dec2Alpha(target) As String
chaine = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
Dim a As Double, b As Double, c As String, d As Double
a = target - 1
For b = 1 To Int(Log(target) / Log(26)) + 1
d = CDbl(a Mod 26)
c = Mid(chaine, d + 1, 1)
Dec2Alpha = c & Dec2Alpha
a = CDbl(Int(a / 26)) - 1
Next b
End Function

Utilisation :
en D3 Þc2Alpha(ligne()) affichage C

en E3Þc2Alpha(1000+ligne()) affichage ALO
tirer la formule vers le bas vers le bas affichage ALP, ALQ, ALR


--
--
@+
;o)))

d.sundow
Le #5446401
Bonjour PMO,

Merci pour ta suggestion. J'ai créer la liste de l'alphabet, mais
comme je m'en doutais un peu cette option génère des suites
redondantes et non des suites incrémentées.

Toutefois peut-être que couplée à la fonction à Modeste, cette voie
sera peut être celle qui pourra me tirer d'affaire en définitive.

***
Bonjour Modeste,

Merci pour ton impressionnante fonction.

Elle est presque parfaite.

Je l'ai testée de 1 à 65536 (Eviv 3002! Eviv Bulgroz!) et j'ai
ponctuellement des #VALEUR! qui viennent là juste pour embêter.

Le premier tout seul en ligne 26. (si l'on part avec A en ligne 1)
En suite une série allant des lignes 676 à 702
Puis une troisième et dernière série des lignes :17576 à 18278

Quelqu'un aurait-il une idée d'où cela peut-il bien provenir ? Car
franchement de mon côté le code à Modeste me dépasse complètement.

Merci d'avance pour votre aide - sundow
Modeste
Le #5446331
Bonsour® avec ferveur ;o))) vous nous disiez :

Elle est presque parfaite.

Je l'ai testée de 1 à 65536 (Eviv 3002! Eviv Bulgroz!) et j'ai
ponctuellement des #VALEUR! qui viennent là juste pour embêter.


Oupsss....
tests pas assez poussés....
correction :

Function Dec2Alpha(target) As String
chaine = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
Dim a As Double, b As Double, c As String, d As Double
a = target - 1
For b = 1 To Int(Log(target) / Log(26)) + 1
d = CDbl(a Mod 26)
c = Mid(chaine, d + 1, 1)
Dec2Alpha = c & Dec2Alpha
a = CDbl(Int(a / 26)) - 1
If a < 0 Then Exit For
Next b
End Function




--
--
@+
;o)))

PMO
Le #5446161
Bonjour,

La fonction de Modeste a l'air très bien et doit correspondre
à votre attente.

Mais voici une autre façon de faire avec le code suivant qui donne
des listes incrémentées de manière exhaustive.

Dans la InputBox saisissez une adresse de plage (par ex: c25:c33647)
Réglez la constante MAJUSCULE à True OU False selon que vous
voulez obtenir des majuscules ou des minuscules
La macro ne fonctionnera qu'en lignes et pas en colonnes.

'********************
'### A adapter selon la casse ###
Const MAJUSCULE As Boolean = True
'################################
Sub Liste_AtoZZZ()
Dim R As Range
Dim var()
Dim maxi&
Dim Casse%
Dim i&
Dim j&
Dim k&
Dim top&
On Error GoTo Erreur
Set R = Application.InputBox( _
prompt:="Veuillez indiquer la plage cible sous la forme A1:A65536", _
Title:="Liste verticale de type : A,B,...,AAA,AAB,...", _
Type:=8)
If R.Columns.Count > 1 Then
MsgBox "Veuillez ne saisir qu'une colonne à la fois"
Exit Sub
End If
On Error GoTo 0
Casse% = 96
If MAJUSCULE Then Casse% = 64
maxi& = R.Rows.Count
top& = maxi& 26
If maxi& > top& * 26 Then top& = top& + 1
ReDim var(1 To maxi&, 1 To 1)
--- Crée un tableau de "A,B,...,IU,IV,..." ---
If maxi& > 26 Then
For i& = 1 To top&
For j& = 1 To 26
If i& < 2 Then
var(j&, 1) = Chr(Casse% + j&)
Else
k& = (i& - 1) * 26
If j& + k& > maxi& Then Exit For
var(j& + k&, 1) = var(i& - 1, 1) & Chr(Casse% + j&)
End If
Next j&
Next i&
Else
For i& = 1 To maxi&
var(i&, 1) = Chr(Casse% + i&)
Next i&
End If
Application.ScreenUpdating = False
Range(R.Address) = var
Application.ScreenUpdating = True
Erreur:
End Sub
'********************

Cordialement.

PMO
Patrick Morange
d.sundow
Le #5445931
Bonjour PMO, Bonjour Modeste,

YES !!! Itizetotaliperfècte !

La fonction à Modeste est effectivement particulièrement utile au sein
même d'une formule (pour définir une adresse de colonne) .

Ex :
=Indirect(Dec2Alpha(ligne()&1)

Placée en A2 et tirée vers le bas cette formule va ramener toutes les
données horizontale de la ligne 1 dans les cellules verticales de la
colonne A.

Le code à PMO est intéressant lui aussi pour générer des listes
incrémentées sur des colonnes précises. Cette méthode est beaucoup
plus rapide que la fonction à Modeste si l'on veut générer la suite
complète s'étendant de la ligne 1 à la ligne 65536 (soit de A à CRXN )

Maintenant mon petit grain de sel à moi mais complètement inspiré par
les réponses de PMO et Modeste :

a) générer avec la fonction de Modeste une liste de la ligne 1 à la
ligne 65536 (soit de A à CRXN)
b) copier/collage spéciale/valeurs de la colonne en question

ou (plus rapide)

- lancer la macro à PMO en définissant la plage A1:A65536 (soit de A à
CRXN)

c) Selon la première réponse de PMO :

Outils/Option/Listes pers./bouton importer/sélection de la colonne en
question/OK

Nous avons générer une nouvelle liste et ça marche !

Maintenant en tirant la cellule on génère des listes incrémentées
comme nous avons pour les jours les semaines etc.

L'incrémentation se fait de manière fluide en minuscules ET en
majuscule, et l'on peut commencer sans autre sur n'importe quelle
ligne à partir de n'importe quelle lettre. Ça fonctionne verticalement
et horizontalement.

Limite :

- Si l'on passe par Liste pers. la série devient redondante au delà de
YY (une liste ne peut pas excéder apparemment 675 entrées sur
l'excellente et irremplaçable version 2003 d'Excel).

- Inutilisable au sein d'une formule.... quoi que...

En inscrivant 'A' en A1 et 'B' en B2 et que l'on tire ça
horizontalement jusqu'en IV, la dernière cellule horizontale des
feuille (sur 2003 et inférieur), et bien l'on a récupérer les en-têt es
des colonnes en ligne 1! Et ça c'est trop bien!

Merci PMO, Merci Modeste, grâce à vous deux j'ai une réponse tout à
fait satisfaisante à ma question, très agréable soirée à vous deux et
à tous les utilisateurs d'Excel 2003. :-))

Sundow
Modeste
Le #5445821
Bonsour® avec ferveur ;o))) vous nous disiez :

La fonction à Modeste est effectivement particulièrement utile au sein
même d'une formule (pour définir une adresse de colonne) .
Ex :
=Indirect(Dec2Alpha(ligne()&1)
pour connaitre la lettre de la colonne courante,

il vaut mieux utiliser :
=SUBSTITUE(ADRESSE(1;COLONNE();4);"1";"")
;o)))
--
--
@+
;o)))

d.sundow
Le #5445671
pour connaitre la lettre de la colonne courante,
il vaut mieux utiliser :
=SUBSTITUE(ADRESSE(1;COLONNE();4);"1";"")
;o)))


Bonsoir Modeste,

Exellent très cher, excellent.

Je me permets toutefois quelques commentaires.

Il ne s'agissait là que d'une application et non du fond de ma
question. Aussi si je n'avais pas formulé la question tel que je l'ai
fait :

1) à l'heure qu'il est, je ne saurais toujours pas comment créer et
importer une liste
2) je n'aurais pas votre impressionnante fonction ni dans mon classeur
de macro ni comme sujet d'étude
3) de même que la macro de PMO
4) de même que la formule de Philippe.R (Êr(ligne()+96) ) que
j'ignorais et que je garde bien au chaud dans ma musette (et que j'ai
omi de remercier plus haut je m'en excuse, merci Philippe à vous
aussi)
5) et surtout je n'aurais pas passé une journée ma foi bien
sympathique en votre compagnie

En dernier lieu, très cher Modeste, je dirais ceci

Si vous m'aviez tout de suite livré la formule suivante :

=SUBSTITUE(ADRESSE(1;COLONNE()+LIGNE()-1;4);"1";"") placée en A1

je ne vous eusse point embêté plus longtemps.

:o)))

Bonsoir... et merci à vous tous - vraiment - sundow

Publicité
Poster une réponse
Anonyme