Faire un formulaire en VBA

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 Sub

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.');
}
Rechercher des sujets similaires à "formulaire vba"