Google Sheets: masquer des colonnes antérieures à une date définie
Bonjour à tous,
J'ai une macro en VBA Excel qui fonctionne très bien et je souhaiterais la convertir de telle manière qu'elle fonctionne sur Google Sheets.
Ci dessous la macro VBA Excel et en pièce-jointe, le fichier Excel.
Private Sub CommandButton2_Click()
'Masquer toutes les colonnes indésirables
Application.ScreenUpdating = False
Dim Cel As Range
Cells.EntireColumn.Hidden = False
For Each Cel In Range("E1:XFD1")
If Cel < Range("b4").Value Then Cel.Columns.Hidden = True
Next Cel
Application.ScreenUpdating = True
Range("A1").Select
'insère l'heure actuelle dans la cellule A4
Range("A4").Select
With ActiveCell
.Value = Time
.NumberFormat = "hh:mm:ss"
.Value = .Value
End With
End Sub
Je vous remercie d'avance pour votre aide et votre soutien.
Bien cordialement.
Gaëtan.
Bonjour,
Ci-après une proposition. Je voulais optimiser en masquant toutes les colonnes d'un coup, mais je n'y arrive pas. J'ai donc repris votre boucle. Notez que l'inférieur est strict dans le if.
Bonne journée.
function masquerColonnesEtInsererHeure() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
// Masquer les colonnes indésirables
const valeurLimite = sheet.getRange("B4").getValue();
const rangeColonnes = sheet.getRange("E1:XFD1");
for (let i = 0; i < valeursColonnes.length; i++) {
if (valeursColonnes[i] < valeurLimite) {
sheet.hideColumn(sheet.getRange(1, i + 5)); // +5 car E est la 5ème colonne
}
}
// Insérer l'heure actuelle dans la cellule A4
const heureActuelle = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "HH:mm:ss");
sheet.getRange("A4").setValue(heureActuelle);
}Bonjour,
Je vous remercie pour votre réponse mais j’ai une erreur pour la ligne :
for (let i = 0; i < valeursColonnes.length; i++) {
Le journal d’éxecution m’indique:
ReferenceError: valeursColonnes is not defined
Je vous joins le fichier xlsx pour test.
Encore merci pour votre aide.
Gaetan.
Bonjour,
Excusez-moi, j'ai édité le code plusieurs fois et j'ai du faire un mauvais copié-coller. Ci-après le script corrigé.
function masquerColonnesEtInsererHeure() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
// Masquer les colonnes indésirables
const valeurLimite = sheet.getRange("B4").getValue();
const valeursColonnes = sheet.getRange("E1:XFD1").getValue();
for (let i = 0; i < valeursColonnes.length; i++) {
if (valeursColonnes[i] < valeurLimite) {
sheet.hideColumn(sheet.getRange(1, i + 5)); // +5 car E est la 5ème colonne
}
}
// Insérer l'heure actuelle dans la cellule A4
const heureActuelle = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "HH:mm:ss");
sheet.getRange("A4").setValue(heureActuelle);
}Bonjour saboh12617,
Je vous remercie pour votre expertise, votre aide et la rapidité de votre réponse.
Le code fonctionne parfaitement pour l'insertion de l'heure. Toutefois, la première partie ne fonctionne pas et je ne sais pas analyser le problème.
J'attends votre retour avec impatience et encore merci pour votre aide.
Bien à vous et bonne semaine.
Gaëtan.
Rebonjour,
J'avais testé le code uniquement sur des colonnes de A à Z. Il me semble que sur google Sheets c'est la limite. C'est pourquoi vous avez une erreur au niveau de la définition de la colonne "XFD". A vrai dire j'ai du mal à croire que votre fichier utilise autant de colonnes, ou si c'est le cas il faudrait peut etre voir à passer sur un autre logiciel ahaha.
Non plus sérieusement, si votre feuille s'arrête aussi en colonne Z, utilisez le code ci-dessous qui devrait fonctionner. Chez moi RAS.
function masquerColonnesEtInsererHeure() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getActiveSheet();
// Masquer les colonnes indésirables
const valeurLimite = sheet.getRange("B4").getValue();
const valeursColonnes = sheet.getRange("E1:Z1").getValues()[0];
for (let i = valeursColonnes.length; i > 0; i--) {
if (valeursColonnes[i] < valeurLimite) {
sheet.hideColumn(sheet.getRange(1, i + 5)); // +5 car E est la 5ème colonne
}
}
// Insérer l'heure actuelle dans la cellule A4
const heureActuelle = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "HH:mm:ss");
sheet.getRange("A4").setValue(heureActuelle);
}Bonjour,
Grand MERCI: ça fonctionne !!! Tout fonctionne, même jusqu'à la colonne EXR1.
Si je veux masquer toutes les colonnes avant aujourd'hui (10/03/2025), je saisi 11/03/2025 en B4 et mon agenda commence au 10/03/2025. Les dates antérieures sont masquées.
J'ai un peu modifié votre code pour qu'il fonctionne comme je le souhaitais, à savoir:
function masquerColonnesEtInsererHeure() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getActiveSheet();
// Masquer les colonnes indésirables
const valeurLimite = sheet.getRange("B4").getValue();
const valeursColonnes = sheet.getRange("E1:EXR1").getValues()[0];
for (let i = valeursColonnes.length; i > 0; i--) {
if (valeursColonnes[i] < valeurLimite) {
sheet.hideColumn(sheet.getRange(1, i + 4)); // +4 car D est la 4ème colonne
}
}
// Insérer l'heure actuelle dans la cellule A4
const heureActuelle = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "HH:mm:ss");
sheet.getRange("A4").setValue(heureActuelle);
}
Merci pour votre correction très rapide et votre aide à développer mon projet.
Bien à vous et bonne semaine.
Le problème est résolu et je clôture le sujet.
Gaëtan.
Merci pour votre retour, content que vous ayez pu adapter le code à votre besoin.
Pour info, j'ai utilisé Google Gemini pour me faire une "base" de traduction (que j'ai un peu révisé mais la base était fonctionnelle) de votre code VBA, pour la traduction de petites macros comme celle-ci ces outils d'IA sont assez performants. Si un jour vous avez une autre macro à "traduire" je vous passe le tuyau.
Pour clôturer le sujet :
Bonne journée