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

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 !

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 😱 ) 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 😀
 
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
@+
 
Re : Code VBA fonctionne ... selon son humeur ...

Salut xy 😀, 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.
 
- 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

Réponses
5
Affichages
915
Réponses
1
Affichages
325
Réponses
7
Affichages
372
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
1 K
Réponses
3
Affichages
882
Réponses
2
Affichages
507
Retour