Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1597 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [EXCEL] Impression d'une zone variable (problème de Range) [Résolu]

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[EXCEL] Impression d'une zone variable (problème de Range) [Résolu]

n°2203159
Bebafo
Posté le 16-09-2013 à 18:19:20  profilanswer
 

Bonjour,
 
Je souhaite imprimer une feuille de résultats.
Problème, en faisant un simple ActiveWindow.SelectedSheets.PrintOut,
ça m'imprime toutes les pages, soit 17, au lieu de 2 pages réelles de résultats par exemple.
Le reste étant des cases de formules qui donnent la valeur "". Donc des pages blanches.
 
N'ayant pas trouvé comment imprimer que les cases visibles,
j'ai tenté en utilisant PrintArea puis Range,
En testant plusieurs syntaxes différentes, j'y arrive toujours pas  :D  
 
 
If Target.Address = "$BO$20:$BO$21" Then
    Sheets("Results" ).Select
    Range("H1:W" & F4).Select
   Selection.PrintOut Copies:=1, Collate:=True
    Sheets("Dalles" ).Select
    Range("BN16" ).Select
End If
 
Le Range me renvoie une erreur 1004... Que j'arrive au mieux à changer en erreur 424  :pt1cable:  
Le "F4" étant la case sur la feuille Results qui renvoie le calcul du nombre de lignes à imprimer.
mais il ne le reconnait visiblement pas.
 
Egalement essayé un "ActiveWindow.SelectedSheets.PrintOut To:=C4, Copies:=1, Collate:=True"; C4 étant le calcul du nombre de pages à imprimer, marche pas non plus  :??:  
 
Comment dois-je faire pour que ça marche ?
Merci.

Message cité 1 fois
Message édité par Bebafo le 17-09-2013 à 15:32:05
mood
Publicité
Posté le 16-09-2013 à 18:19:20  profilanswer
 

n°2203171
MaybeEijOr​Not
but someone at least
Posté le 16-09-2013 à 19:16:37  profilanswer
 

Tu as testé avec cette synthaxe?
 

Citation :

expression.PrintOut(De, À, Exemplaires, Aperçu, ImprimanteActive, ImprimerDansFichier, Assembler, ImprDsNomFichier)
 
expression   Variable qui représente un objet Range.
 
Paramètres
 
Nom Obligatoire/Facultatif Type de données Description  
De Facultatif Variante Numéro de la page à partir de laquelle commence l'impression. Si cet argument est omis, l'impression commence à la première page.  
À Facultatif Variante Numéro de la dernière page à imprimer. Si cet argument est omis, l'impression s'effectue jusqu'à la dernière page.  
Exemplaires Facultatif Variante Nombre de copies à imprimer. Si cet argument est omis, une seule copie est imprimée.  
Aperçu Facultatif Variante True pour que Microsoft Excel affiche un aperçu de l'objet avant de l'imprimer. False (ou omis) pour imprimer l'objet immédiatement.  
ImprimanteActive Facultatif Variante Définit le nom de l'imprimante active.  
ImprimerDansFichier Facultatif Variante True pour imprimer dans un fichier. Si ImprDsNomFichier n'est pas spécifié, Microsoft Excel invite l'utilisateur à entrer le nom du fichier de sortie.  
Assembler Facultatif Variante True pour assembler plusieurs copies.  
ImprDsNomFichier Facultatif Variante Si l'argument ImprimerDansFichier a la valeur True, cet argument spécifie le nom du fichier vers lequel vous souhaitez effectuer l'impression.


 
 
+C4 c'est quoi? C'est ta cellule? Si oui, cells(4,3).value serait plus adapté à moins que je me sois toujours compliqué la vie. :pt1cable:

n°2203172
Marc L
Posté le 16-09-2013 à 19:17:05  profilanswer
 

 
             Bonjour,
 

Bebafo a écrit :

Range("H1:W" & F4).Select
Le "F4" étant la case […]


             Eh ben non, grossière erreur de syntaxe ‼
             Tel quel, F4 est une variable, pas une cellule ‼
 
             Avec Option Explicit en début de code, l'erreur aurait été directement signalée car variable non déclarée …
 
             La cellule F4 est définie en VBA par exemple par Range("F4" )
 

