Erreur de Type 13 dans Macro

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.

13 réponses

  • Votes
  • Date
  • Date décroissante
  1. Contributeur
    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
    2. Contributeur
      tes conditions IF sont rectifiées mais est-tu conscient que tu travail sur tout un bloc de données ?
  2. Contributeur
    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. Contributeur
      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. Contributeur
        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. 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 !
          1. Contributeur
            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 .
            1. 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 !
              1. Contributeur
                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 .
                1. 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 ?
                  1. 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"
                    1. 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 !
                      1. 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 ?
                        1. Contributeur
                          comprend pas, développe
                        2. Fais comme-ci je n'avais rien dit car le code fonctionne à part dans la cellule W43 où il me remet automatiquement "ASAP"
                      2. Contributeur
                        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.