Teste tableau avant impression

G

G'Claire

Guest
, le forum​

J'ai un bouton qui me permet d'imprimer une feuille, afin de ne pas faire un aperçu, j'aurai aimé faire un test si le tableau comprenais ou non des données, donc :

Si données impression de la feuille
Si pas de données retour au menu.

Voici mon code pour l'impression :

Private Sub CommandButton12_Click()'Si clic ferme USF ajout groupe et active feuille 7 Tool_grou
Dim Impr
Unload Me
Feuil7.Activate
Impr = MsgBox("Voulez-vous imprimer la base de données Tool_grou ?", vbYesNo, "CONFIRMATION")
If Impr = vbYes _'Si Oui imprime feuille active
Then
ActiveSheet.PrintOut
Else ' Si non retour au USF ajout groupe
Feuil9.Activate
USF_AjoutGroupe.Show 0
End If
End Sub


Comment dois-je m'y prendre, sachant que mes données vont de :

B2-C2-D2 jusqu'a B100-C100-D100

Merci de votre aide, G'Claire
 
J

Jacques

Guest
Bonsoir G'Claire

avec un petit artifice :
en cellule A101 tu mets la formule "=NBVIDE(B2:D100)"
et dans ton code tu remplaces la ligne "ActiveSheet.PrintOut"
par
"If Range("A101").Value < 297 Then ActiveSheet.PrintOut"

L'impression ne s'exécutera que si au moins une cellule de la plage B2:D100 n'est pas vide

Bonne soirée
 
@

@+Thierry

Guest
BOnsoir G'Claire, re Jacques

Une autre méthode sans feu d'artifice !

Admettons une feuille avec un tableau de A à G avec des Headings, soit 7 Cellules....

Option Explicit
Sub TestPlagePrint()
Dim Plage As Range
Dim X As Integer

Set Plage = ActiveSheet.UsedRange
X = Plage.Count

MsgBox X '<= ici pour tester combien ton tableau "vierge" utilise de cellule, à supprimmer ensuite

If X > 7 Then ActiveSheet.PrintOut

End Sub

Attention cette méthode ne peut fonctionner que sur des tableaux linéaires "standard"...

Bonne Nuit
@+Thierry
 
@

@+Thierry

Guest
Petite Précision !

J'ai oublié de préciser aussi, que les formatage de cellules comptent comme
UsedRange... Ce qui limite évidemment cette méthode, que j'utilise sur pour des imports de données sur des feuilles vierges ne contenant que des entêtes.

@+Thierry
 
G

G'Claire

Guest
Salut a toutes et tous

Merci, Jacques et @Thierry


Mais plus plates ecxuses pour cette réponse tardive, mais j'était sur un spectacle depuis mercredi et je ne suis pas allez beaucoup sur le net ces derniers temps.

En faite @Thierry ce que j'essaye de faire c'est de rajouter a ton fichier USFThierrysContact, un mode impression avec un aperçu avec les données et pouvoir imprimer une feuille sans les données.

Le mode impression et aperçu cela va, mais je n'arrive pas a faire l'impression du tableau sans les données.

Je vous remerci d'avance pour votre aide

Bonne soirée, G'Claire
 
@

@+Thierry

Guest
Bonsoir G'Claire, Jacques, le Forum

Huum je ne comprends plus ???

"je n'arrive pas a faire l'impression du tableau sans les données"

Je croyais que c'était l'inverse que tu désirais ? Tester si il y avit des données ? à quoi celà sert d'imprimer un Tableau vide ???

Là je patauge !!

Bon Week End
@+Thierry
 
G

G'Claire

Guest
Resalut

Merci @Thierry de ctte réponse rapide, au départ oui je voulais un test au lancement du l'UserForm mais je pense que cela ètait plus compliquer de faire un test de tableau pour savoi si il est vide que de demader au moment de l'impression si je veux imprimer une feuille avec les données ou sans.

Le but pour moi de pouvoir avoir une feuille exempt de données, c'est de pouvoir a chaque nouvelle saison donner une feuille vierge aux présidants des écoles de danses afin qu'ils la remplisse, pour éviter de courrire aprés tout le monde afin de receuillir les coordonnées.

Voila j'espère avoir bien expliquer le pourquoi de ce choix.

Encore merci, G'Claire
 
@

@+Thierry

Guest
Re G'Claire

Ben je ne sais pas ce que tu trafiques, mais si tu as bien développé ton truc, tu devrais pouvoir sortir ton tableau sans avoir de souci particulier...

Je ne sais pas moi comment ton tableau se présente, mais tu pourrais faire une sorte de test comme ceci :

Sub TestPlageVide()
Dim Plage As Range, Cell As Range
Dim X As Integer
Dim msg As Byte

With Sheets(1)
Set Plage = Application.Union(.Range("A1"), .Range("E1"), .Range("A5:G30"), .Range("A40:G45"))
End With

For Each Cell In Plage
If Not IsEmpty(Cell) Then X = X + 1
Next

If X >= 1 Then
msg = MsgBox("Le tableau n'est pas vide, voulez vous le purger ?", vbCritical + vbYesNo, "Warning")

If msg = 6 Then
Plage.ClearContents
Sheets(1).PrintOut
Else
Sheets(1).Activate
End If
Else
Sheets(1).PrintOut
End If

End Sub

Dans le set avec la Méthode Union tu dois définir tes plages, tu as droit à 30 arguments Range...

Voilà cette fois je pense t'avoir compris ;)

Bon Déveoppement et bon Wouik Hand

@+Thierry
 
G

G'Claire

Guest
Salut le forum, @Thierry

Merci, pour ton aide.

En faite j'avais je pense deux solutions.

1) Soit faire un test a l'ouverture de l'UserForm de ma page Tool_grou pour savoir si oui ou non il y avait des données

2) Soit au moment de l'impression me demander si je veux imprimer une feuille vierge ou une feuille rempli.


En utilisant la méthode 1 :

A l'ouverture de l'UserForm un code me test si la page a des données :

Si il y a des données cela veut dire que j'ai déja rentré mes coordonées donc cela continue normalement comme tu l'a prévu

Si pas de données, cela me demande si je veux imprimer une feuille vierge

une fois le feuille imprimée cela continue comme tu l'a prévu


Si méthode 2 utilisée :

Au moment de l'impression une MsgBox me demande si je veux imprimer une feuille rempli ou une feuille vierge et dans les deux cas avec un aperçu.

Mais c'est juste pour l'impression la suppression des données car je ne veux pas purger ma feuille définitivement

Voila j'espère être plus explicit

Je te et vous remerci, G'Claire
 
@

@+Thierry

Guest
SAlut G'Claire, le Forum

Je ne sais pas comment tu fais mais tu as l'art de te noyer dans un tas de complications depuis le temps que je te croise dans ce Forum !!!

Le test que je t'ai donné fait ce que tu veux...

A Savoir :

Tester dans une plage définie par Union Range qui te permet de choisir sélectivement dans les différentes partie de ton tableau les zone qui doivent être vide/vide de celles qui contiennent des informations standards ou de mise en page du tableau....

Une fois que tu auras paramétrer dans le "Set Plage" toutes les zones qui doivent être vides... Le test fonctionnera....

Maintenant le moment où tu le lance n'a strictement aucune importance ! Tu peux le lancer quand tu veux et ton "Tool_Gourou" (lol) je m'en contre-fiche dans ce test, c'est juste la page du tableau qui doit être clairement définie ici :

With Sheets(1)
Set Plage = Application.Union(.Range("A1"), .Range("E1"), .Range("A5:G30"), .Range("A40:G45"))
End With

Ici j'utilise l'index (1) premier onglet à partir de la gauche, mais ce pourrait être
With Sheets("Mon_Bo_Tablo_Gourou_Gourou") 'mdrr

Ensuite pour les évènement que j'ai prévu, je pense que ce n'est pas difficile à modifier...

Ensuite, si tu veux conserver ta feuille avec des donnée alors il faut la copier pour purger la copie, l'imprimer et ensuite la supprimer, tu as déjà pratiquement toute la procédure pour Copy d'une feuille et la placer là où tu veux dans "Gestion_de_Ballets.xls", il ne manque que le Delete de feuille pour lequel il faut juste mettre en OFF le DisplayAlerts avant l'intruction pour ne pas être embété par Excel.

Application.DisplayAlerts = False
Sheets(X+1).Delete
Application.DisplayAlerts = True

Pour ce qui est de faire un aperçu avant impression, là il suffit de faire ceci, of course,avant de faire le Delete si tu dois l'appliquer :
With Sheets(X+1) 'si c'est la copie placée en fin d'index de feuille
.PrintPreview
.PrintOut
End With

Voilà G'claire, je pense que cette fois-ci tu as tous les éléments...

Bon Travail et bon samedi
@+Thierry
 

Statistiques des forums

Discussions
312 492
Messages
2 088 936
Membres
103 987
dernier inscrit
Doctami