Google sheet fonction if : Tester le remplissage d'une cellule en fonction d'une autre cellule (remplie ou pas)

Le problème exposé dans ce sujet a été résolu.

Bonjour, J’ai 2 cellules : J18 et L18. Je voudrais afficher un message si la cellule J18 est vide alors que celle de L18 est remplie. J’ai écrit un code qui fonctionne. TROP BIEN !! il se déclenche parfaitement dans le cas ci-dessus, mais aussi lors du remplissage d’autres cellules. Je ne comprends pas pourquoi. Le message devrait s’afficher uniquement après le test de ces deux cellules. Ci dessous mon code. Merci de votre aide.

function onEdit(e) {
  var Document = SpreadsheetApp.getActive();
  var Feuille = Document.getActiveSheet();
  var CelluleJ18 = Feuille.getRange("J18");
  var CelluleL18 = Feuille.getRange("L18");
  var valeurCelluleJ18 = CelluleJ18.getValue();
  var valeurCelluleL18 = CelluleL18.getValue();
  if (valeurCelluleJ18 >="" & valeurCelluleL18 ==''){
Browser.msgBox("Remplir la cellule L18 en fonction de : "+ valeurCelluleJ18)};
}
+0 -0

Bonjour

onEdit s’exécute dès que tu fais une modification sur la feuille (peut importe sur quelle cellule)

si tu veux avoir le message uniquement lorsque tu changes la valeur d’une cellule particulière (J18 si j’ai bien compris) alors il faut d’abord regarder si la cellule active correspond

PS: merci de mettre le code dans un bloc adapté : https://zestedesavoir.com/tutoriels/249/rediger-sur-zds/#6–4780_code

+0 -0

Il faut suivre le lien ;)

CelluleActive = Feuille.getActiveRange() 

getActiveRange retourne le range de la cellule qu’on sélectionne. Tu peux voir dans la documentation que la classe range a plusieurs méthodes intéressantes : https://developers.google.com/apps-script/reference/spreadsheet/range?hl=fr

Notamment getA1Notation() (ou getColumn() et getRow si tu préfères la notation cells(row, column))

Suffit alors de comparer aux coordonnées de la cellule que tu souhaites et d’appliquer le code si il y a correspondance.

Il va falloir que tu m’aides à t’aider car en l’état, je ne sais même pas qu’est ce qui pose problème: quelles étapes n’arrive tu pas à faire ?

C’est le code le problème? Pas de soucis, c’est quoi la logique en français ? Qu’a tu compris des fonctions que j’ai listées ?

+0 -0

Pas grand chose !! J’ai réussi à obtenir le range de la cellule active :

   var Document = SpreadsheetApp.getActive();
  var Feuille = Document.getActiveSheet();
  var CelluleActive = Feuille.getActiveRange()
  var CelluleJ18 = Feuille.getRange("J18");
  var CelluleL18 = Feuille.getRange("L18");
  var valeurCelluleActive = CelluleActive.getValue()
  var valeurCelluleJ18 = CelluleJ18.getValue();
  var valeurCelluleL18 = CelluleL18.getValue();
  const cellule = SpreadsheetApp.getActiveSheet().getRange(17,9);
  const adresse = CelluleActive.getA1Notation();
  **const adresseJ18 = CelluleJ18.getA1Notation;  **
