Colonne excel de chiffres en lettres

Soyez le premier à donner votre avis sur cette source.

Snippet vu 24 164 fois - Téléchargée 27 fois

Contenu du snippet

Avez-vous essayer d'imprimer une zone dont vous ne connaissez pas les limites au départ de votre programme en utilisant les références d'adresse en "LR" ou en Cells(X,Y), ou Range(Cells(x,y)..... ??
Pour ma part je n'ai jamais réussi car, à priori, il faut absolument une adresse de début et de fin en mode absolue et le "$" est obligatoire.
C'est de la forme :
ActiveSheet.PageSetup.PrintArea = "$A$15:$BD$56"
J'ai donc cherché un moyen qui me permette de determiner une colonne de départ et de fin de l'impression, en fonction de critères de valeurs ou de formats qui seront trouvés par programmation, (et la même chose pour les lignes).

Source / Exemple :


Public ColAlphaDeb, ColAlphaFin As String
Public LettreUne, LettreDeux As String
Public ColNumEnCours As Integer
Public Resultat, Reste As Integer
Public LigDeb, LigFin As Integer

Sub TestPrintAera()

'   la ColNumEnCours ( 1ère et dernière colonne) est à determiner dans le cours du pgm
'   idem pour la LigDeb et la LigFin
'   Les valeurs sont données arbitrairement pour l'exemple

    LigDeb = 10
    LigFin = 64
    
    ColNumEnCours = 34     	'***** 1ère colonne à imprimer

    ColAlpahDeb = SelectionZoneAImprimer(ColAlpha)
                        	'***** ColAlphaDeb contient la valeur en lettre(s)
                        	'***** de l'adresse de la première colonne
    
    ColNumEnCours = 59     	'***** dernière colonne à imprimmer

    ColAlphaFin = SelectionZoneAImprimer(ColAlpha)
                        	'***** ColAlphaFin contient la valeur en lettre(s)
                        	'***** de l'adresse de la dernière colonne

'   ActiveSheet.PageSetup.PrintArea = "$" & ColAlphaDeb & "$" & LigDeb & ":" _
				      "$" & ColAlphaFin & "$" & LigFin    
End Sub

Function SelectionZoneAImprimer(ColAlpha) As String

'****** Initialisation des deux variables lettre
    LettreUne = ""
    LettreDeux = ""

'****** Je considère être dans la zone des colonnes à une lettre
    Resultat = ColNumEnCours

'****** Mais je vérifie quend même

    If ColNumEnCours > 26 Then	
        Resultat = ColNumEnCours \ 26  	'***** Division du numéro de colonne
                                    	'***** par le nombre de lettres de l'alphabet
                                    	'***** pour trouver la 1ère lettre
                                    
        Reste = ColNumEnCours Mod 26   	'***** Le reste de cette division donnera
                                    	'***** la 2ème lettre
                                    	
        If Reste = 0 Then           	'***** Si le reste vaut 0 : la colonne est à la
                                    	'***** frontière entre 2 alphabets donc il faut
                                    	'***** revenir en arrière d'un caractère pour
                                    	'***** la 1ère lettre et forcer la lettre "Z"
            Resultat = Resultat - 1
            Reste = 26

        End If

        LettreDeux = Chr(Reste + 64) 	'***** La 2ème lettre est facile à trouver
    End If
    
    LettreUne = Chr(Resultat + 64)  	'***** La 1ère lettre est seulement déterminée
                                    	'***** maintenant car nous sommes aussi au résultat de
                                    	'***** la première condition
                                    
    SelectionZoneAImprimer = LettreUne & LettreDeux
End Function

Conclusion :


Commentaires bienvenus. Merci

A voir également

Ajouter un commentaire

Commentaires

hebus16
Messages postés
80
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
2 octobre 2009
-
Salut on peut aussi éviter de limiter à deux colonnes ^^
Après il faut juste faire attention au nombre max de colonnes gérées par Excel :D

Public Function NumToLetter(col As Long) As String
Dim nbL As Long

' on détermine le nb de lettre présente par une division entière
nbL = col \ 26

' on va se faire une petite fonction récursive pour ne pas avoir de limite sur le nombre de lettre
If nbL > 0 Then
NumToLetter = NumToLetter(nbL) & Chr((col Mod 26) + 64)
Else
NumToLetter = Chr((col Mod 26) + 64)
End If

End Function
nobruu
Messages postés
4
Date d'inscription
vendredi 17 janvier 2003
Statut
Membre
Dernière intervention
3 février 2007
-
Salut, ça peut aussi se faire sur une seul ligne ligne:

dim x as integer 'numéro de la colonne en chiffres
dim Colonne as string 'nom de la colonne en lettres

Colonne = Replace(Chr(Int(((x - 1) / 26) + 64)) & Chr(((x - 1) Mod 26) + 65), "@", "")
doringen
Messages postés
2
Date d'inscription
jeudi 2 novembre 2006
Statut
Membre
Dernière intervention
2 novembre 2006
-
Excel dispose aussi d´un raccourci intéressant afin de trouver automatiquement la dernière ligne utilisée ( celle que tu appelles "ligfin"). Ici, je définis arbitrairement le début de la zone d´impression en A1 et je laisse excel trouver la dernière cellule de la colonne N tout seul.

Sub printarea()
Dim derCell As Integer

derCell =ActiveSheet.UsedRange.SpecialCells(xlLastCell).Row
ActiveSheet.PageSetup.printarea = ("A1:N" & derCell)

End Sub

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.