Faire un formulaire en VBA
a
Ce code permet de faire apparaitre une fenêtre pour supprimer ou modifier des données qu'ont saisies dans une zone, et qui sont enregistres dans une plage sur une autre feuille.
Private Sub ComboBox1_Change()
End Sub
Private Sub CommandButton2_Click() ' Bouton Annuler
' Fermer le UserForm
Unload Me
End Sub
Private Sub CommandButton1_Click() ' Bouton Valider
Dim wsZone As Worksheet
Dim selectedName As String
Dim lastRow As Long
Dim i As Long
Dim nameFound As Boolean
' Définir la feuille de calcul "Zone"
Set wsZone = ThisWorkbook.Sheets("Zone")
' Obtenir le nom sélectionné dans la liste déroulante
selectedName = Me.ComboBox1.Value
' Trouver la dernière ligne utilisée dans la colonne B de la feuille "Zone"
lastRow = wsZone.Cells(wsZone.Rows.Count, "B").End(xlUp).Row
' Initialiser la variable pour vérifier si le nom est trouvé
nameFound = False
' Parcourir chaque ligne dans la colonne B pour trouver le nom sélectionné
For i = 2 To lastRow
If wsZone.Cells(i, "B").Value = selectedName Then
' Supprimer la ligne correspondante dans la feuille "Zone"
wsZone.Rows(i).Delete Shift:=xlUp
' Marquer que le nom a été trouvé
nameFound = True
Exit For
End If
Next i
' Si le nom n'a pas été trouvé, afficher un message d'erreur
If Not nameFound Then
MsgBox "Le nom sélectionné n'a pas été trouvé dans la feuille Zone.", vbExclamation
Else
' Fermer le UserForm
Unload Me
End If
End Sub
Private Sub CommandButton3_Click()
Dim wsFormulaire As Worksheet
Dim wsZone As Worksheet
Dim selectedName As String
Dim lastRow As Long
Dim i As Long
Dim nameFound As Boolean
' Définir les feuilles de calcul
Set wsFormulaire = ThisWorkbook.Sheets("Formulaire")
Set wsZone = ThisWorkbook.Sheets("Zone")
' Obtenir le nom sélectionné dans la liste déroulante du UserForm
selectedName = UserForm1.ComboBox1.Value ' Assurez-vous de remplacer "UserForm1" par le nom de votre UserForm
' Trouver la dernière ligne utilisée dans la colonne B de la feuille "Zone"
lastRow = wsZone.Cells(wsZone.Rows.Count, "B").End(xlUp).Row
' Initialiser la variable pour vérifier si le nom est trouvé
nameFound = False
' Parcourir chaque ligne dans la colonne B pour trouver le nom sélectionné
For i = 2 To lastRow
If wsZone.Cells(i, "B").Value = selectedName Then
' Copier les informations de la ligne trouvée vers la feuille "Formulaire"
wsFormulaire.Range("C2").Value = wsZone.Cells(i, "A").Value
wsFormulaire.Range("C3").Value = wsZone.Cells(i, "B").Value
wsFormulaire.Range("C4").Value = wsZone.Cells(i, "C").Value
wsFormulaire.Range("C5").Value = wsZone.Cells(i, "D").Value
' Supprimer la ligne correspondante dans la feuille "Zone"
wsZone.Rows(i).Delete Shift:=xlUp
' Marquer que le nom a été trouvé
nameFound = True
Exit For
End If
Next i
' Si le nom n'a pas été trouvé, afficher un message d'erreur
If Not nameFound Then
MsgBox "Le nom sélectionné n'a pas été trouvé dans la feuille Zone.", vbExclamation
Else
Unload Me
End If
End Sub
Private Sub Label1_Click()
End Sub
Private Sub UserForm_Initialize()
Dim wsZone As Worksheet
Dim lastRow As Long
Dim cell As Range
' Définir la feuille de calcul "Zone"
Set wsZone = ThisWorkbook.Sheets("Zone")
' Trouver la dernière ligne utilisée dans la colonne B de la feuille "Zone"
lastRow = wsZone.Cells(wsZone.Rows.Count, "B").End(xlUp).Row
' Remplir la ComboBox avec les noms de la colonne B
For Each cell In wsZone.Range("B2:B" & lastRow)
Me.ComboBox1.AddItem cell.Value
Next cell
End SubP
Bonjour,
Sur un forum, avec des personnes physiques ce n'est pas comme discuter avec chatGTP, il nécessite un minimum de forme, comme dire "bonjour", puis, exprimer sa problématique, là vous êtes sur la section Google Sheets, je suppute que vous souhaitez convertir un script VBA > GAS.
Pour cela, l'IA est pour le coup, très pratique, voici une proposition reçu, à vous de tester si elle fonctionne :
// Fonction déclenchée à l'ouverture du fichier
function onOpen() {
// Créer un menu personnalisé dans la feuille de calcul
var ui = SpreadsheetApp.getUi();
ui.createMenu('Custom Menu')
.addItem('Open UserForm', 'openUserForm')
.addToUi();
}
// Fonction pour ouvrir le UserForm
function openUserForm() {
// Créer un formulaire HTML à partir du fichier 'UserForm.html'
var form = HtmlService.createHtmlOutputFromFile('UserForm')
.setWidth(300) // Définir la largeur du formulaire
.setHeight(400); // Définir la hauteur du formulaire
// Afficher le formulaire comme une boîte de dialogue modale
SpreadsheetApp.getUi().showModalDialog(form, 'UserForm');
}
// Fonction pour supprimer un utilisateur
function deleteUser() {
// Récupérer le nom sélectionné dans le formulaire
var selectedName = document.getElementById('name').value;
// Accéder à la feuille "Zone" du fichier actif
var sheetZone = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Zone');
// Trouver la dernière ligne utilisée dans la colonne B
var lastRow = sheetZone.getLastRow();
// Récupérer les noms dans la colonne B
var range = sheetZone.getRange('B2:B' + lastRow);
var names = range.getValues();
// Parcourir les noms pour trouver celui sélectionné
for (var i = 0; i < names.length; i++) {
if (names[i][0] === selectedName) {
// Supprimer la ligne correspondante dans la feuille "Zone"
sheetZone.deleteRow(i + 2); // Ajouter 2 à i pour compenser le décalage d'index
return;
}
}
// Afficher un message d'erreur si le nom n'a pas été trouvé
SpreadsheetApp.getUi().alert('Le nom sélectionné n\'a pas été trouvé dans la feuille Zone.');
}
// Fonction pour récupérer les informations de l'utilisateur
function getUserInfo() {
// Récupérer le nom sélectionné dans le formulaire
var selectedName = document.getElementById('name').value;
// Accéder à la feuille "Zone" et à la feuille "Formulaire" du fichier actif
var sheetZone = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Zone');
var sheetForm = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Formulaire');
// Trouver la dernière ligne utilisée dans la colonne B
var lastRow = sheetZone.getLastRow();
// Récupérer les noms dans la colonne B
var range = sheetZone.getRange('B2:B' + lastRow);
var names = range.getValues();
// Parcourir les noms pour trouver celui sélectionné
for (var i = 0; i < names.length; i++) {
if (names[i][0] === selectedName) {
// Récupérer les informations de la ligne correspondante dans "Zone"
var rowData = sheetZone.getRange(i + 2, 1, 1, 4).getValues()[0]; // Ajouter 2 à i pour compenser le décalage d'index
// Copier les informations dans les cellules de la feuille "Formulaire"
sheetForm.getRange('C2:C5').setValues([rowData.slice(0, 4)]);
// Supprimer la ligne correspondante dans la feuille "Zone"
sheetZone.deleteRow(i + 2); // Ajouter 2 à i pour compenser le décalage d'index
return;
}
}
// Afficher un message d'erreur si le nom n'a pas été trouvé
SpreadsheetApp.getUi().alert('Le nom sélectionné n\'a pas été trouvé dans la feuille Zone.');
}