Conversion VBA to sheets

Bonjour à tous !

Je suis désolé pour ce qui va suivre parce que je pense pas être le premier à poser la question :

Existe-il un outil en ligne permettant de convertir une maccro vba en script pour sheets.

J'ai une simple macro et j'aimerai pouvoir executer le code sur sheets mais bien sûr il ne fonctionne pas...

Est ce que quelqu'un peut m'aider ? y a t'il un outil en ligne permettant de traduire moi même le code ?

Si quelqu'un peut m'aider je lui serait très reconnaissant !

Function feuille_existe(nom)
feuille_existe = False
On Error Resume Next
Set s = Sheets(nom)
If Err.Number = 0 Then feuille_existe = True
On Error GoTo 0
End Function

Sub ajouter()

Dim nom As String, c As Range

For Each c In Sheets("ref").Range("A2:A" & Sheets("ref").Range("A" & Rows.Count).End(xlUp).Row)
nom = c.Value
If Not feuille_existe(nom) And nom <> "" Then
Sheets("base").Copy after:=Sheets(Sheets.Count)
ActiveSheet.Name = nom
Range("G2") = nom
Range("F4") = c.Offset(0, 1).Value
Range("H26") = c.Offset(0, 2).Value
Range("E9") = c.Offset(0, 3).Value


End If
Next c

End Sub

Sub Supp()
For Each i In Sheets
On Error Resume Next
i.Visible = True
Next
Application.DisplayAlerts = False
Dim W As Worksheet
For Each W In ActiveWorkbook.Worksheets
If W.Name = "base" Or W.Name = "ref" Then
Else: W.Delete
End If
Next W
Application.DisplayAlerts = True
End Sub

Sub Supprimerfeuilleactive()

Application.DisplayAlerts = False
ActiveSheet.Delete
Application.DisplayAlerts = True
End Sub

Bonjour et bienvenue,

Non , même si un tel outil de conversion existait et je ne pense pas, ce ne serait pas une solution

  • d'abord parce que les langages sont différents : le VBA est un langage propriétaire microsoft, alors google sheets et app script utilise un langage largement issu et commun avec javascript, plus universel à mon sens
  • ensuite parce que dans pas mal de cas, on peut se passer avec GSheets d'un script (exemple : compiler des fichiers ou des onglets)

Il faudrait que tu mettes un lien vers une copie simplifiée de ton projet https://www.sheets-pratique.com/fr/cours/partage

et que tu exprimes en quelques mots ton besoin, nous sommes prêts à t'aider rapidement.

je me souviens du reste avoir créé un script pour la création de nouveaux onglets ..

function nouvelleFeuille(nom) {
  var document = SpreadsheetApp.getActiveSpreadsheet();
  var f1 = document.getSheetByName("Original");
  var f2 = document.getSheetByName(nom);
  if (f2 != null) {
    document.deleteSheet(f2);
  }
  f2 = document.insertSheet();
  f2.setName(nom);
  var plage = f1.getRange("A1:Z2");
  plage.copyTo(f2.getRange("A1"), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
  f2.getRange('A1').setValue(nom);
};

et on pourrait partir de celui-ci pour répondre à ton problème spécifique.

Bonjour et merci !

Merci premièrement d'avoir répondu c'est super sympa de ta part et j'avoue que le langage de google Sheets je le comprend pas du tout...

Je vais essayer de m'expliquer comme il le faut pour que ce soit plus facile à comprendre.

Le code VBA me permettait de générer des feuilles de routes pour des bénévoles à partir d'un onglet réf et j'aimerai pouvoir faire de même sur Google Sheets.

L'onglet Base est le modèle de feuille de route à copier et à compléter, le dossier réf lui contiendra les données des bénévoles permettant de compléter le modèle dupliquer (noms, téléphone, régime alimentaire et poste occupé).

J'aimerai à partir d'une macro que les feuilles de route soient générer et compléter automatiquement à partir des données de l'onglet Réf, le nom ira en cellule G2, le n° de téléphone en F4, la mission en F7 et le régime alimentaire en H26 et pour ajouter à ça que chaque onglet porte le nom du bénévole à qui la feuille est attribué en soit la cellule G2. J'avais une autre macro permettant de supprimer toutes les feuilles et la feuille active également mais j'ai pas envie d'en demander beaucoup trouver comment les dupliquer serait déjà un énorme service.

J'aimerai pouvoir comprendre le langage et le script entrer, si il est possible d'annoter et de m'expliquer ce qui est codé ce serait super gentil mais encore une fois je ne veux pas trop profiter et je pense que ça restera compréhensible avec un peu de creusage de méninge.

Voilà le lien pour le doc :

https://docs.google.com/spreadsheets/d/11BDYMGdGfAbvDNCaw_ADn69YJhzOPDuwVpr4-JLo-eM/edit?usp=sharing

Merci encore de t'être attardé sur ma question !

ok, je regarde cela en fin de matinée

voici

function onEdit(event){
  // onEdit s'active lors d'une modification
  var feuille = event.source.getActiveSheet();
  var cellule = event.source.getActiveRange();

  // on teste ici la feuille concernée, la colonne de la cellule modifiée et on regarde si elle vaut VRAI (TRUE)
  if (feuille.getName()=='ref' && cellule.getColumn()==5 && cellule.getValue()==true) {
    nouvelleFeuille(cellule.getRow())
  }
}

function nouvelleFeuille(ligne) {
  var document = SpreadsheetApp.getActiveSpreadsheet();
  var f1 = document.getSheetByName("base");
  var f3 = document.getSheetByName('ref');
  var nom = f3.getRange('A'+ligne).getValue();
  var f2 = document.getSheetByName(nom); // la nouvelle feuille

  // je crée la feuille
  if (f2 != null) {
    document.deleteSheet(f2);
  }
  f2 = document.insertSheet();
  f2.setName(nom);

  // je définis les plages à recopier
  var plage = f1.getRange('A1:Z60')
  var cible = f2.getRange("A1:Z60")

  // je recopie d'abord les valeurs, puis la mise en forme (largeur de colonnes)
  plage.copyTo(cible);
  var largeurColonnes = SpreadsheetApp.CopyPasteType.PASTE_COLUMN_WIDTHS
  plage.copyTo(cible,largeurColonnes,false);

  // je recopie les informations
  // le nom ira en cellule G2, le n° de téléphone en F4, la mission en F7 et le régime alimentaire en H26
  f2.getRange('G2').setValue(f3.getRange('A'+ligne).getValue())
  f2.getRange('F4').setValue(f3.getRange('B'+ligne).getValue())
  f2.getRange('F7').setValue(f3.getRange('C'+ligne).getValue())
  f2.getRange('H26').setValue(f3.getRange('D'+ligne).getValue())

};

j'ai documenté le script

C'est du géni et super bien documenter, je pense que je vais pouvoir m'approprier le script pour me l'approprier et l'appliquer à d'autres documents similaires !

J'aurai juste une question est ce qu'il serait possible de mettre sur le même modèle en colonne 6 une case à cocher pour supprimer la feuille qui est lié ?

Encore merci milles fois !

En colonne 6 de quel onglet ? 'ref' ? et quelle feuille "liée" car elle n'est pas liée, mais tu veux dire supprimer la feuille qui a été créée ?

Oui en colonne 6 dans l'onglet ref et oui pour supprimer la feuille créé

voici

function onEdit(event){
  // onEdit s'active lors d'une modification
  var feuille = event.source.getActiveSheet();
  var cellule = event.source.getActiveRange();

  // on teste ici la feuille concernée, la colonne de la cellule modifiée et on regarde si elle vaut VRAI (TRUE)
  if (feuille.getName()=='ref' && cellule.getColumn()==5 && cellule.getValue()==true) {
    nouvelleFeuille(cellule.getRow())
  }
  if (feuille.getName()=='ref' && cellule.getColumn()==6 && cellule.getValue()==true) {
    supprimerFeuille(cellule.getRow())
    cellule.setValue(false)
    cellule.offset(0,-1).setValue(false)
  }
}
function supprimerFeuille(ligne){
  var document = SpreadsheetApp.getActiveSpreadsheet();
  var f3 = document.getSheetByName('ref');
  var nom = f3.getRange('A'+ligne).getValue();
  var f2 = document.getSheetByName(nom); // la feuille
  if (f2 != null) {
    document.deleteSheet(f2);
  }
}
function nouvelleFeuille(ligne) {
  var document = SpreadsheetApp.getActiveSpreadsheet();
  var f1 = document.getSheetByName("base");
  var f3 = document.getSheetByName('ref');
  var nom = f3.getRange('A'+ligne).getValue();
  var f2 = document.getSheetByName(nom); // la nouvelle feuille

  // je crée la feuille
  if (f2 != null) {
    document.deleteSheet(f2);
  }
  f2 = document.insertSheet();
  f2.setName(nom);

  // je définis les plages à recopier
  var plage = f1.getRange('A1:Z60')
  var cible = f2.getRange("A1:Z60")

  // je recopie d'abord les valeurs, puis la mise en forme (largeur de colonnes)
  plage.copyTo(cible);
  var largeurColonnes = SpreadsheetApp.CopyPasteType.PASTE_COLUMN_WIDTHS
  plage.copyTo(cible,largeurColonnes,false);

  // je recopie les informations
  // le nom ira en cellule G2, le n° de téléphone en F4, la mission en F7 et le régime alimentaire en H26
  f2.getRange('G2').setValue(f3.getRange('A'+ligne).getValue())
  f2.getRange('F4').setValue(f3.getRange('B'+ligne).getValue())
  f2.getRange('F7').setValue(f3.getRange('C'+ligne).getValue())
  f2.getRange('H26').setValue(f3.getRange('D'+ligne).getValue())

};

Super, ça fonctionne à merveille merci encore !

Rechercher des sujets similaires à "conversion vba sheets"