VBA to APPS script

bonjour,

Est ce que quelq'un peut m'aider à convertir ces codes vba de rapprochement pour appscript. je suis vraiment novice en appscript.

Rapprochement à deux colonnes

montant 1| montant 2

Sub rap_b()
Dim Nb As Long, i As Long, j As Long, k As Long, Nbs1 As Long, Nbs2 As Long
Dim Tb

Application.ScreenUpdating = False
With Worksheets("Rappro")
Nbs1 = .Cells(.Rows.Count, "A").End(xlUp).Row
Nbs2 = .Cells(.Rows.Count, "B").End(xlUp).Row
If Nbs1 > Nbs2 Then
Nb = Nbs1 - 1
Else
Nb = Nbs2 - 1
End If

'Nb = .Cells(.Rows.Count, "A").End(xlUp).Row - 1
.Range("C2:C" & Nb).ClearContents
If Nb > 0 Then
Tb = .Range("A2").Resize(Nb, 10).Value

For i = 1 To Nb
If Tb(i, 3) = Empty And Tb(i, 1) <> 0 Then
For j = 1 To Nb
If Tb(j, 3) = Empty And Tb(j, 2) <> 0 Then
If Tb(i, 1) = Tb(j, 2) Then
k = k + 1
Tb(i, 3) = k
Tb(j, 3) = k
Exit For
End If
End If
Next j
End If
Next i

.Range("A2").Resize(Nb, 10).Value = Tb
.Range("A2").Resize(Nb, 10).Sort Key1:=.Range("C3"), Order1:=xlAscending, Header:=xlNo
End If
End With
Application.ScreenUpdating = True
End Sub

rapprochement à plusieurs colonnes

date| ref| libellé|montant 1|montant 2

01/12/2023| REF04 |comptabilisation 1 | 5000

03/12/2023| FER 05x| comptaxxx | |5000

Sub rap_A()
Dim dt As Long, Nb As Long, i As Long, j As Long, k As Long
Dim Tb1

Application.ScreenUpdating = False
' rectifie format date

For dt = 2 To Range("A" & Rows.Count).End(xlUp).Row
Cells(dt, 1) = DateSerial(Year(Cells(dt, 1)), Month(Cells(dt, 1)), Day(Cells(dt, 1)))
Next dt
Columns("D:E").Select
Selection.Replace What:=" ", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2

'Columns("A:A").Select
'Selection.TextToColumns Destination:=Range("A1"), DataType:=xlFixedWidth, _
' OtherChar:="|", FieldInfo:=Array(0, 4), TrailingMinusNumbers:=True
' Columns("A:E").Select

With Selection.Font
.Name = "Calibri"
.Size = 9
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.TintAndShade = 0
.ThemeFont = xlThemeFontMinor
End With

With ActiveSheet
'Worksheets ("Rapprochement")
Nb = .Cells(.Rows.Count, "A").End(xlUp).Row - 1
'.Range("F2:F" & Nb).ClearContents
If Nb > 0 Then
Tb1 = .Range("A2").Resize(Nb, 10).Value

For i = 1 To Nb
If Tb1(i, 6) = Empty And Abs(Tb1(i, 4)) > 0 Then
For j = 1 To Nb
If Tb1(j, 6) = Empty And Abs(Tb1(j, 5)) > 0 Then
If Abs(Abs(Tb1(i, 4)) - Abs(Tb1(j, 5))) < 0.0000000001 And Tb1(i, 1) = Tb1(j, 1) Then
k = k + 1
Tb1(i, 6) = k
Tb1(j, 6) = k
Exit For
End If
End If
Next j
End If
Next i

.Range("A2").Resize(Nb, 10).Value = Tb1
.Range("A2").Resize(Nb, 10).Sort Key1:=.Range("F3"), Order1:=xlAscending, Header:=xlNo
End If
End With

Columns("F:G").Select
With Selection.Font
.ColorIndex = xlAutomatic
.TintAndShade = 0
End With

Application.ScreenUpdating = True
End Sub

merci

Bonjour,

j'ignore complètement le VBA mais voici ce que propose chatGPT en résolution à votre demande :

function rap_b() {
  // Récupérer la feuille active de la feuille de calcul Google
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Rappro");

  // Obtenir le nombre de lignes non vides dans les colonnes A et B
  var lastRowA = sheet.getRange("A:A").getValues().filter(String).length;
  var lastRowB = sheet.getRange("B:B").getValues().filter(String).length;
  var Nb, i, j, k, Nbs1, Nbs2, Tb;

  // Déterminer le nombre de lignes à parcourir en fonction du nombre de lignes dans les colonnes A et B
  Nbs1 = lastRowA;
  Nbs2 = lastRowB;
  Nb = Nbs1 > Nbs2 ? Nbs1 - 1 : Nbs2 - 1;

  // Effacer le contenu de la colonne C
  sheet.getRange("C2:C" + Nb).clearContent();

  // Vérifier s'il y a des données à traiter
  if (Nb > 0) {
    // Obtenir les données de la plage A2:J(Nb+1)
    Tb = sheet.getRange("A2:J" + (Nb + 1)).getValues();

    // Parcourir les lignes des données
    for (i = 0; i < Nb; i++) {
      // Vérifier si la colonne C de la ligne i est vide et si la colonne A de la ligne i n'est pas égale à zéro
      if (Tb[i][2] === "" && Tb[i][0] !== 0) {
        // Parcourir les lignes pour trouver une correspondance
        for (j = 0; j < Nb; j++) {
          // Vérifier si la colonne C de la ligne j est vide et si la colonne B de la ligne j n'est pas égale à zéro
          if (Tb[j][2] === "" && Tb[j][1] !== 0) {
            // Vérifier si la valeur absolue de la différence entre la colonne D de la ligne i et la colonne E de la ligne j est inférieure à une petite marge
            // Et si la colonne A de la ligne i est égale à la colonne B de la ligne j
            if (Math.abs(Math.abs(Tb[i][3]) - Math.abs(Tb[j][4])) < 0.0000000001 && Tb[i][0] === Tb[j][0]) {
              // Incrémenter le compteur et affecter la même valeur à la colonne C de la ligne i et j
              k = k + 1;
              Tb[i][2] = k;
              Tb[j][2] = k;
              break;
            }
          }
        }
      }
    }

    // Mettre à jour les données dans la feuille de calcul avec les modifications apportées
    sheet.getRange("A2:J" + (Nb + 1)).setValues(Tb);
    // Trier les données en fonction de la colonne C
    sheet.getRange("A2:J" + (Nb + 1)).sort([{ column: 3, ascending: true }]);
  }
}

Si cela ne convient pas, dites quel est l'objectif de votre script.

Bonjour, essai ça mais pas sur car apparemment dans ton VBA il y a un mélange des 2

function rap_b() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Rappro");
  var lastRowA = sheet.getRange("A:A").getValues().filter(String).length;
  var lastRowB = sheet.getRange("B:B").getValues().filter(String).length;
  var Nb = Math.max(lastRowA, lastRowB) - 1;

  sheet.getRange("C2:C" + Nb).clearContent();

  if (Nb > 0) {
    var data = sheet.getRange(2, 1, Nb, 10).getValues();
    for (var i = 0; i < Nb; i++) {
      if (data[i][2] === "" && data[i][0] !== 0) {
        for (var j = 0; j < Nb; j++) {
          if (data[j][2] === "" && data[j][1] !== 0) {
            if (data[i][0] === data[j][1]) {
              data[i][2] = ++k;
              data[j][2] = k;
              break;
            }
          }
        }
      }
    }
    sheet.getRange(2, 1, Nb, 10).setValues(data);
    sheet.getRange(2, 1, Nb, 10).sort(3);
  }
}

function rap_A() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var lastRowA = sheet.getRange("A:A").getValues().filter(String).length - 1;

  for (var dt = 2; dt <= lastRowA + 1; dt++) {
    var date = sheet.getRange(dt, 1).getValue();
    sheet.getRange(dt, 1).setValue(new Date(date));
  }

  sheet.getRange("D:E").createTextFinder(" ").replaceAllWith("");

  var data = sheet.getDataRange().getValues();
  var Nb = data.length - 1;

  for (var i = 0; i < Nb; i++) {
    if (data[i][5] === "" && Math.abs(data[i][3]) > 0) {
      for (var j = 0; j < Nb; j++) {
        if (data[j][5] === "" && Math.abs(data[j][4]) > 0) {
          if (Math.abs(Math.abs(data[i][3]) - Math.abs(data[j][4])) < 0.0000000001 && data[i][0] === data[j][0]) {
            data[i][5] = ++k;
            data[j][5] = k;
            break;
          }
        }
      }
    }
  }
  sheet.getRange(2, 1, Nb, data[0].length).setValues(data);
  sheet.getRange(2, 1, Nb, data[0].length).sort(6);
}

Assurez-vous d'avoir activé les services Google Apps Script dans votre feuille de calcul Google Sheets pour pouvoir exécuter ce code. Vous pouvez copier ce code dans l'éditeur de script de votre feuille de calcul Google Sheets en allant dans "Outils" > "Éditeur de scripts". Une fois que vous avez collé le code, vous pouvez enregistrer et exécuter les fonctions rap_b() et rap_A() à partir de l'éditeur de script.

Cdlt

Alex

merci je vais les essayer

bonjour

je ne trouve pas comment faire pour copier/coller une valeur d'une feuille a une autre avec un bouton

si quelqu'un peut m'aider, sur VBA excel pas de soucis mais sur sheet impossible

Bonjour @Pimpon62 il faudrait que tu crées un nouveau sujet.

copier/coller une valeur d'une feuille à une autre avec un bouton

Cdlt

Alex

Rechercher des sujets similaires à "vba apps script"