Browser.msgBox(adresse);
**Browser.msgBox(adresseJ18)**
}```
Les lignes ** ne fonctionne pas. Du coup, je ne sais pas comment comparer les 2 cellules.  
Voilà. Mon niveau de code est très bas..
 :( 

Pas de panique, il faut y aller étape par étape et t’assurer de comprendre chacune des lignes que tu écris

Reprenons le code que tu as proposé:

var Document = SpreadsheetApp.getActive();
var Feuille = Document.getActiveSheet();
var CelluleActive = Feuille.getActiveRange()
var CelluleJ18 = Feuille.getRange("J18");
var CelluleL18 = Feuille.getRange("L18");
var valeurCelluleActive = CelluleActive.getValue()
var valeurCelluleJ18 = CelluleJ18.getValue();
var valeurCelluleL18 = CelluleL18.getValue();

Jusqu’ici tout va bien. Tu as CelluleJ18 et CelluleL18 qui sont les Range (un Range est "zone" => une ou plusieurs cellules) des cellules qui t’intéresse. Tu as aussi le range de la cellule active via la variable CelluleActive
les variables valeurCelluleActive, valeurCelluleJ18 et valeurCelluleL18 contiennent les valeurs des cellules ciblées.

const cellule = SpreadsheetApp.getActiveSheet().getRange(17,9);

Ici tu prends le Range de la cellule I17 (getRange(17, 9) correspond à la ligne 17, colonne 9 (donc I)). C’est ce que tu voulais faire ? si oui, pourquoi ?

const adresse = CelluleActive.getA1Notation();
const adresseJ18 = CelluleJ18.getA1Notation;  
Browser.msgBox(adresse);
Browser.msgBox(adresseJ18)

Que renvoie les deux dernière lignes ? Comment comparer ces 2 informations ?

+0 -0

Ok
je progresse !!
je fais ça :

Browser.msgBox (adresse);
  Browser.msgBox (adresseJ18);
  if (adresse == adresseJ18) {Browser.msgBox("Identiques")} else { Browser.msgBox ("Pas identique")}```
Mais j'ai à nouveau une erreur  
function () { [native code] }  
Sur l'affichage de adresseJ18

const adresseJ18 = CelluleJ18.getA1Notation;

Source:DonKnacki

J’ai repris ton code sans vérifier en détail mais ici on ne fait pas l’appel de la fonction. J’ignore si c’est permis (en python ça l’est)

Bref, il faut mettre les parenthèses pour appeler la fonction

const adresseJ18 = CelluleJ18.getA1Notation();
+0 -0

Oui j’ai fini par voir mon oubli !!
Alors maintenant cela fonctionne
J’ai maintenant un challenge supplémentaire :
il faut que je transpose ce code pour 10 lignes
Je pense qu’il faut faire une boucle sur le range
Donc au lieu de 18, c’est une variable à mettre en place
Encore un défi que je ne sais pas faire
Merci de ton aide précieuse et de ta patience
:)

Pour le coup, j’utiliserai plutôt getColumn et getRow et je comparai les indices

Si (min lignes de cellules cibles <  ligne de cellule active < max lignes de cellules cibles) 
et (min colonnes de cellules cibles <  colonne de cellule active < max colonnes de cellules cibles)
+0 -0

Merci !
je viens de me rendre compte que mon test si la cellule L18 est vide et J18 est pleine ne fonctionne pas

if (valeurCelluleL18=="") {
if (valeurCelluleJ18 >=""){Browser.msgBox("Remplir")} else {}
};
```
J'ai cru que c'était l'imbrication du test if (valeurCelluleJ18 >="" & valeurCelluleL18 =='')  
Mais ce n'est pas le cas  
Comprends pas  

Ok
J’ai trouvé mon erreur !
Je m’attaque à la boucle
Voici mon code
Mais cela tourne sans s’arrêter
Et je ne trouve pas les lignes où les cellules Li sont vides par rapport aux cellules Ji

function onEdit(e) {
  var Document = SpreadsheetApp.getActive();
  var Feuille = Document.getActiveSheet();
  var CelluleActive = Feuille.getActiveRange()
  var valeurCelluleActive = CelluleActive.getValue();
  var adresse = CelluleActive.getA1Notation();
  for (var i =18; i =20; i++) {
    var CelluleJi = Feuille.getRange(i,10)
    var CelluleLi = Feuille.getRange(i,12)
    var valeurCelluleJi = CelluleJi.getValue();
    var valeurCelluleLi = CelluleLi.getValue();
    var adresseLi = CelluleLi.getA1Notation();
    if (adresse !== adresseLi){
      if (valeurCelluleLi =="") {
        if (valeurCelluleJi !==""){Browser.msgBox("Remplir")} else {}
       };
    };
  }
Browser.msgBox ("fin");
};
 

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte