Google Apps Script

mais surtout essaye parfois de déplacer certaines cellules comme "valider l'inventaire" qui pourrait être colonne E plutôt que F

Salutations,

J'aimerais solliciter votre aide, je ne connais pas du tout google sheets mais je me débrouille avec le VBA.

J'ai fait un programme qui fonctionne sur excel mais je ne sais pas comment le traduire en script.

Sub CopieFeuilleManager()
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim I As Integer 'déclare la variable I (Incrément)(ligne)
Dim J As Integer 'déclare la variable J (incrément)(variable)
Dim K As Integer 'déclare la variable K (incrément)(colonne)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim TMP As Variant 'déclare la variable TMP (tableau TeMPoraire)
Dim TL() As Variant 'déclare la variable TL (Tableau des Lignes)

Set OS = Worksheets("Base de donnée") 'définit l'onglet OS
TV = OS.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
    D(Left(TV(I, 1), 1)) = "" 'alimente le dictionnaire D avec les deux premiers caractères de la donnée ligne I colonne 1 de TV
Next I 'prochaine ligne de la boucle
TMP = D.Keys 'récupère dans le tableau temporaire TMP la liste des départements du dictionnaire D sans doublons
For J = 0 To UBound(TMP) 'boucle 1 : sur tous les départements J du tableau temporaire TMP
    K = 0: Erase TL 'initialise K, efface TL
    On Error Resume Next 'gestion des erreurs (en cas d'erreur passe à la ligne suivante)
    Set OD = Worksheets(TMP(J)) 'définit l'onglet destination OD (l'onglet du département), génère une erreur si cet onglet n'existe pas
    If Err > 0 Then 'condition : si une erreur a été générée
        Err.Clear 'supprime l'erreur
        Worksheets.Add After:=Sheets(Sheets.Count) 'ajoute une onglet vierge en dernière position
        Set OD = ActiveSheet 'définit l'onglet OD
        OD.Name = TMP(J) 'nomme l'onglet OD
    End If 'fin de la condition
    On Error GoTo 0 'annule la gestion des erreurs
    OD.Cells.Clear 'efface le contenu de l'onglet OD
    OD.Range("A1").Resize(1, UBound(TV, 2)).Value = Application.Index(TV, 1) 'recopie la ligne d'en-têtes
    For I = 2 To UBound(TV, 1) 'boucle 2 : sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
        If Left(TV(I, 1), 1) = TMP(J) Then 'si les deux premiers caractères de la donnée de la boucle 2 en  colonne 1, correspondent au département J de la boucle 1
            K = K + 1 'incrémente K
            ReDim Preserve TL(1 To 11, 1 To K) 'redimensionne le tableau des lignes TL (3 lignes, K colonnes)
            TL(1, K) = TV(I, 1) 'récupère dans la ligne 1 de TL la donnée en colonne 1 de TV (=> transposition)
            TL(2, K) = TV(I, 2) 'récupère dans la ligne 2 de TL la donnée en colonne 2 de TV (=> transposition)
            TL(3, K) = TV(I, 3) 'récupère dans la ligne 3 de TL la donnée en colonne 3 de TV (=> transposition)
            TL(4, K) = TV(I, 4) 'récupère dans la ligne 1 de TL la donnée en colonne 1 de TV (=> transposition)
            TL(5, K) = TV(I, 5) 'récupère dans la ligne 2 de TL la donnée en colonne 2 de TV (=> transposition)
            TL(6, K) = TV(I, 6) 'récupère dans la ligne 3 de TL la donnée en colonne 3 de TV (=> transposition)
            TL(7, K) = TV(I, 7) 'récupère dans la ligne 1 de TL la donnée en colonne 1 de TV (=> transposition)
            TL(8, K) = TV(I, 8) 'récupère dans la ligne 2 de TL la donnée en colonne 2 de TV (=> transposition)
            TL(9, K) = TV(I, 9) 'récupère dans la ligne 3 de TL la donnée en colonne 3 de TV (=> transposition)
            TL(10, K) = TV(I, 10) 'récupère dans la ligne 1 de TL la donnée en colonne 1 de TV (=> transposition)
            TL(11, K) = TV(I, 11) 'récupère dans la ligne 1 de TL la donnée en colonne 1 de TV (=> transposition)
        End If 'fin de la condition
    Next I 'prochaine ligne de la boucle 2
    'si K est supérieure à zéro, renvoie le tableau TL transposé dans A2 redimensionnée de l'onglet OD
    If K > 0 Then OD.Range("A2").Resize(K, UBound(TV, 2)).Value = Application.Transpose(TL)
Next J 'prochain département de la boucle

End Sub

Sub ModifNoms()

 Sheets("1").Select
 Sheets("1").Name = "CHEVRIER Laurent"
 Sheets("2").Select
 Sheets("2").Name = "VILAIN Benjamin"
 Sheets("3").Select
 Sheets("3").Name = "BENETREAU François"
 Sheets("4").Select
 Sheets("4").Name = "COUTURIER Coline"
 Sheets("5").Select
 Sheets("5").Name = "DESMARE Alban"
 Sheets("6").Select
 Sheets("6").Name = "PABOT Clément"
 Sheets("7").Select
 Sheets("7").Name = "SOULAGES Thibault"
 Sheets("8").Select
 Sheets("8").Name = "Externe"
 Sheets("0").Select
 Sheets("0").Name = "Consltants Partis"

End Sub

Sub RetourN°()

 Sheets("CHEVRIER Laurent").Select
 Sheets("CHEVRIER Laurent").Name = "1"
 Sheets("VILAIN Benjamin").Select
 Sheets("VILAIN Benjamin").Name = "2"
 Sheets("BENETREAU François").Select
 Sheets("BENETREAU François").Name = "3"
 Sheets("COUTURIER Coline").Select
 Sheets("COUTURIER Coline").Name = "4"
 Sheets("DESMARE Alban").Select
 Sheets("DESMARE Alban").Name = "5"
 Sheets("PABOT Clément").Select
 Sheets("PABOT Clément").Name = "6"
 Sheets("SOULAGES Thibault").Select
 Sheets("SOULAGES Thibault").Name = "7"
 Sheets("Externe").Select
 Sheets("Externe").Name = "8"
 Sheets("Consltants Partis").Select
 Sheets("Consltants Partis").Name = "0"

End Sub

Merci de votre aide

KMH

Bonjour,

1- ouvre un nouveau sujet pour ne pas tout mélanger

2- non, cela ne se "traduit" pas car il peut y avoir des solutions autres qu'un script par exemple ... donc exprime plutôt les fonctions à réaliser et partage un document exemple anonymisé

après plusieurs essai, cela fonctionne mais nous avons un problème c'est ça efface des cellule et des colonne qui ne devant pas être effacer.

ça efface les cellules suivante : C2,D2,F2,A7,B7,C7

ça efface aussi la colonne E, a partir de ligne 11

la casse a cocher valide l'inventaire est efface aussi même après l'avoir déplacer

Curieux, car j'avais proposé les paramètres suivants

  var excl = ['Feuille 1', 'verification des vehicules', 'Grpahique1', 'validation de donnees', 'CdC']; //excluded sheets
  let zones = ['D7', 'E7', 'F7', 'G7'] // seront effacées
  let colonnes = ['F', 'H'] 
  let ligne = 11

pour tous les onglets-véhicules, la même chose

et il n'y a pas C2,D2,F2,A7,B7,C7, ni de colonne E

peux-tu partager le fichier ou donner le script ?

L'accès est refusé ! Merci de partager comme suit ... https://www.sheets-pratique.com/fr/cours/partage

https://docs.google.com/spreadsheets/d/1JbeMVTPyiV3HnutkBYSyI4Ajx-WvnKuzBJZqk7WB0_o/edit

J’Espère que ça va fonctionner maintenant car j’ai modifié les droit d’accès

Il y a des MFC à tire-larigot qui font que lorsque les données sont effacées (exemple D3) alors F2 et G2 sont en blanc sur fond blanc, idem pour les autres. Le problème vient de MFC et de l'incohérence entre la plage et la formule

image

attention, la formule est valable pour la première cellule en haut à gauche de la zone spécifiée, donc ici valable pour C1, et tu testes B2, une cellule en dessous et à gauche.

la clé de la réussite est de faire des choses simples !

Bonjour,

Je viens de faire quelque modification sur le fichier, mais je pense plus que j'ai fait des erreur au lieux de modification, car je n'est plus rien qui fonctionne.

https://docs.google.com/spreadsheets/d/18IpqnGpZfJVwlJsiquegfxydZ5UUwnk_eg3KDQPX4iE/edit?usp=sharing

Bonjour,

Restaure la version qui fonctionne et contrôle les modifications une à une quand tu les mets en place...

Cordialement,

Fil.

J’ai essayé de recopier la formule de départ et cela ne fonctionne pas

quand je clique sur exécuter, j'ai ce message d'erreur qui apparait.

image

Vas en Fichier, Historique des versions, Afficher l'historique des versions.

Choisis une date où ça fonctionnait et Restaurer cette version...

je vient de faire une restauration d'une version plus ancien et j'ai toujours le message d'erreur .

est ce que quand on fait une restauration sa restaure aussi le script?

image

Non, les scripts ne sont pas impactés par une restauration...

je panse que l'erreur est sur le script, sa doit être pour ca que je continue a avoir l'erreur.

Bonjour,

Colle ton script si tu veux qu'on y jette un coup d'œil.
Sinon, le message d'erreur que tu as précédemment collé signifie que la variable "source" serait vide, donc voit comment est fait cette variable et pourquoi elle serait vide.

Bonjour,

ci joint le scripte.

function emailOnEdit(event) {
  var feuille = event.source.getActiveSheet();
  var cellule = event.source.getActiveRange();
  if (cellule.getColumn() != 8 && cellule.getColumn() != 6) return;
  if (cellule.getValue() == 'MANQUANT' || cellule.getValue() == 'DETERIOREE') {

    // Définir les variables
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheet1 = ss.getSheetByName('feuille 1');
    var emailAddress = sheet1.getRange(2, 1).getValue();
    var subject = sheet1.getRange(2, 2).getValue();
    var message = sheet1.getRange(2, 3).getValue();

    // Envoyer le mail
    MailApp.sendEmail({ 
      to: emailAddress + ',autreadresse@gmail.com', 
      subject: subject, 
      htmlBody: message + '<b>' + tableHTMLplus(feuille.getRange(cellule.getRow(),1,1,feuille.getLastColumn())) 
    });
   }

   if (cellule.getRow() == feuille.getLastRow() && cellule.getValue() == true) {
     var ss = SpreadsheetApp.getActiveSpreadsheet();
     var sheet1 = ss.getSheetByName('feuille 1');
     var emailAddress = sheet1.getRange(2, 1).getValue();
     var subject = sheet1.getRange(2, 2).getValue();
     var message = sheet1.getRange(2, 3).getValue();
     var data = feuille.getRange('A1:H'+feuille.getLastRow()).getValues().filter(r => (r[7] ==  'MANQUANT' || r[7] == 'DETERIOREE'));
     MailApp.sendEmail({ 
      to: emailAddress + ',autreadresse@gmail.com', 
      subject: subject, 
      htmlBody: message + '<b>' + tableHTMLsimple(data) 
    });
  }
}

function tableHTMLsimple(data) {
  var tableformat = 'cellspacing="2" cellpadding="2" border="1" style="width:100%;border-collapse:collapse;border:1px solid #ccc"';
  var rows = data.map(r => '<tr><td>' + r.join('</td><td>') + '</td></tr>');
  return '<table ' + tableformat + ' >\n' + rows.join('\n') + '</table>';
}

function reInitialiser() {

  const zones = ['B3', 'C3', 'D3', 'B5', 'G5', 'D5', 'H5', 'B8', 'C8', 'D8', 'E8', 'F8', 'G8', 'H8', 'I8'] // seront effacées
  const colonnes = ['F', 'G'] // seront effacées à partie de la ...
  const ligne = 11

  const ss = SpreadsheetApp.getActiveSpreadsheet()
  const feuilles = ['Inventaire VSAV', 'Inventaire FPT', 'Inventaire VTUTP', 'Inventaire VLCDG', 'Inventaire LOTS PROMPT SECOURS', 'Inventaire LOTS DE RELEVAGE (LREL)']

  feuilles.forEach(feuille => {
    var f = ss.getSheetByName(feuille)
    var der = f.getLastRow()
    zones.forEach(z => f.getRange(z).clearContent())
    colonnes.forEach(c => f.getRange(c + ligne + ':c' + der).clearContent())
  })

}

function myFunction() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var range = sheet.getRange('G11:G266');
  var day = sheet.getRange('A1').getValue().getDay(); // Obtient le jour de la semaine de la cellule A1

  if (day === 3) { // Vérifie si c'est mercredi (3 correspond au mercredi dans la représentation des jours de la semaine)
   range.setValue('PRÉSENT');
  }

}
Rechercher des sujets similaires à "google apps script"