XL 2019 Use forme a modifier

  • Initiateur de la discussion Initiateur de la discussion berru76
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

berru76

XLDnaute Occasionnel
Bonjour
J'ai un Use forme utile qui fonctionnait dans mes petits programmes club
La structure est la même
Mais dans le nouveau projet la présentation se fait en tableaux donc cela ne s'affiche plus au bon endroit
Si vous voyer la solution
ci-joint un exemple
Merci de votre aide
 

Pièces jointes

Solution
Bonjour Berru, Nain Porte Quoi,
Dans un TDS, comme votre Tabel1, on ne peut accéder à la dernière ligne avec L = .Range("C" & Rows.Count).End(xlUp).Row + 1 car pour XL un TDS est un objet.
Cette ligne de code vous donnera la première ligne vide après votre TDS. C'est pour ça que vos entrées se mettent à la fin du tableau.

il faut passer par l'examen du TDS lui même.
En PJ j'ai remplacé :
VB:
L = .Range("C" & Rows.Count).End(xlUp).Row + 1
par
L = 1 + Application.CountIf([Tabel1[Noms]], "*")

.Range("C" & L) = Me.ComboBox1.Value
par
[Tabel1[Noms]].Item(L) = Me.ComboBox1.Value

.Range("D" & L) = "Payé"
par
[Tabel1[Payé]].Item(L) = "Payé"

.Range("D" & L) = "Non"
par
[Tabel1[Payé]].Item(L) = "Non"
Hello,

quand on utilise des tableaux (structurées, bien que MS n'utilise plus ce terme) il ne faut pas ajouter de lignes vides. En clair, réduisez votre tableau à sa partie congrues et laissez faire le reste

Ceci dit, la macro n'est plus vraiment adapté aux TS, je pense que quelques autres contributeurs pourront vous arranger ça
 
Bonjour Berru, Nain Porte Quoi,
Dans un TDS, comme votre Tabel1, on ne peut accéder à la dernière ligne avec L = .Range("C" & Rows.Count).End(xlUp).Row + 1 car pour XL un TDS est un objet.
Cette ligne de code vous donnera la première ligne vide après votre TDS. C'est pour ça que vos entrées se mettent à la fin du tableau.

il faut passer par l'examen du TDS lui même.
En PJ j'ai remplacé :
VB:
L = .Range("C" & Rows.Count).End(xlUp).Row + 1
par
L = 1 + Application.CountIf([Tabel1[Noms]], "*")

.Range("C" & L) = Me.ComboBox1.Value
par
[Tabel1[Noms]].Item(L) = Me.ComboBox1.Value

.Range("D" & L) = "Payé"
par
[Tabel1[Payé]].Item(L) = "Payé"

.Range("D" & L) = "Non"
par
[Tabel1[Payé]].Item(L) = "Non"
 

Pièces jointes

Bonjour Berru, Nain Porte Quoi,
Dans un TDS, comme votre Tabel1, on ne peut accéder à la dernière ligne avec L = .Range("C" & Rows.Count).End(xlUp).Row + 1 car pour XL un TDS est un objet.
Cette ligne de code vous donnera la première ligne vide après votre TDS. C'est pour ça que vos entrées se mettent à la fin du tableau.

il faut passer par l'examen du TDS lui même.
En PJ j'ai remplacé :
VB:
L = .Range("C" & Rows.Count).End(xlUp).Row + 1
par
L = 1 + Application.CountIf([Tabel1[Noms]], "*")

.Range("C" & L) = Me.ComboBox1.Value
par
[Tabel1[Noms]].Item(L) = Me.ComboBox1.Value

.Range("D" & L) = "Payé"
par
[Tabel1[Payé]].Item(L) = "Payé"

.Range("D" & L) = "Non"
par
[Tabel1[Payé]].Item(L) = "Non"
Merci a vous
Fonctionne très bien
 
Re,
En fait c'est la dernière cellule écrite en colonne C qui est sélectionnée.
Mais si vous voulez sélectionner une cellule précise en sortie d' USF, faites par ex :
VB:
Private Sub CommandButton2_Click()
  Unload Me
  Range("F5").Select
End Sub
Remplacez le "F5" pa ce que vous voulez.
et vous pouvez rajoutez dans l'usf :
Code:
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
  If CloseMode = vbFormControlMenu Then   ' Fermeture usf qui vient de la croix
    Cancel = True
  End If
End Sub
pour empêcher la fermeture de l'usf par la croix mais uniquement par le bouton "Quitter"
 

Pièces jointes

Salut Cathodique,

Je pense que c'était juste pour montrer que sa macro marchait sur une plage ( à droite ) mais pas sur un TDS ( à gauche)
Or, il voulait une macro sur TDS.
@sylvanu 😉: Perso, j'ai compris autrement. Comment remplir 2 plages pratiquement identiques via 2 formulaires identiques.
D'où ma proposition de transférer les données dans 2 plages (suivant la colonne où l'on double-clique) via un seul formulaire.

En fait, c'est aussi le code ci-dessous qui m'a aussi orienté vers ce que j'ai dit ci-dessus.
VB:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Target.Count = 1 Then
        If Not Intersect(Target, Range("C4:C131")) Is Nothing Then
            L = Target.Row
            UserForm1.Show
        End If
    End If
    If Target.Count = 1 Then
        If Not Intersect(Target, Range("H4:H131")) Is Nothing Then
            L = Target.Row
            UserForm3.Show
        End If
    End If
    Cancel = True
End Sub
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour