Code VBA fonctionne ... selon son humeur ...

Hicsygrek

XLDnaute Occasionnel
Bonjour à tous,

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 :eek: ) mais il y a un mais ...

J'ai un extrait de code qui fonctionne ... quand il veut bien :mad:

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 :confused:

Si quelqu'un a une idée ... je l'en remercie d'avance :D
 

Pierrot93

XLDnaute Barbatruc
Re : Code VBA fonctionne ... selon son humeur ...

Bonjour,

Aarf.. Pas top en vba les cellules fusionnées... 2 petites remarques au passage, sans trop de conviction...

sur la 1ère instruction :
Code:
der_col = Range("XFD1").End(xlToLeft).Column
tu ne précise pas la feuille...
Code:
der_col = Sheets("NomDeLaFeuille").Range("XFD1").End(xlToLeft).Column
s'applique donc à la feuille active...

je fusionnerais es cellules à la fin...
Code:
.Cells(2, n) = "Avertissement"
    .Cells(2, p) = "Mise à pied"
.Range(.Cells(1, n), .Cells(1, p)).Merge

A voir, sans fichier pour tester...

bon après midi
@+
 

Jam

XLDnaute Accro
Re : Code VBA fonctionne ... selon son humeur ...

Salut xy :D, Pierrot,

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.
 

Discussions similaires

Statistiques des forums

Discussions
312 841
Messages
2 092 710
Membres
105 517
dernier inscrit
Freddy93