Erreur de Type 13 dans Macro

Fermé
GG - 8 nov. 2013 à 11:06
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 - 14 nov. 2013 à 16:42
Bonjour,

J'essaye d'adapter une macro à mon utilisation.

La macro me permet uniquement d'afficher une valeur par défaut sur une plage de cellule (si celles-ci sont vides) et d'effacer la valeur par défaut si je sélectionne une cellule, de cette même plage, pour y saisir une date.

Voici le code

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = "W21:W43" Then
If Target.Value = "ASAP" Then Target.Value = ""
ElseIf Range("W21:W43").Value = "" Then
Range("W21:W43").Value = "ASAP"
End If
End Sub


L'erreur de type 13 Incompatible apparaît sur cette ligne :

ElseIf Range("W21:W43").Value = "" Then

Je vous remercie par avance à tous.

A voir également:

13 réponses

lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
8 nov. 2013 à 15:18
Bonjour,
Tu oublie un End If et dispose mal tes conditions.
    If Target.Address = "W21:W43" Then 
If Target.Value = "ASAP" Then
Target.Value = ""
ElseIf Range("W21:W43").Value = "" Then
Range("W21:W43").Value = "ASAP"
End If
End If

A+
1
Je te remerci d'avoir traiter mon problème !

Je n'ai pas excel au moment ou je te répond ! Je testerais ça mardi !

Merci beaucoup
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
9 nov. 2013 à 22:20
tes conditions IF sont rectifiées mais est-tu conscient que tu travail sur tout un bloc de données ?
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
12 nov. 2013 à 15:10
Le code que je t'ai montré concerne la deuxième partie de ce que tu cherche.
Pour remplir toute la plage fait le manuellement pour commencer
Ensuite supprime tout le code de la feuille et remplace-le par celui-ci
Dim AncCel As Range


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("W21:W43")) Is Nothing Then
'Une seule cellule comprise dans W21:W43 a été sélectionnée
If Target.Count > 1 Then Exit Sub
Application.EnableEvents = False
If Target.Value = "ASAP" Then
Target.Value = ""
Set AncCel = Target
'Target.Activate
ElseIf Target.Value = "" Then
Target.Value = "ASAP"
End If
ElseIf AncCel = "" Then
AncCel.Value = "ASAP"
End If
Application.EnableEvents = True
End Sub
1
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
14 nov. 2013 à 02:57
C'est à la première utilisation.
Refait le code..
Dim AncCel As Range


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next
If Not Intersect(Target, Range("W21:W43")) Is Nothing Then
'Une seule cellule comprise dans W21:W43 a été sélectionnée
If Target.Count > 1 Then Exit Sub
Application.EnableEvents = False

If Target.Value = "ASAP" Then
Target.Value = ""
Set AncCel = Target
ElseIf Target.Value = "" Then
Target.Value = "ASAP"
End If
ElseIf AncCel = "" Then
AncCel.Value = "ASAP"
End If
Application.EnableEvents = True
End Sub
A+
1
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
14 nov. 2013 à 11:13
Ce sont des cellules fusionnées....
Modifie la ligne
If Target.Count > 1 Then Exit Sub
par
If Target.Count <> 3 Then Exit Sub
Et ça fonctionnera.
Si problème enfin résolu, oublie pas de mettre le topic en "Résolu" (En haut gauche de ta question initiale).
A+
1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
C'est-à-dire ? Car je maîtrise le VBA très succinctement !

J'ai juste adapté le code qui était que pour une unique cellule au départ !
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
Modifié par lermite222 le 10/11/2013 à 15:14
Re,
C'est bien ce que je pensais, serais plutôt dans le genre..
Essaye
Private Sub Worksheet_Change(ByVal Target As Range)


If Not Intersect(Target, Range("W21:W43")) Is Nothing Then

'Une seule cellule comprise dans W21:W43 a été modifiée