n°2203267
Bebafo
Posté le 17-09-2013 à 11:39:21  profilanswer
 

Bonjour,
 
j'ai encore essayé pas mal de syntaxes suivant vos réponses et d'autres "tips" trouvés sur le net, et je n'y arrive toujours pas  :(  
 
Cells(4,6).value (Le F4 de la feuille Results) me renvoyait toujours 0 (qui est la valeur de F4 mais de la feuille Dalles)
Même en foutant un Worksheet.Select et Worksheet.Activate avant.
Donc j'utilise maintenant Cells(3,58). qui est la même valeur, mais sur la feuille Dalles.
 
Et j'ai toujours l'erreur 1004, malgré une valeur correcte de ImpLine  :fou:  
 

Code :
  1. If Target.Address = "$BO$20:$BO$21" Then
  2.     Dim ImpLine As Integer
  3.    
  4.     ImpLine = Cells(3, 58).Value
  5.    
  6.     Worksheets("Results" ).Range("H1:W" & ImpLine).Select
  7.     Selection.PrintOut Copies:=1, Collate:=True
  8.     Sheets("Dalles" ).Select
  9.     Range("BN16" ).Select
  10. End If


 
 
(Au cas où il y aurait un doute, je suis évidemment Ultra débutant...)


Message édité par Bebafo le 17-09-2013 à 11:53:12
n°2203270
Marc L
Posté le 17-09-2013 à 11:51:48  profilanswer
 

 
           La prochaine fois, merci d'utiliser l’icône C dédiée au code …
 
           Si la cellule F4 est à zéro, l'erreur est donc tout à fait normale ‼
           Avant de poursuivre, tu dois vérifier que sa valeur est supérieure à zéro …
 
           Et si la cellule n'est pas dans la feuille active, il faut donc précéder la cellule par sa feuille, bref respecter la hiérarchie d'Excel …
 

n°2203273
Bebafo
Posté le 17-09-2013 à 12:00:20  profilanswer
 

Marc L a écrit :

 
           Si la cellule F4 est à zéro, l'erreur est donc tout à fait normale ‼
 


Ce pourquoi j'ai changé de syntaxe pour régler ce problème.
Maintenant dans le dernier exemple cité, j'ai bien ImpLine = 51
 
Et pourtant j'ai toujours le message d'erreur 1004.
Je ne comprends pas pourquoi.

n°2203283
MaybeEijOr​Not
but someone at least
Posté le 17-09-2013 à 13:39:59  profilanswer
 

Target c'est quoi? Je ne connais pas cet objet, ce n'est pas plutôt une variable à laquelle tu es censé affecter une plage de cellules?
Déjà la première erreur vient de là, si tu n'as définit nulle part ce qu'est Target, mon aide vba ne connait pas cet objet.
 
Après tu peux spécifier quelle feuille tu utilises avec Worksheet("Nom de ta feuille" ).
 
ex : ImpLine = Worksheet("blablabla" ).Cells(4, 3).value
 
Déjà teste ça :
 

Code :
  1. Dim ImpLine As Integer
  2. ImpLine = Worksheet("Results" ).Cells(4, 3).value
  3. Worksheets("Results" ).Range(Cells(1, 8):Cells(ImpLine, 23)).Select
  4. Selection.PrintOut(Copies:=1, Collate:=True)


n°2203291
Bebafo
Posté le 17-09-2013 à 14:50:28  profilanswer
 

Bizarrement, ça ne marche pas. erreur de syntaxe. (il aime pas le ":" )
 
donc j'ai fait  

Code :
  1. ImpLine = Worksheet("Results" ).Cells(4, 3).value
  2. Worksheets("Results" ).Range(Cells(1, 8) & ":" & Cells(ImpLine, 23)).Select
  3. Selection.PrintOut(Copies:=1, Collate:=True)


Mais ça marche pas non plus.
encore plus bizarrement dans ce cas :
la valeur de ImpLine est bonne.
Par contre les valeurs données pour Cells(1, 8) et Cells(ImpLine, 23) correspondent à celles de la feuille Dalles
au lieu de Results.
 
 :heink:  :heink:  
 
PS : Target, ce n'est pas moi qui l'ai créé, c'est l'enregistreur de Macro, qui a donné le code basique que j'ai tenté d'analyser et modifier par la suite, mais cette partie là du code n'a pas été touchée :

Code :
  1. Private Sub Worksheet_SelectionChange(ByVal Target As Range)

n°2203295
Marc L
Posté le 17-09-2013 à 15:02:50  profilanswer
 

 
           Je confirme pour  Target  tout à fait normal dans un évènement de classeur ou de feuille.
 
           Au passage, souvent dans l'aide du message d'erreur la solution s'y trouve …
 
           La référence seule à une cellule correspond uniquement à une cellule de la feuille active,
           et comme elle ne s'y trouve pas cela déclenche donc une erreur !
 
           Comme la majorité copie du net sans se donner la peine de comprendre, comme le code est partiel,
           j'aimerais bien connaître la globalité de la problématique et la raison d'utiliser un évènement,
           une vision d'ensemble en quelque sorte …
 

n°2203300
Bebafo
Posté le 17-09-2013 à 15:31:13  profilanswer
 

Marc L a écrit :

 
           Au passage, souvent dans l'aide du message d'erreur la solution s'y trouve …


Ce n'était pas le cas en l'occurrence. Rien d'explicite en tout cas.
 

Marc L a écrit :


           Comme la majorité copie du net sans se donner la peine de comprendre,  
 


Ce qui n'est pas mon cas :)
 
J'avais bien le Worksheets("Results" ).Activate, mais placé avant le Dim ImpLine...
bizarrement il aimait pas.
 
