Remplacer une routine VBA pour rechercher des valeurs dans une table
Bonjour,
Le fichier ci-joint montre l'enchainement des relais d'une course d'endurance par plusieurs pilotes.
Je souhaite reporter dans la colonne 6 du tableau en ligne 10, l'heure à laquelle le pilote dont le n° figure en colonne 2, l'heure de son prochain relais en fonction d'une recherche portant sur l'heure courante et son n°.
J'ai fait cela avec le code VBA suivant, mais je souhaiterais savoir comment faire sans VBA, en perdant le bénéfice de l'actualisation temps réel bien sûr:
Public IsRunning As Boolean
Sub StartStopTime()
Dim ws As Worksheet
Dim i As Long
Dim p As Long
Dim derniereColonne As Long
Set ws = Worksheets("Feuil1")
derniereColonne = ws.Cells(4, ws.Columns.Count).End(xlToLeft).Column
If IsRunning Then
IsRunning = False
Else
IsRunning = True
On Error Resume Next
Do While IsRunning
DoEvents
Feuil1.Range("A1").Value = TimeValue(Now)
For p = 1 To 5
For i = 6 To derniereColonne
If ws.Cells(4, i).Value = p And ws.Cells(6, i).Value >= ws.Cells(1, 1).Value Then
ws.Cells(9 + p, 6).Value = ws.Cells(6, i).Value
Exit For
End If
Next i
Next p
Loop
End If
End SubEn vous remerciant.
Salut !
Habituellement les IA s'en sortent bien pour faire ce genre de conversion, voici un script GAS généré à tester :
var isRunning = false;
var triggerIds = [];
function startStopTime() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var ws = ss.getSheetByName("Feuil1");
if (isRunning) {
// Arrêter l'exécution
isRunning = false;
// Supprimer tous les triggers créés
triggerIds.forEach(function(triggerId) {
var triggers = ScriptApp.getProjectTriggers();
triggers.forEach(function(trigger) {
if (trigger.getUniqueId() === triggerId) {
ScriptApp.deleteTrigger(trigger);
}
});
});
triggerIds = [];
} else {
// Démarrer l'exécution
isRunning = true;
// Créer un trigger temporel pour exécuter la fonction périodiquement
var trigger = ScriptApp.newTrigger('updateTime')
.timeBased()
.everyMinutes(1) // Ajustez la fréquence selon vos besoins
.create();
triggerIds.push(trigger.getUniqueId());
// Exécuter une première fois immédiatement
updateTime();
}
}
function updateTime() {
if (!isRunning) return;
var ss = SpreadsheetApp.getActiveSpreadsheet();
var ws = ss.getSheetByName("Feuil1");
var derniereColonne = ws.getLastColumn();
// Mettre à jour A1 avec l'heure actuelle
var now = new Date();
ws.getRange("A1").setValue(now);
var timeA1 = ws.getRange(1, 1).getValue();
// Boucles imbriquées
for (var p = 1; p <= 5; p++) {
for (var i = 6; i <= derniereColonne; i++) {
var cellValue4 = ws.getRange(4, i).getValue();
var cellValue6 = ws.getRange(6, i).getValue();
if (cellValue4 == p && cellValue6 >= timeA1) {
ws.getRange(9 + p, 6).setValue(cellValue6);
break; // Équivalent de Exit For
}
}
}
}Bonjour,
C'est ce qui j'ai fini par faire, pour voir effectivement ce que les IA arrivaient à faire et ça a été plutôt laborieux !
Magistral a été pitoyable script bourré d'erreurs s'excusant chaque fois du fait qu'effectivement office script ne supportait pas ces fonctionnalités...
ChatGPT 5 a été assez catastrophique en s'enfonçant dans la glue au fil des demandes de corrections d'un script incroyable de complexité, ne connaissant manifestement pas la syntaxe et les exigences de déclaration d'office script.
ChatGPT mini s'en est plutôt bien sorti en proposant un script simple et en répondant correctement aux demandes de corrections et d'ajouts
Merci à vous