Recuperar los datos de una fila en un userform VBA
isa38600
Mensajes publicados
39
Estado
Miembro
-
cs_Le Pivert Mensajes publicados 8437 Estado Colaborador -
cs_Le Pivert Mensajes publicados 8437 Estado Colaborador -
Bonjour,
Pour récupérer les données de la ligne de la cellule active sans que le formulaire affiche les valeurs de la ligne au-dessus, assurez-vous d’abord de capturer les données avant de changer la sélection active, et d’utiliser correctement les références de la ligne sélectionnée. Voici une approche corrigée et commentée en VBA:
- Enregistre d’abord l’index de la ligne active.
- Utilise cet index pour lire les valeurs des cellules de cette ligne.
- Évite de dépendre de l ActiveCell après des sélections.
Traduction du code en corrigeant l’ordre et les références (extrait adapté de votre code, avec noms inchangés pour rester fidèle au texte d’origine):
Sub CommandButton2_Cliquer()
'1) Sauvegarder la ligne active avant toute modification de la sélection
Dim ligne As Long
ligne = ActiveCell.Row
'2) Sélectionner la ligne correspondant à la cellule active (si nécessaire)
ActiveCell.EntireRow.Select
'3) Séparer les éléments "jour", "mois", "année" et les placer dans les ComboBox correspondantes
Dim TabSep() As String
TabSep = Split(Selection(ligne, 1).Value, " ")
UserForm2_modifier.ComboBox4.Value = TabSep(0)
UserForm2_modifier.ComboBox5.Value = TabSep(1)
UserForm2_modifier.ComboBox6.Value = TabSep(2)
'4) Remplir le formulaire avec les données de la ligne sélectionnée
UserForm2_modifier.ComboBox1.Value = Selection(ligne, 2).Value
UserForm2_modifier.ComboBox2.Value = Selection(ligne, 3).Value
UserForm2_modifier.ComboBox3.Value = Selection(ligne, 4).Value
UserForm2_modifier.TextBox1.Value = Selection(ligne, 5).Value
UserForm2_modifier.ComboBox7.Value = Selection(ligne, 6).Value
UserForm2_modifier.TextBox2.Value = Selection(ligne, 7).Value
UserForm2_modifier.ComboBox8.Value = Selection(ligne, 8).Value
UserForm2_modifier.ComboBox9.Value = Selection(ligne, 9).Value
'5) Afficher le formulaire
UserForm2_modifier.Show
End Sub
Points à vérifier si le bug persiste
- Assurez-vous que la variable ligne est bien assignée à la ligne de la cellule active avant tout changement de sélection. L’exemple ci-dessus lit ligne = ActiveCell.Row avant toute opération qui pourrait modifier ActiveCell.
- Vérifiez que la colonne utilisée pour TabSep (ici colonne 1 de la ligne) contient bien une valeur et qu’elle est formatée comme "jour mois année" séparés par des espaces.
- Si la ligne est modifiée entre-temps (par ex. si une autre macro agit sur la feuille), stockez les valeurs directement dans des variables plutôt que de lire après une éventuelle modification de la sélection.
- Évitez d’utiliser Selection(ligne, n) après avoir modifié la sélection; utilisez plutôt directement cellules par ligne, par exemple Cells(ligne, n).Value.
Si vous préférez, vous pouvez aussi éviter d’utiliser la sélection et travailler directement sur la ligne obtenue via ActiveCell.Row:
Dim ligne As Long
ligne = ActiveCell.Row
Dim parts() As String
parts = Split(Cells(ligne, 1).Value, " ")
UserForm2_modifier.ComboBox4.Value = parts(0)
UserForm2_modifier.ComboBox5.Value = parts(1)
UserForm2_modifier.ComboBox6.Value = parts(2)
Ainsi, vous vous fiez strictly à la ligne capturée au moment où vous lancez le bouton, et non à la ligne résultant d’un changement éventuel de sélection.
Cordialement.
Pour récupérer les données de la ligne de la cellule active sans que le formulaire affiche les valeurs de la ligne au-dessus, assurez-vous d’abord de capturer les données avant de changer la sélection active, et d’utiliser correctement les références de la ligne sélectionnée. Voici une approche corrigée et commentée en VBA:
- Enregistre d’abord l’index de la ligne active.
- Utilise cet index pour lire les valeurs des cellules de cette ligne.
- Évite de dépendre de l ActiveCell après des sélections.
Traduction du code en corrigeant l’ordre et les références (extrait adapté de votre code, avec noms inchangés pour rester fidèle au texte d’origine):
Sub CommandButton2_Cliquer()
'1) Sauvegarder la ligne active avant toute modification de la sélection
Dim ligne As Long
ligne = ActiveCell.Row
'2) Sélectionner la ligne correspondant à la cellule active (si nécessaire)
ActiveCell.EntireRow.Select
'3) Séparer les éléments "jour", "mois", "année" et les placer dans les ComboBox correspondantes
Dim TabSep() As String
TabSep = Split(Selection(ligne, 1).Value, " ")
UserForm2_modifier.ComboBox4.Value = TabSep(0)
UserForm2_modifier.ComboBox5.Value = TabSep(1)
UserForm2_modifier.ComboBox6.Value = TabSep(2)
'4) Remplir le formulaire avec les données de la ligne sélectionnée
UserForm2_modifier.ComboBox1.Value = Selection(ligne, 2).Value
UserForm2_modifier.ComboBox2.Value = Selection(ligne, 3).Value
UserForm2_modifier.ComboBox3.Value = Selection(ligne, 4).Value
UserForm2_modifier.TextBox1.Value = Selection(ligne, 5).Value
UserForm2_modifier.ComboBox7.Value = Selection(ligne, 6).Value
UserForm2_modifier.TextBox2.Value = Selection(ligne, 7).Value
UserForm2_modifier.ComboBox8.Value = Selection(ligne, 8).Value
UserForm2_modifier.ComboBox9.Value = Selection(ligne, 9).Value
'5) Afficher le formulaire
UserForm2_modifier.Show
End Sub
Points à vérifier si le bug persiste
- Assurez-vous que la variable ligne est bien assignée à la ligne de la cellule active avant tout changement de sélection. L’exemple ci-dessus lit ligne = ActiveCell.Row avant toute opération qui pourrait modifier ActiveCell.
- Vérifiez que la colonne utilisée pour TabSep (ici colonne 1 de la ligne) contient bien une valeur et qu’elle est formatée comme "jour mois année" séparés par des espaces.
- Si la ligne est modifiée entre-temps (par ex. si une autre macro agit sur la feuille), stockez les valeurs directement dans des variables plutôt que de lire après une éventuelle modification de la sélection.
- Évitez d’utiliser Selection(ligne, n) après avoir modifié la sélection; utilisez plutôt directement cellules par ligne, par exemple Cells(ligne, n).Value.
Si vous préférez, vous pouvez aussi éviter d’utiliser la sélection et travailler directement sur la ligne obtenue via ActiveCell.Row:
Dim ligne As Long
ligne = ActiveCell.Row
Dim parts() As String
parts = Split(Cells(ligne, 1).Value, " ")
UserForm2_modifier.ComboBox4.Value = parts(0)
UserForm2_modifier.ComboBox5.Value = parts(1)
UserForm2_modifier.ComboBox6.Value = parts(2)
Ainsi, vous vous fiez strictly à la ligne capturée au moment où vous lancez le bouton, et non à la ligne résultant d’un changement éventuel de sélection.
Cordialement.