En tout cas, avec beaucoup de difficultés (et d'essais) mais maintenant ça marche !
Je touche plus à rien !
 
Merci bien. :jap:  
 
Le code qui marche, donc :

Code :
  1. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  2. If Target.Address = "$BO$20:$BO$21" Then
  3.     Dim ImpLine As Integer
  4.    
  5.     ImpLine = Worksheets("Results" ).Cells(4, 6).Value
  6.     Worksheets("Results" ).Activate
  7.     Worksheets("Results" ).Range("H1:W" & ImpLine).Select
  8.     Selection.PrintOut Copies:=1, Collate:=True
  9.     Sheets("Dalles" ).Select
  10.     Range("BN16" ).Select
  11. End If
  12. End Sub

mood
Publicité
Posté le 17-09-2013 à 15:31:13  profilanswer
 

n°2203302
MaybeEijOr​Not
but someone at least
Posté le 17-09-2013 à 15:45:02  profilanswer
 

Bebafo a écrit :

Bizarrement, ça ne marche pas. erreur de syntaxe. (il aime pas le ":" )


 
Hum ce doit être une virgule qu'il faut utiliser.
 
 
Autrement pour le target c'est ok, mais il n'a de sens qu'avec la ligne que tu as omis car autrement il n'y a pas d'écoute d'évènement.
 
 
Tu peux virer ces lignes :
 

Code :
  1. Sheets("Dalles" ).Select
  2.     Range("BN16" ).Select

n°2203304
Marc L
Posté le 17-09-2013 à 15:52:44  profilanswer
 

 
           Oui c'était bien la virgule …
 
           Bebafo, ton code fonctionne car tu as pensé à te placer enfin sur la bonne feuille
           (comme les infos du message d'erreur l'entendaient, cela viendra avec l'expérience) …
 
           Maintenant c'est dommage de jouer à coups d'affreux ralentisseurs  Activate  &  Select  souvent sources d'ennuis
           au lieu de directement travailler proprement avec les objets comme par exemple ce code équivalent au tien :
 

Code :
  1. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  2.     If Target.Address = "$BO$20:$BO$21" Then
  3.         With Worksheets("Results" )
  4.             .Range("H1:W" & .[F4].Value).PrintOut
  5.         End With
  6.     End If
  7. End Sub


            Grâce à la ligne n°3, la ligne n°4 voulant dire
 
            Worksheets("Results" ).Range("H1:W" & Worksheets("Results" ).[F4].Value).PrintOut  …


Message édité par Marc L le 17-09-2013 à 15:59:22
n°2317071
marchw
Posté le 18-06-2018 à 13:52:32  profilanswer
 

Bonjour,
 
J'ai mis le ci-dessus dans mon fichier (dans ThisWorkbook) mais ça fait rien.
Ma plage est A1:H400 alors j'ai remplacé "H1:W" par "A1:H".
"Target.Address", ça correspond à quoi ?
 
Merci.

n°2317076
MaybeEijOr​Not
but someone at least
Posté le 18-06-2018 à 15:25:25  profilanswer
 

"Target.Adress" est lié à l'évènement "Worksheet_SelectionChange" : https://silkyroad.developpez.com/VB [...] lle/#LII-I
 
La question est plutôt, que cherches-tu à faire ? Le code utilisé ici était très spécifique, et personnellement je ne comprends toujours pas pourquoi la personne utilisait cet évènement.


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°2317078
marchw
Posté le 18-06-2018 à 16:08:21  profilanswer
 

En résumé, voilà ma situation.
J'ai 30 onglets :
- le premier affiche une base de données sur des ventes (vendeur, client, CA, mois...)
- autres onglets correspondent à du texte et des tableaux de synthèse
- le reste correspond à un onglet par vendeur. Ils ont tous la même mise en forme
Chacun de ces onglets a un nombre de lignes différent et en plus, il varie d'un mois à l'autre.
Du coup, je souhaite définir une zone d'impression dynamique. Autant les colonnes ne bougent pas, autant la dernière ligne de la zone d'impression n'est jamais la même.

n°2317086
MaybeEijOr​Not
but someone at least
Posté le 18-06-2018 à 17:38:33  profilanswer
 

Zone définie par quoi ?


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°2317135
marchw
Posté le 20-06-2018 à 08:54:21  profilanswer
 

Pas compris ^^

n°2317144
MaybeEijOr​Not
but someone at least
Posté le 20-06-2018 à 11:24:37  profilanswer
 

Tes zones d'impression sont délimitées par quels facteurs ?


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°2317153
marchw
Posté le 20-06-2018 à 14:02:09  profilanswer
 

J'ai des formules sur 400 lignes mais seulement une partie affiche quelque chose (selon les cas et selon les mois).
Les délimitations sont donc fixées par la dernière ligne où quelque chose apparaît.

n°2317155
MaybeEijOr​Not
but someone at least
Posté le 20-06-2018 à 14:40:44  profilanswer
 

Si tu n'as pas de ligne ou colonne vide dans ta zone à imprimer tu peux juste utiliser :

Code :
  1. Range("A1" ).CurrentRegion.PrintOut


 
En remplaçant A1 par la cellule en haut à gauche de ta zone d'impression.
Après faut voir quels onglets tu dois imprimer, quelles options d'impression, si faut utiliser un évènement pour déclencher l'impression.
 
Là tu dis juste que tu veux imprimer des zones d'impression de tailles non définies...
Dons je ne peux pas plus t'en dire qu'il faut utiliser PrintOut pour imprimer et que CurrentRegion permet de définir la plus grande possible sans ligne ou colonne vide.


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°2317158
marchw
Posté le 20-06-2018 à 16:06:59  profilanswer
 

OK, merci.
Je vais regarder ça pour commencer.

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [EXCEL] Impression d'une zone variable (problème de Range) [Résolu]

 

Sujets relatifs
Ouvrir un fichier Excel (vba)code du problème en c++
[Excel] Copier le contenu de plusieurs fichier Excel dans un seul[ Excel & Seven ] Perte variable
Problème lors de la modification des droits NTFS par vbaProblème avec Typeahead
Je souhaite une macro qui ouvre un fichier excel. Résolu Merci[Ada][Débutant POO] Problème d'héritage à l'instantiation d'un paquet
Problème avec jdk 1.8 
Plus de sujets relatifs à : [EXCEL] Impression d'une zone variable (problème de Range) [Résolu]


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR