Publier en tant que page web avec plage de cellules variable

Ewigefrost

XLDnaute Junior
Bonjour,

je reviens à vous car j'aimerais pouvoir enregistrer automatiquement un TCD en tant que page HTML.
Pour la partie automatique c'est bon il n'y a pas de problème, par contre, le nombre de lignes de mon TCD varie, et lorsque je veux enregistrer seulement une plage de cellules, je ne peux pas demander à enregistrer une plage variable (voir boite de dialogue ci-dessous).

plage_variable.JPG

J'ai tenté de placer des xlDown dans la boite de dialogue pour le forcer à aller jusqu'à la dernière ligne non vide, mais sans surprise ça n'a pas marché.

Auriez-vous une astuce ou est-il possible de faire ça en VBA ?

Merci beaucoup d'avance !
 

Excel-lent

XLDnaute Barbatruc
Re : Publier en tant que page web avec plage de cellules variable

Bonjour et bienvenu sur le forum Ewigefrost,

Je ne connais pas cette astuce (non présente sur ma version Excel), mais à mon avis tu dois bien pouvoir le faire en VBA. Il n'y a pas de raison!

Pour cela, utilise l'enregistreur de macro ;)

Une fois le code créé, il te restera plus qu'à modifier le code pour que le numéro de ligne de la fin du tableau soit une variable qui évolue en fonction de la taille du tableau (à l'aide de fameuse astuce : "xlDown", bien que je préfère l'asctuce "xlUp").

Pourquoi je préfère "xlUp"? Car souvent les bases de données sont remplis par des opérateurs de saisie non conciencieux! Grrrr

Donc il arrive que certains champs ne soient pas renseignés. Donc avec "xlDown", ta macro ne traitera que le début de ton tableau en cas de données manquantes. Alors qu'avec "xlUp", tu es sûr de traiter la totalité des lignes. Voir même trop s'il y a un autre tableau en dessous. Mais cela est parfaitement gérable, via un petit contrôle du style : si la cellule ... ne contient pas ... c'est qu'il ne s'agit pas du bon tableau, donc ne pas traiter cette ligne est continuer son chemin.

Bonne après midi
Cordialement
 

Ewigefrost

XLDnaute Junior
Re : Publier en tant que page web avec plage de cellules variable

Bonjour et merci !

J'ai donc utilisé l'enregistreur de macro et la publication auto en html marche bien. Par contre pour le xlUp (qui est effectivement plus adapté que le xlDown ;)), je ne sais pas comment le placer dans le code (dont voici un extrait):

[...]
With ActiveWorkbook.PublishObjects.Add(xlSourceRange, _
"E:\blablabla.htm" _
, "TCD ALU", "$N$2:$W$36", xlHtmlStatic, "nomfichier", "")
.Publish (True)
.AutoRepublish = True
End With
[...]

Lorsque je remplace par ça :

[...]
With ActiveWorkbook.PublishObjects.Add(xlSourceRange, _
"E:\blablabla.htm" _
, "TCD ALU", "Range("w65536").End(xlUp)", xlHtmlStatic, "nomfichier", "")
.Publish (True)
.AutoRepublish = True
End With
[...]

Ca me met "Erreur de compilation" (sans trop de surprise, ça paraissait trop simple). Il faudrait que je définisse un nom pour cette plage variable non ? Comment je pourrais faire ça ?


Merci bien pour ta réponse te pour les prochaines réponses !
 

Excel-lent

XLDnaute Barbatruc
Re : Publier en tant que page web avec plage de cellules variable

Salut Ewigefrost,

"xlUp" fonctionne comme "xlDown"

Pour te faire une idée, il faut utiliser l'enregistreur de macro. Si tu le fait :
-> lancer l'enregistreur
-> sélectionner la dernière cellule en bas
-> remonter vers le haut jusqu'à la première cellule pleine : touche "Ctrl" + flèche vers le haut
-> arrêter l'enregistreur

Tu obtiens une macro dans ce genre :
Range("C65536").Select
Selection.End(xlUp).Select

Qui évidement peut se simplifier ainsi :
Range("C65536").End(xlUp).Select

Voir même :
[C65536].End(xlUp).Select

Bref, cette macro sélectionne la fameuse cellule. Un peu complexe, lourd et pas pratique à utiliser dans une macro. Surtout qu'en plus, si tu dois l'utiliser à chaque fois, ta macro ferra l'opération à CHAQUE fois!

C'est pourquoi, généralement on fait ainsi (utilisation d'une variable) :

-> on définit notre variable
Dim DernièreLigne as Long

-> on cherche non pas la dernière cellule mais le numéro de cette fameuse ligne
[C65536].End(xlUp).Row

Ce qui donne pour ta macro :
DernièreLigne = [C65536].End(xlUp).Row

Ainsi, maintenant au cour de ta macro, à chaque fois que tu auras besoin de ce numéro de ligne, tu auras juste à écrire : DernièreLigne, chose plus simple, plus facile à écrire et intégrer dans ton code, plus rapide à exécuter pour Excel.

Bref, concrétement, dans ta macro cela donnerais ceci (à tester) :
Dim DernièreLigne as Long
DernièreLigne = [N65536].End(xlUp).Row
[...]
With ActiveWorkbook.PublishObjects.Add(xlSourceRange, _
"E:\blablabla.htm" _
, "TCD ALU", "$N$2:$W$" & DernièreLigne, xlHtmlStatic, "nomfichier", "")
.Publish (True)
.AutoRepublish = True
End With
[...]

Astuces complémentaires :
1/ Pour définir un nom de variable, il faut que le nom soit parlant. Comme tu n'as pas le droit d'utiliser d'espace, tu colle les mots, met une majuscule à la première lettre de chaque mot. Les gens qui font des "page web", par habitude, ne mettrons pas d'accent (ni de majuscule), mais pour Excel, pas de soucis, il gère cela très bien.
2/ Comme tu peux le voir, j'ai mis le chiffre 65536 comme dernier numéro de ligne, c'est parce que j'utilise la version 2003 d'excel et que cette dernière compte 65536 lignes. Par contre, si tu utilise Excel 2007, il faut savoir qu'il posséde 1 048 576 lignes. Donc dans ce cas il convient de remplacer 65536 par 1048576 ;)
3/ j'ai utilisé la colonne N : [N65536] au hasard, mais j'aurais pu aussi très bien utilisé dans ton cas de figure : "N" ou "O" ou ... ou "W", puisque toutes ces colonnes font partie de ton tableau. L'idéal c'est de choisir LA colonne où tu es sûr qu'il y aura toujours quelque chose de renseigné (ne connaissant pas ton tableau, tu es le seul à le savoir).

Bonne journée
A+

PS. : si j'ai été un peu nébuleux sur un point, n'hésite pas.
 
Dernière édition:

Ewigefrost

XLDnaute Junior
Re : Publier en tant que page web avec plage de cellules variable

Après un gros bug du navigateur sur ma page HTML qui m'a coûté une demi-journée (je pensais que le problème venait d'Excel), tout fonctionne maintenant bien !
Un grand merci à toi Excel-lent pour tes posts rigoureux et très utiles !

Bonne journée.
 

Discussions similaires

Statistiques des forums

Discussions
312 676
Messages
2 090 803
Membres
104 670
dernier inscrit
Djnic30