If Target.Value = "ASAP" Then

Target.Value = ""

ElseIf Target.Value = "" Then

Target.Value = "ASAP"

End If

End If

End Sub
A+


Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
Note: Je ne répond pas aux MP pour les questions techniques. Et ma boule de cristal est cassée .
0
J'ai une erreur d'incompatibilité dans ton nouveau code sur la ligne:

"If Target.Value = "ASAP" Then"

Dois-je placer le code dans un module ?ou sur la feuille même ?

Pour rappel :
Moi je veux que le code m'affiche par défaut dans les cellules W21 à W43 "ASAP" en italique !

Ensuite dès que je sélectionne une des cellules, "ASAP" s'efface uniquement dans la cellule sélectionnée pour que je puisse saisir ma nouvelle valeure !

Merci encore !
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
Modifié par lermite222 le 12/11/2013 à 10:23
Le code doit être placer dans le module de la feuille concernée.
Pour le fonctionnement c'est bien ce que je pensais et c'est (en principe) ce que tu veux.

Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
Note: Je ne répond pas aux MP pour les questions techniques. Et ma boule de cristal est cassée .
0
Ok ! Mais ca ne fonctionne pas !

Je colle le code dans le module de la feuille, je retourne sur ma feuille, et dans la plage W21:W43, il n'y a pas "ASAP" !!

Qu'est-ce que je fais mal ?
0
J'ai remplis manuellement mes cellules avec "ASAP" (W21:W43).

J'ai collé le code dans le module de la feuille.

Avec le nouveau code j'ai une erreur d'exécution 424 "Objet requis" pour la ligne :

AncCel.Value = "ASAP"
0
Bon ca ne fonctionne toujours pas ! Je colle le code et rien ne se passe !

La mise en forme peut jouer ?

Voilà un lien du fichier où je veux que le code s'applique !

http://www.fichier-xls.fr/2013/11/14/forum/

Encore merci à toi de m'aider !
0
Je le savais ! J'aurais du spécifier ma mise en forme ! Je sais c'est une erreur de travailler en cellule fusionné !

Le code fonctionne :D !

Serait-il possible de modifier le code pour que je puisse commencer à écrire dans n'importe quelle cellule ? et pas uniquement les unes à la suite des autres ?
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
14 nov. 2013 à 13:41
comprend pas, développe
0
Fais comme-ci je n'avais rien dit car le code fonctionne à part dans la cellule W43 où il me remet automatiquement "ASAP"
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
14 nov. 2013 à 16:42
Non, ça ne fonctionne pas convenablement avec des cellules fusionnées.
Tu pourrais enlevé la fusion sur ces cellules et mettre ASAP dans la colonne X en mettant l'alignement à "Centrer" ça revient au même.
Le code suivant fonctionnera normalement (j'espère)
Dim AncCel As Range


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next
If AncCel Is Nothing Then
Set AncCel = Range("X21")
End If
If Not Intersect(Target, Range("X21:X43")) Is Nothing Then
'Une seule cellule comprise dans X21:X43 a été sélectionnée
If Target.Count > 1 Then Exit Sub
Application.EnableEvents = False

If Target.Value = "ASAP" Then
'Vérifie si ont n'a pas laisser une cellule vide dans la colonne X
If AncCel.Address <> Target.Address And AncCel.Value = "" Then
AncCel.Value = "ASAP"
End If
Target.Value = ""
Set AncCel = Target
ElseIf Target.Value = "" Then
Target.Value = "ASAP"
Set AncCel = Target
End If
'Vérifie si ont n'a pas laisser une cellule vide dans la sélection
'Quand ont sélectionne une cellule autre que dans colonne X
ElseIf AncCel.Value = "" Then
AncCel.Value = "ASAP"
End If
Application.EnableEvents = True
End Sub
A+
PS : met pas +1 sur tout les codes, uniquement sur celui qui convient le mieux.
0