Impression d'une zone variable (problème de Range) [Résolu] [EXCEL] - VB/VBA/VBS - Programmation
Marsh Posté le 16-09-2013 à 19:16:37
Tu as testé avec cette synthaxe?
Citation : expression.PrintOut(De, À, Exemplaires, Aperçu, ImprimanteActive, ImprimerDansFichier, Assembler, ImprDsNomFichier) |
+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.
Marsh Posté le 16-09-2013 à 19:17:05
Bonjour,
Bebafo a écrit : Range("H1:W" & F4).Select |
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" ) …
Marsh Posté le 17-09-2013 à 11:39:21
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
Code :
|
(Au cas où il y aurait un doute, je suis évidemment Ultra débutant...)
Marsh Posté le 17-09-2013 à 11:51:48
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 …
Marsh Posté le 17-09-2013 à 12:00:20
Marc L a écrit : |
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.
Marsh Posté le 17-09-2013 à 13:39:59
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 :
|
Marsh Posté le 17-09-2013 à 14:50:28
Bizarrement, ça ne marche pas. erreur de syntaxe. (il aime pas le ":" )
donc j'ai fait
Code :
|
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.
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 :
|
Marsh Posté le 17-09-2013 à 15:02:50
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 …
Marsh Posté le 17-09-2013 à 15:31:13
Marc L a écrit : |
Ce n'était pas le cas en l'occurrence. Rien d'explicite en tout cas.
Marc L a écrit : |
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.
Le code qui marche, donc :
Code :
|
Marsh Posté le 17-09-2013 à 15:45:02
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 :
|
Marsh Posté le 17-09-2013 à 15:52:44
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 :
|
Grâce à la ligne n°3, la ligne n°4 voulant dire
Worksheets("Results" ).Range("H1:W" & Worksheets("Results" ).[F4].Value).PrintOut …
Marsh Posté le 18-06-2018 à 13:52:32
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.
Marsh Posté le 18-06-2018 à 15:25:25
"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.
Marsh Posté le 18-06-2018 à 16:08:21
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.
Marsh Posté le 18-06-2018 à 17:38:33
Zone définie par quoi ?
Marsh Posté le 20-06-2018 à 11:24:37
Tes zones d'impression sont délimitées par quels facteurs ?
Marsh Posté le 20-06-2018 à 14:02:09
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.
Marsh Posté le 20-06-2018 à 14:40:44
Si tu n'as pas de ligne ou colonne vide dans ta zone à imprimer tu peux juste utiliser :
Code :
|
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.
Marsh Posté le 16-09-2013 à 18:19:20
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
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
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 édité par Bebafo le 17-09-2013 à 15:32:05