Soyez le premier à donner votre avis sur cette source.
Snippet vu 24 349 fois - Téléchargée 27 fois
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
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
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), "@", "")
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.