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