Ca fait un moment que je bidouille plus ou moins bien avec des réussites et des échecs.
Je suis à 2 doigts de finir mon programme (enfin ) mais il y a un mais ...
J'ai un extrait de code qui fonctionne ... quand il veut bien
Code:
Private Sub CdeButValid_Click()
Dim der_col As Integer
Dim n As Integer
Dim p As Integer
der_col = Range("XFD1").End(xlToLeft).Column
Sheets("Sécurité").Cells(1, der_col + 2) = TxtBNom.Value
n = Sheets("Sécurité").Range("XFD1").End(xlToLeft).Column
p = Sheets("Sécurité").Range("XFD1").End(xlToLeft).Column + 1
With Sheets("Sécurité")
.Range(.Cells(1, n), .Cells(1, p)).Merge
.Cells(2, n) = "Avertissement"
.Cells(2, p) = "Mise à pied"
End With
End Sub
Celui-ci cherche dans la première ligne, la dernière colonne occupée.
Il entre un nom qu'il pioche depuis une Textbox dans la 2è colonne qui suit (car la dernière colonne occupée et la colonne qui suit sont fusionnées).
Ensuite il fusionne cette cellule et celle qui suit et entre dans la cellule en dessous, "Avertissement" et "Mise à pied".
De façon plus schématique :
Les cellules A1:G1 sont occupées.
G1 est fusionnée avec H1.
Donc dernière colonne occupée (G1) +2 = I1
En I1 = le nom dans la Textbox
On fusionne I1 et J1.
En I2 = "Avertissement"
En J2 = "Mise à pied".
Seul problème ... ce code fonctionne quelque soit le nom utilisé mais pas systématiquement. Lorsqu'il n'entre pas de nom dans la cellule, il ne génère pas d'erreur et continue. F8 ne fonctionne pas
Si quelqu'un a une idée ... je l'en remercie d'avance
Je commencerai pas réécrire un peu le code car partir du moment où tu répètes 3 fois la même instruction en quelques lignes, il y a forcément une simplification à faire, de même pour les variables. Cela pourrait donner ça:
VB:
Private Sub CdeButValid_Click()
Dim der_col As Integer
'Dim n As Integer <- Pas vraiment utile
'Dim p As Integer '<- Inutile aussi car p=n+1 non?
With Worksheets("Sécurité")
der_col = ValDerniereColonne()
.Cells(1, der_col + 2) = TxtBNom.Value
der_col = ValDerniereColonne()
.Range(.Cells(1, der_col), .Cells(1, der_col+1)).Merge
.Cells(2, der_col) = "Avertissement"
.Cells(2, der_col+1) = "Mise à pied"
End With
End Sub
Function ValDerniereColonne() as Integer
ValDerniereColonne=Worksheets("Sécurité").Range("XFD1").End(xlToLeft).Column
End Function
Je n'ai pas pris en compte les remarques de Pierrot, mais elle sont certainement à intégrer.
Non testé, à valider donc.
Bon courage.