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
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.