Erreur d’exécution '13': incompatibilité de type

Piaf79

XLDnaute Junior
Bonsoir le forum,

Je souhaite convertir le contenu de trois cellules en majuscules dès lors qu'elles ne le sont pas (D8,D21 et D22). Le code "fonctionne très bien" sauf que lorsque je supprime le contenu de l'une des cellule le message est : Erreur d’exécution '13': incompatibilité de type

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("D8")) Is Nothing Then Target = UCase(Target)
    If Not Intersect(Target, Range("D21")) Is Nothing Then Target = UCase(Target)
    If Not Intersect(Target, Range("D22")) Is Nothing Then Target = UCase(Target)
    If Target.Address = "$D$13" Then
        nb = Range("D13").Value
        Sheets("ABC").Activate
        ActiveSheet.Range("D1").Select
        Col = 5
        For i = Col To nb + 3
            If Sheets("ABC").Cells(1, i) = "" Then
                Sheets("ABC").Columns(4).Copy

                Sheets("ABC").Columns(i).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, _
                    SkipBlanks:=False, Transpose:=False
                Application.CutCopyMode = False
                For j = 1 To 4
                    Sheets("ABC").Cells(j, i).Value = Sheets("ABC").Cells(j, 4).Value
                Next j
            End If
        Next i
        ActiveSheet.Range("D1").Select
        Sheets("Feuil1").Activate
        ActiveSheet.Range("D13").Select
    End If
End Sub

Est-ce qu'il manque quelque chose ?
Merci pour vos réponses.

Piaf79
 

Piaf79

XLDnaute Junior
Re : Erreur d’exécution '13': incompatibilité de type

Bonsoir Tentative,

J'ai l'impression que tout fonctionne normalement.
Peux tu m'expliquer le "on error resume next" ?

Par contre quand je supprime le contenu de la cellule avec la touche TAB cela dure quelques instants, normal ?

Bonne soirée.

Piaf79
 

Tentative

XLDnaute Occasionnel
Re : Erreur d’exécution '13': incompatibilité de type

Bonjour,

On error resume next = s'il y a une erreur passe à l'étape suivante.

Pour la déclaration des variables, on peut le forcer dans Vbe, menu Outils, Options, cocher : Déclaration des variables obligatoire
Si on veut utiliser la variable J, on déclare qui est J, au début de la macro :
Dim J as Integer
Donc J ne supportera que les entiers
Dim MaVar as String
MaVar ne supportera que les textes ou verra les nombres comme du texte.

Il y a plusieurs avantages à déclarer les variables.
Dont l'une : reprenons l'exemple de MaVar, quand je tape le code, j'écris mavar .... puis en changeant de ligne, mavar deviendra MaVar. Ainsi, je suis sûr de ne pas avoir fait une faute de frappe dans le nom de ma variable.
Etc


Tentative
 

Piaf79

XLDnaute Junior
Re : Erreur d’exécution '13': incompatibilité de type

Bonsoir à tous,

Tentative, Tototiti2008, merci pour vos explications.

Toutefois, je n'arrive pas à trouver la "bonne formule" par rapport à au code de mon premier post. Un p'tit coup de pouce ?

Bonne soirée.
Piaf79
 

tototiti2008

XLDnaute Barbatruc
Re : Erreur d’exécution '13': incompatibilité de type

Bonjour à tous,

Toutefois, je n'arrive pas à trouver la "bonne formule" par rapport à au code de mon premier post. Un p'tit coup de pouce ?

Peut-être, bien que tu ne nous ait pas parlé de ce que fait l'autre partie de ton code...

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False
    If Not Intersect(Target, Range("D8")) Is Nothing Then Target = UCase(Target)
    If Not Intersect(Target, Range("D21")) Is Nothing Then Target = UCase(Target)
    If Not Intersect(Target, Range("D22")) Is Nothing Then Target = UCase(Target)
    Application.EnableEvents = True
    If Target.Address = "$D$13" Then
        nb = Range("D13").Value
        Sheets("ABC").Activate
        ActiveSheet.Range("D1").Select
        Col = 5
        For i = Col To nb + 3
            If Sheets("ABC").Cells(1, i) = "" Then
                Sheets("ABC").Columns(4).Copy


                Sheets("ABC").Columns(i).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, _
                    SkipBlanks:=False, Transpose:=False
                Application.CutCopyMode = False
                For j = 1 To 4
                    Sheets("ABC").Cells(j, i).Value = Sheets("ABC").Cells(j, 4).Value
                Next j
            End If
        Next i
        ActiveSheet.Range("D1").Select
        Sheets("Feuil1").Activate
        ActiveSheet.Range("D13").Select
    End If
End Sub

Edit : attention, prévois une macro avec juste
Application.EnableEvents = True
à lancer pour réactiver les évènements si plantage
 
Dernière édition:

Piaf79

XLDnaute Junior
Re : Erreur d’exécution '13': incompatibilité de type

Tototiti2008,

Je viens d'essayer ton code.
1. Quand j'efface le contenu de la cellule avec la touche <- cela fonctionne.
2. Quand j'efface le contenu de la cellule avec la touche suppr il me met le message "Erreur d’exécution '13': incompatibilité de type" et surligne en jaune dans mon code VBA "Target = UCase(Target)"

L'autre partie du code permet de dupliquer la colonne D de la feuille "ABC" un certain nombre de fois (dépend du chiffre inscrit dans la cellule D13 de "Feuil1".

Piaf79
 

tototiti2008

XLDnaute Barbatruc
Re : Erreur d’exécution '13': incompatibilité de type

Re,

Essaye ça

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
if target.count>1 then exit sub    
Application.EnableEvents = False
    If Not Intersect(Target, Range("D8")) Is Nothing Then Target = UCase(Target)
    If Not Intersect(Target, Range("D21")) Is Nothing Then Target = UCase(Target)
    If Not Intersect(Target, Range("D22")) Is Nothing Then Target = UCase(Target)
    Application.EnableEvents = True
    If Target.Address = "$D$13" Then
        nb = Range("D13").Value
        Sheets("ABC").Activate
        ActiveSheet.Range("D1").Select
        Col = 5
        For i = Col To nb + 3
            If Sheets("ABC").Cells(1, i) = "" Then
                Sheets("ABC").Columns(4).Copy




                Sheets("ABC").Columns(i).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, _
                    SkipBlanks:=False, Transpose:=False
                Application.CutCopyMode = False
                For j = 1 To 4
                    Sheets("ABC").Cells(j, i).Value = Sheets("ABC").Cells(j, 4).Value
                Next j
            End If
        Next i
        ActiveSheet.Range("D1").Select
        Sheets("Feuil1").Activate
        ActiveSheet.Range("D13").Select
    End If
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 195
Messages
2 086 076
Membres
103 111
dernier inscrit
Eric68350