Equivalent Apps script de Application.DisplayAlerts VBA ?

Bonjour,
Je suis novice et autodidacte en apps script et je viens du VBA ;-)
J'ai écris un script permettant de créer automatiquement des onglets et de les nommer selon une valeur de cellule.
Quand le nom n'existe pas, pas de soucis tout fonctionne. En revanche, quand le nom existe déjà, une alerte apparait :
Exception: Une feuille nommée "XX" existe déjà. Veuillez saisir un autre nom.
J'aimerais déprogrammer cette alerte afin que mon script continue sur le try/catch suivant. En VBA il s'agit de la procédure Application.DisplayAlerts=false.
Connaissez vous un équivalent en Apps script ? ma recherche google n'ayant rien donnée.
Merci

function Creer_Onglet_Mensuel() {

var SS = SpreadsheetApp.getActiveSpreadsheet();
var MeF = SS.getSheetByName("Mise_en_forme");
var Name = MeF.getRange("B1").getValue();
var sheetNameExist = '';

if (Name != sheetNameExist) {
var newSheet = SS.insertSheet(Name);
var ts = SS.getSheetByName(Name);
MeF.getRange('A1:Z7499').copyTo(ts.getRange('A1'), {formatOnly:true}); 
MeF.getRange('A1:Z7499').copyTo(ts.getRange('A1'), {contentsOnly:true});
newSheet.setRowHeight(1, 480); 
}
// jusque là, tout fonctionne

if (Name = sheetNameExist) {
try {
alert("L'onglet existe deja, voulez-vous le remplacer ?"); // à développer ui.alert
} catch(err) {
alert("Une erreur a été rencontrée")
}
}
SS.moveActiveSheet(SS.getNumSheets());
}

Bonjour et bienvenue

Quelques recommandations :

  • sur le forum, utilise la balise </>, ton code sera plus lisible et restera indenté
  • dans les scripts, utilise une minuscule pour tes données, ce n'est pas obligatoire mais préférable, en plus tu seras en gris si la variable n'est pas utilisée, ce qui permet de détecter des erreurs (orthographe)

Avant de répondre, que signifie la variable sheetNameExist ? car si tu l'initialise à '', alors la première condition sera toujours vérifiée.

N'hésite pas à mettre un lien vers un fichier test.

si tu veux tester l'existence d'une feuille/onglet et la créer essaie ceci

var ss = SpreadsheetApp.getActiveSpreadsheet();
var onglet = ss.getSheetByName('nom_de_l_onglet');
if (!onglet) {
   ss.insertSheet('nom_de_l_onglet');
}

onglet est null si la feuille n'existe pas

Merci pour tes réponses et tes recommandations que je vais appliquer.

La variable sheetNameExist='' n'est pas toujours vérifiée car il faut parfois que je recrée un onglet dont le nom existe déjà (mois de l'année) afin de remplacer des données déjà saisies (ou plutôt proposer à l'utilisateur de les remplacer ou non).

Comment empêcher en apps script le déclenchement d'alertes type erreur ?

Bonjour,

Il y a un truc que je ne comprends pas bien ! Dans le cas que tu cites, avec excel, le Application.DisplayAlerts=false ne fonctionnera pas car il s'agit d'une erreur bloquante et non d'une alerte/avertissement comme dans le cas de la suppression d'une feuille (qui n'est pas la dernière).

Quand le nom n'existe pas, pas de soucis tout fonctionne. En revanche, quand le nom existe déjà, une alerte apparait :
Exception: Une feuille nommée "XX" existe déjà.

En VBA il s'agit de la procédure Application.DisplayAlerts=false.

et c'est pour cela que face à ce problème je proposais de tester (comme dans excel) l'existence d'une feuille de même nom.

Bonjour,
(Désolée pour mes réponses tardives, j'ai 11H de décalage horaire avec la France)

Mon code VBA est le suivant, il fonctionne bien pour désactiver les alertes

Sub Creer_Onglet_Mensuel()

Dim Ws As Worksheet
Dim Rep As String
nom = Worksheets("Mise_en_forme").Range("A1")
For Each Ws In Worksheets
If Ws.Name = nom Then
Application.DisplayAlerts = False
Rep = MsgBox("L'onglet " & nom & " existe déja. Voulez vous le remplacer ?", vbQuestion + vbYesNo)
If Rep = vbYes Then
Ws.Delete
Else
Exit Sub
End If
Application.DisplayAlerts = True
Exit For
End If
Next Ws
Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = nom
Worksheets("Mise_en_forme").Cells.Copy
Worksheets(Worksheets.Count).Range("A1").PasteSpecial Paste:=xlValues
Worksheets(Worksheets.Count).Range("A1").PasteSpecial Paste:=xlPasteFormats
Application.CutCopyMode = False
End Sub

Quelqu'un m'a aidé à réécrire le script en créant un tableau qui récupère les noms des onglets et ça semble fonctionner correctement : il n'y a plus d'alerte bloquante. J'avoue ne pas comprendre pourquoi mais bon, mon problème est résolu !

ça fait quand même un script bien compliqué pour un VBA tout simple ;-)

function Creer_Onglet_Mensuel() {

var SS = SpreadsheetApp.getActiveSpreadsheet();
var MeF = SS.getSheetByName("Mise_en_forme");
var Name = MeF.getRange("B1").getValue();
var nomOngletsExistants = [];
var sheets = SS.getSheets();

for (var i = 0; i < sheets.length; i++) {
var sheet = sheets[i];
nomOngletsExistants.push(sheet.getName());
}

if (nomOngletsExistants.indexOf(Name) == -1) {
var newSheet = SS.insertSheet(Name);
MeF.getDataRange().copyTo(newSheet.getRange('A1'), { formatOnly: true });
MeF.getDataRange().copyTo(newSheet.getRange('A1'), { contentsOnly: true });
newSheet.setRowHeight(1, 480);
}

else {
var response = Browser.msgBox("L'onglet existe deja", "Faut t'il remplacer l'onglet " + Name + "?", Browser.Buttons.YES_NO);

if (response == 'yes') {
var sheetExistante = SS.getSheetByName(Name);
sheetExistante.clear();
MeF.getDataRange().copyTo(sheetExistante.getRange('A1'), { formatOnly: true });
MeF.getDataRange().copyTo(sheetExistante.getRange('A1'), { contentsOnly: true });
Browser.msgBox("L'onglet existait et a été remplacé");
}
else {
Browser.msgBox("Ok, je n'écrase pas");
}
}
SS.moveActiveSheet(SS.getNumSheets());
}

Encore merci pour ton aide.

Rechercher des sujets similaires à "equivalent apps script application displayalerts vba"