erreur d'exécution "13"

chamoisp

XLDnaute Nouveau
Bonjour,
Je suis complètement novice en vba et j’ai un petit code à écrire :
Voila, j’ai deux cases une me sert pour mettre la date avec un UserForm, et la seconde case me sert à écrire un nom qui renommera automatiquement l’onglet.
Mon problème est le suivant :
Lorsque je veux mettre la date j’ai une « erreur d’exécution ‘13’ : Incompatibilité de Type »

Voici mon code


Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Target.Address = "$C$5:$E$5" Then

UserForm1.Show
Range("C7").Select

End If
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$C$7" And Target.Value <> 0 Then ActiveSheet.Name = Target.Value

End Sub

Et voici le code du UserForm

Private Sub Calendar1_Click()
Selection.Value = Calendar1.Value
End Sub

Private Sub CommandButton1_Click()
If Not IsNull(Calendar1.Value) Then Selection.Value = Calendar1.Value
UserForm1.Hide
End Sub

Private Sub CommandButton2_Click()
Selection.Value = res
UserForm1.Hide
End Sub

Private Sub UserForm_Activate()
UserForm1.Left = (Selection.Offset(0, 1).Left - 40) 'pour positionner à gauche de la colonne
UserForm1.Top = (Selection.Offset(0, 1).Top + 115)
If IsDate(Selection.Value) Then Calendar1.Value = CDate(Selection.Value)
Me.[Calendar1] = Date
res = Selection.Value
End Sub

Merci de votre aide, je vous joint mon classeur excel en fichier joint.
 

Pièces jointes

  • Classeur1.xls
    31 KB · Affichages: 60
  • Classeur1.xls
    31 KB · Affichages: 59
  • Classeur1.xls
    31 KB · Affichages: 57

Pierrot93

XLDnaute Barbatruc
Re : erreur d'exécution "13"

Bonjour Chamois

ton problème viens du fait que tu as des cellules fusionnées... Pas évident avec vba. Tu enlèves la fusion de cellule, quitte à remplacer par l'alignement "centrer sur plusieurs colonnes", et modifies les adresses dans ton code. Cela devrait mieux fonctionner.

bonne journée
@+
 
G

Guest

Guest
Re : erreur d'exécution "13"

Bonjour Chamois, et bienvenu dans le monde des macroteurs,

Voici ton code légèrement modifié.

Dans l'évènement change, comme tes cellules sont fusionnées, Taget représente les cellules C7:E7 mais seule C7 est modifiée donc c'est cette dernière dont il faut tester la valeur.

En règle générale VBA et les cellules fusionnées ne font pas bien ménage ensemble. Sur un projet comme ton classeur, c'est pas trop compliqué de voir d'où vient l'erreur mais sur un plus gros projet, les cellules fusionnées, brouillent les pistes.


Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$C$7:$E$7" And [C7].Value <> 0 Then  ActiveSheet.Name = Target.Value
End Sub

A bientôt

[Oups] Bonjour Pierrot:D
 

Gael

XLDnaute Barbatruc
Re : erreur d'exécution "13"

Bonjour ChamoisP, bonjour Pierrot93,

Voir modif dans exemple joint.

En fait, on peut conserver les cellules fusionnées mais il faut tester la valeur de la première cellule seulement, sinon on a une erreur lorsque target.address représente une plage.

@+

Gael

Et salut Hasco. Collision, mais raisonnement similaire.
 

Pièces jointes

  • ChamoisP_V1.xls
    31 KB · Affichages: 72

Statistiques des forums

Discussions
312 493
Messages
2 088 959
Membres
103 990
dernier inscrit
lamiadebz