Excel VBA – Détection fiable de tableaux remplis / impressio

BUDGETS Messages postés 1705 Date d'inscription   Statut Membre Dernière intervention   -  
BoBot Messages postés 6423 Date d'inscription   Statut Modérateur Dernière intervention   -


Bonjour,

Je rencontre un problème technique dans un classeur Excel contenant plusieurs tableaux structurés représentant : menus midi retraite, menus journaliers, menus viandes weekend. Je précise que je ne suis pas expert en VBA : je comprends vite, mais j’ai besoin d’explications détaillées. J’ai déjà beaucoup travaillé sur ce problème, notamment avec l’assistant IA Microsoft Copilot, mais il persiste et je pense qu’un regard extérieur d’experts VBA pourrait m’aider. Objectif : imprimer uniquement les tableaux réellement remplis, c’est‑à‑dire ceux où au moins une cellule de la zone « contenu » n’est pas vide. Les tableaux vides ne doivent pas être imprimés. Aucune page blanche ne doit sortir. Chaque tableau a une structure fixe et se trouve toujours au même emplacement selon le mois. Problème : selon les fichiers (Menus 2025, Menus 2026, Menus 2026 par Menus 2025), j’observe des incohérences : des tableaux vides sont détectés comme remplis, des tableaux remplis ne sont pas détectés, les menus viandes weekend posent parfois problème, Excel imprime parfois des pages blanches malgré une zone d’impression correcte, et le comportement varie d’un fichier à l’autre alors que la structure est identique. Ce que j’ai déjà testé : CountA, boucles cellule par cellule, vérification des zones d’impression, recréation de certains tableaux, vérification des lignes/colonnes masquées, nettoyage des modules VBA, tests croisés, analyse avec Copilot. Hypothèses : espaces invisibles, résidus de formats, différences subtiles entre tableaux, zones d’impression héritées, bug Excel, ou autre cause non identifiée. Fichiers joints : je mets les trois fichiers sur TransferNow (j’utilisais auparavant Cjoint, mais il n’est plus utilisable comme avant) : [collez ici votre lien TransferNow]. Les fichiers : Menus 2025, Menus 2026, Menus 2026 par Menus 2025. Merci d’avance pour toute analyse ou piste. Je suis motivé et prêt à tester toutes vos suggestions, même si j’ai besoin qu’on m’explique les choses clairement.

Menus 2025 (mots de passe : MENUS 2025 puis encore MENUS 2025

https://www.transfernow.net/dl/20260107euQAH7L3

menus 2026 (mots de passe : menus 2026 puis encore menus 2026)

https://www.transfernow.net/dl/20260107iBQkitkb

menus 2026 par menus 2025

https://www.transfernow.net/dl/20260107sMU7Tdwz (mots de passe : menus 2026 puis encore menus 2026)


Windows / Chrome 143.0.0.0


A voir également:

1 réponse

BoBot Messages postés 6423 Date d'inscription   Statut Modérateur Dernière intervention   410
 
Bonjour !
C'est moi, Bobot, l'IA prête à vous surprendre !
Pour vérifier si un tableau est réellement vide ou non, tu peux utiliser une combinaison des fonctions WorksheetFunction.CountA et Range. SpecialCells peut être utile pour identifier les cellules non vides.

Dans l'exemple de code VBA ci-dessous, cela vérifie si le tableau "Tableau1" dans la feuille "Feuil1" est vide ou non :

```vba
Sub CheckIfTableIsEmpty()

Dim ws As Worksheet
Dim tbl As ListObject
Dim rng As Range
Dim count As Long

Set ws = ThisWorkbook.Sheets("Feuil1")
Set tbl = ws.ListObjects("Tableau1")

On Error Resume Next
Set rng = tbl.DataBodyRange.SpecialCells(xlCellTypeConstants)
On Error GoTo 0

If Not rng Is Nothing Then
count = Application.WorksheetFunction.CountA(rng)
If count > 0 Then
MsgBox "Tableau rempli"
Else
MsgBox "Tableau vide"
End If
Else
MsgBox "Tableau vide"
End If

End Sub
```
Ce code fonctionne comme suit :
1. Il définit l'objet Worksheet pour la feuille de calcul sur laquelle se trouve le tableau.
2. Il définit l'objet ListObject pour le tableau que vous voulez vérifier.
3. Il essaie de définir un objet Range pour toutes les cellules non vides du corps du tableau à l'aide de la méthode SpecialCells.
4. S'il n'y a pas d'erreur (c'est-à-dire qu'il y a des cellules non vides), il utilise la fonction CountA pour compter le nombre de ces cellules.
5. Si le compte est supérieur à 0, cela signifie que le tableau est rempli. Sinon, cela signifie qu'il est vide.
6. Si l'erreur se produit lors de la définition de l'objet Range (c'est-à-dire qu'il n'y a pas de cellules non vides), cela signifie que le tableau est vide.

Une fois que vous savez si un tableau est vide ou non, vous pouvez décider de l'imprimer ou non. Pour imprimer un tableau, vous pouvez utiliser la méthode PrintOut, comme ceci : `ws.PrintOut`

Quant aux problèmes spécifiques que tu rencontres avec certains fichiers, il est difficile de donner une réponse précise sans avoir un aperçu de ces fichiers. Je te suggèrerais d'essayer d'adapter le code ci-dessus pour qu'il réponde à tes besoins spécifiques et de voir si cela aide à résoudre le problème.

0