VBA Excel en google sheets

Bonjour,

j'aimerais mettre mon VBA excel sous google shets mais je ne sais pas comment faire. Voici ce que j'aimerais passer sous google sheets:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Integer

For i = 7 To 980

If Cells(i, "C") <> "" And Cells(i, "A") = "" And Cells(i, "B") = "" Then
Cells(i, "A").Value = Date
Cells(i, "B").Value = Time


End If

Next

End Sub

Sub carton()

For i = 7 To 980
If Cells(i, "F").Value = "Seyfert" Then
Cells(i, "H").Value = Mid(Cells(i, "G").Value, 2, 5)
Cells(i, "I").Value = Mid(Cells(i, "G").Value, 13, 2)
Cells(i, "J").Value = Mid(Cells(i, "G").Value, 16, 4)
Cells(i, "K").Value = Mid(Cells(i, "G").Value, 21, 6)

ElseIf Cells(i, "F").Value = "VPK" Then
Cells(i, "H").Value = Mid(Cells(i, "G").Value, 1, 13)
Cells(i, "I").Value = Mid(Cells(i, "G").Value, 14, 3)


End If

Next i

End Sub

D'avance merci!

Bonjour,

La transposition n'est pas directe, bien qu'ici on trouve néanmoins une équivalence entre onEdit (GS) et Private Sub Worksheet_Change (excel).

Du reste, ta fonction excel m'interpelle ! D'abord car tu n'as aucun test sur la cellule modifiée, et que d'autre part tu les modifies toutes sans cibler la ligne modifiée !

  1. Peux-tu mettre ton fichier (ou un fichier simplifié anonymisé) en pièce jointe ?
  2. As-tu un embryon de fichier Google Sheets dont tu pourrais mettre un lien ici ?

Merci pour votre réponse je vous mets joint le fichier excel et j'ai remis les données dans sur un google sheet mais je n'ai pas commencé la macro car je ne sais pas comment m'y prendre. Je commence en VBA donc je pense que mon script est maladroit, je vise la cellule qui a besoin d'être modifié et cela dépend de la ou je suis positionnée. J'espère etre claire haha. Voici le lien google: https://docs.google.com/spreadsheets/d/1b6yugDZXKo7s39Au_r1bD3RvVFURiZNXY2b2H-jpumg/edit?usp=sharing et mon fichier excel:

46tracabilite.xlsm (103.95 Ko)

je viens de te demander une autorisation d'accès au fichier google sheets

https://www.sheets-pratique.com/fr/cours/partage

En excel, pas la peine de toujours tout balayer

Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Integer
    For Each cel In Target
        If cel.Column = 3 Then
            i = cel.Row
            If Cells(i, "C") <> "" And Cells(i, "A") = "" And Cells(i, "B") = "" Then
                Cells(i, "A").Value = Date
                Cells(i, "B").Value = Time
            End If
        End If
    Next
End Sub

L'équivalent en Google Sheets

function onEdit(event){ 
  var col = 3; // colonne C
  var feuille = "Traçabilité";
  var f = event.source.getActiveSheet();
  var r = event.source.getActiveRange();
  if ((r.getColumn() == col) && (f.getName() == feuille) && (r.getRow() > 6)){ 
    if ((r.offset(0,-2).getValue() == '') && (r.offset(0,-1).getValue() == '')){
      r.offset(0,-2).setValue(Utilities.formatDate(new Date(), "GMT+1", "dd/MM/yyyy"));
      r.offset(0,-1).setValue(Utilities.formatDate(new Date(), "GMT+1", "hh:mm"));
    }
  }
}

tu peux te faire une copie de

https://docs.google.com/spreadsheets/d/1dUXHmYGJR1HJl12-IByMQS_gdj_1aZMAwVm7u8a1T1A/edit?usp=sharing

Merci beaucoup! je vous ai donné l'accès si vous le souhaitez!

Et savez vous comment faire pour la deuxième partie ?

Sub carton()

For i = 7 To 980
If Cells(i, "F").Value = "Seyfert" Then
Cells(i, "H").Value = Mid(Cells(i, "G").Value, 2, 5)
Cells(i, "I").Value = Mid(Cells(i, "G").Value, 13, 2)
Cells(i, "J").Value = Mid(Cells(i, "G").Value, 16, 4)
Cells(i, "K").Value = Mid(Cells(i, "G").Value, 21, 6)

ElseIf Cells(i, "F").Value = "VPK" Then
Cells(i, "H").Value = Mid(Cells(i, "G").Value, 1, 13)
Cells(i, "I").Value = Mid(Cells(i, "G").Value, 14, 3)

End If

Next i

End Sub

D'avance merci!

Pourquoi le faire par macro alors qu'une formule serait suffisante ?

Peux-tu mettre un jeu de données (notamment colonne G) ?

J'ai besoin d'une macro car je dois rajouter des conditions et je pense que cela serait trop lourd pour une formule. Apres je ne sais pas si cela est possible mais si ce cas ça serait top mais je ne vois pas comment faire? De plus, j'essaie que la macro (sub carton) se déclenche quand la cellule G est remplie mais je ne pense que ce soit possible de mettre 2 fonctions onEdit?

De plus, j'essaie que la macro (sub carton) se déclenche quand la cellule G est remplie mais je ne pense que ce soit possible de mettre 2 fonctions onEdit?

on peut mettre dans le même script onEdit

ok, je vais l'ajouter

Je te laisse ajuster les valeurs

function onEdit(event){ 
  var feuille = "Traçabilité";
  var f = event.source.getActiveSheet();
  var r = event.source.getActiveRange();
  if ((r.getColumn() == 3) && (f.getName() == feuille) && (r.getRow() > 6)){ 
    if ((r.offset(0,-2).getValue() == '') && (r.offset(0,-1).getValue() == '')){
      r.offset(0,-2).setValue(Utilities.formatDate(new Date(), "GMT+1", "dd/MM/yyyy"));
      r.offset(0,-1).setValue(Utilities.formatDate(new Date(), "GMT+1", "hh:mm"));
    }
  }
  if ((r.getColumn() == 6) && (f.getName() == feuille) && (r.getRow() > 6)){ 
    var codebarre = r.offset(0,1).getValue().toString();
    if (r.getValue() == 'Seyfert'){
      r.offset(0,2).setValue(codebarre.substring(2,5));
      r.offset(0,3).setValue(codebarre.substring(13,2));
      r.offset(0,4).setValue(codebarre.substring(16,4));
      r.offset(0,5).setValue(codebarre.substring(21,6));
    }
    if (r.getValue() == 'VPK'){
      r.offset(0,2).setValue('');
      r.offset(0,3).setValue('');
      r.offset(0,4).setValue('');
      r.offset(0,5).setValue('');      
    }
  }

Ah super!! Merci beaucoup! :)

N'oublie pas de clore le fil de discussion en cliquant sur

Rechercher des sujets similaires à "vba google sheets"