Récupération automatique de formule si cellule laissée vide
Bonsoir à tous.
Je travaille sur un tableau (planning mensuel de plusieurs personnes) qui sera utilisé par des personnes n'entravant pas grand chose aux tableurs. Je suis absolument ignare en matière de scripts sur Sheet. Je travaillais avant sur Excel...
À la base dans mon tableau principal, chaque jour est décomposé en matin et après-midi et les deux cellules comportent des formules différentes. Les cellules peuvent être modifiées par les utilisateurs, mais s'ils veulent revenir en arrière, ils ne seront pas capables (sic...) de remettre la bonne formule dans la bonne cellule simplement avec Copier/Coller.
J'aimerais arriver à reproduire sur sheet ce que j'ai déjà sur un tableau Excel et que voici. Ces deux macros sauvegardent le contenu d'une cellule lorsqu'elle est activée et qu'elle contient une formule (copie de la formule 100 colonnes plus loin sur le tableau) puis rappellent les formules sauvegardées si la cellule est laissée vide (après "Suppr", par exemple) : (désolé pour la mise en forme)
Public Sub FormulaRescue(iWks As Integer, rCells As Range)
'
Dim rCel As Range
Dim iRow As Integer
Dim iCol As Integer
'
Application.ScreenUpdating = False
'
For Each rCel In rCells 'rCells repr_sente le tableau complet E3:T64
If rCel.HasFormula Then
iRow = rCel.Row
iCol = rCel.Column
Worksheets(iWks).Cells(iRow, iCol + 100).FormulaLocal = Worksheets(iWks).Cells(iRow, iCol).FormulaLocal
End If
Next
'
Application.ScreenUpdating = True
'
End Sub
Public Sub FormulaGenerator(iWks As Integer, rCells As Range, iFlag As Integer)
'
Dim rCel As Range
Dim iRow As Integer
Dim iCol As Integer
'
Application.EnableEvents = False
Application.ScreenUpdating = False
'
With Worksheets(iWks)
If iFlag = 1 Then 'si s_lection multiple...
If rCells.Cells(1, 1).HasFormula Then 'si la premire cellule de la s_lection est une formule....
For Each rCel In rCells 'on v_rifie toute la s_lection (en cas de nouvelle formule AUTOFILL)...
If rCel.HasFormula Then
iRow = rCel.Row
iCol = rCel.Column
.Cells(iRow, iCol + 100).FormulaLocal = .Cells(iRow, iCol).FormulaLocal 'sauvetage des nouvelles formules
End If
Next
Else
For Each rCel In rCells
If rCel = "" Then 'si les cellules de la s_lection sont vides...
iRow = rCel.Row
iCol = rCel.Column
.Cells(iRow, iCol).FormulaLocal = .Cells(iRow, iCol + 100).FormulaLocal 'les formules d'origine sont r_install_es
End If
Next
End If
Else 'si c'est une s_lection unique...
iRow = rCells.Row
iCol = rCells.Column
If rCells.HasFormula Then 'on v_rifie si c'est une nouvelle formule...
.Cells(iRow, iCol + 100).FormulaLocal = .Cells(iRow, iCol).FormulaLocal 'et dans ce cas, on la sauve
Else
If rCells.Value = "" Then .Cells(iRow, iCol).FormulaLocal = .Cells(iRow, iCol + 100).FormulaLocal 'si la cellule est vide, on restaure la formule d'origine
End If
End If
End With
'
Application.ScreenUpdating = True
Application.EnableEvents = True
'
End SubEst-ce que ce type de macro est possible sur Google Sheet ? Ou bien y-a-t'il un moyen d'arriver autrement à mes fins ?
Merci.
Bonjour,
Si votre but est d'attribuer des cellules à un tableau, sans que celles-ci puissent être supprimées, vous pouvez plus simplement, utiliser la formule =ARRAYFORMULA( elle attribue une formule à une colonne, si quelqu'un ajoute une ligne, en supprime une automatiquement, la formule est dynamique.
Non. Le tableau comporte certains automatismes. Les cellules prennent des valeurs en fonction d’autres colonnes renseignée plus loin, mais les utilisateurs ont également la possibilité de rentrer la valeur qu’ils souhaitent dans la cellule. Ce que je veux obtenir, c’est que la formule revienne toute seule dans la cellule lorsque l’utilisateur choisi de, finalement, supprimer la valeur qu’il a rentrée lui-même.
Si vous laissez une colonne disponible pour les utilisateurs, vous bloquez le reste du tableau et vous avez votre colonne résultat avec une formule =ESTVIDE( ?
Comme ça, si la cellule est vide, vous appliquez la formule voulue si elle contient une donnée, vous appliquez une autre formule ?
Non. Toutes les cellules de mon tableau contiennent une formule (une formule identique (relativement à la cellule) pour les cellules du matin et une formule pour les cellules d’après-midi. Si les utilisateurs sélectionnent une cellule de la zone contenant une formule, la macro sur Excel copie systématiquement cette formule 100 colonnes plus loin. Ensuite, si l’utilisateur donne sa propre valeur à la cellule, la macro laisse tout en l’état. Si l’utilisateur efface le contenu de la cellule, la macro refait une copie en sens inverse, de la cellule 100 colonnes plus loin vers la cellule dont le contenu vient d’être supprimé.