IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Imcompatibilité de type


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2022
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable des études

    Informations forums :
    Inscription : Juillet 2022
    Messages : 2
    Par défaut Imcompatibilité de type
    Bonjour,

    Je commence à faire des macros sur Excel et je me heurte à un problème de compatibilité dans mon code.

    L'erreur intervient à la ligne en rouge.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    Sub import()
        'création des variables
        Dim i As Integer
        Dim x As Integer
        Dim y As Integer
        
        'Préparation de la cellules vide pour la copie des données
        Range("B20000").Select
        Selection.End(xlUp).Select
        ActiveCell.Offset(1, 0).Select
        x = ActiveCell.Row
        
        'On va charcher les données dans le fichier Export et on les copie à partir de la cellule vide
        Workbooks.Open Filename:="C:\Users\omu\Desktop\export.XLSX"
        Range("A2:Y1000").Select
        Selection.Copy
        Windows("XXX-Pilotage IP v5 - vba.xlsm").Activate
        ActiveSheet.Paste
        
        'On vide le press papier
        Application.CutCopyMode = False
        Windows("export.XLSX").Activate
        ActiveWindow.Close
        
        Selection.End(xlDown).Select
        y = ActiveCell.Row
        
        'on écrit une formule dans chaque case de la colonne "A" pour chaque ligne copiée/collée
        For i = x To y
            
            Cells(i, 1).FormulaLocal = "=SI(ESTVIDE(" & Cells(i, 19) & ");ANNEE(C:C)" & "" - "" & "MOIS(C:C);ANNEE(S:S)" & "" - "" & "MOIS(S:S))"
        Next
        
    End Sub
    Le problème survient quand je met le fonction Cells(i, 19) ou bien Range("S" + i) dans la formule. Je pense que le problème viens du type de la variable "i". Alors j'ai essayé de la convertir la variable i de type Integer en String et de ranger le résultat dans une variable de type String mais aucun résultat concluant. Je vous met en dessous comment j'ai essayé de transformer l'entier en chaine de caractères (variable z).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    Sub import()
        'création des variables
        Dim i As Integer
        Dim x As Integer
        Dim y As Integer
        Dim z As String
        
        'Préparation de la cellules vide pour la copie des données
        Range("B20000").Select
        Selection.End(xlUp).Select
        ActiveCell.Offset(1, 0).Select
        x = ActiveCell.Row
        
        'On va charcher les données dans le fichier Export et on les copie à partir de la cellule vide
        Workbooks.Open Filename:="C:\Users\omu\Desktop\export.XLSX"
        Range("A2:Y1000").Select
        Selection.Copy
        Windows("XXX-Pilotage IP v5 - vba.xlsm").Activate
        ActiveSheet.Paste
        
        'On vide le press papier et on ferme le fichier "export"
        Application.CutCopyMode = False
        Windows("export.XLSX").Activate
        ActiveWindow.Close
        
        Selection.End(xlDown).Select
        y = ActiveCell.Row
        
        'on écrit une formule dans chaque case de la colonne "A" pour chaque ligne copiée/collée
        For i = x To y
            
            z = CStr(i)
            Cells(i, 1).FormulaLocal = "=SI(ESTVIDE(" & Cells(z, 19) & ");ANNEE(C:C)" & "" - "" & "MOIS(C:C);ANNEE(S:S)" & "" - "" & "MOIS(S:S))"
        Next
        
    End Sub
    Dans l'idéal si je viens sur ce forum c'est pour avoir une solution pour mon problème mais avant tous j’aimerai comprendre ou je me suis trompé et savoir ce que je dois faire et me poser les bonnes questions pour ne pas ré-itérer la même erreur.

    Comme c'est la première fois que je poste un sujet sur ce forum n'hésitez pas à me demander des éclaircissement de mes explications si jamais ce n'est pas clair.

    Je vous remercie de votre compréhension,

    Axel / La_raclette

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 179
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Dans la chaîne de caractères =SI(ESTVIDE(" & Cells(i, 19), Cells(i, 19) renverra la valeur contenue dans la cellule, même s'il serait préférable de préciser sa propriété Value, or vous devez obtenir l'adresse de cette cellule soit la propriété Address
    Cependant attention la propriété Address renvoie la référence absolue de la cellule, il y a donc lieu le cas échéant d'utiliser les arguments RowAbsolute et/ou ColumnAbsolute

    Petit exemple rapide pour illustrer mes propos

    Ecriture de la formule =SI(ESTVIDE(A2);"Cellule vide";"Cellule remplie") dans la cellule B2 de la feuille active.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub t()
      Dim txt As String
      Dim r As Long
      r = 2
      txt = "=SI(ESTVIDE(" & Cells(r, 1).Address(RowAbsolute:=False, ColumnAbsolute:=False) & ");""Cellule vide"";""Cellule remplie"")"
      Range("B2").FormulaLocal = txt
    End Sub
    Petites remarques
    • Pour rendre pérenne votre code, privilégiez la propriété Formula au lieu de FormulaLocal
    • Il n'est pas utile d'utiliser une boucle pour écrire la même formule dans une plage de cellules. Il est parfaitement possible d'écrire Range("B2:B21").FormulaLocal = txt
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Nouveau candidat au Club
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2022
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable des études

    Informations forums :
    Inscription : Juillet 2022
    Messages : 2
    Par défaut
    Bonjour Philippe je te remercie de ta réponse et des conseils que tu m'a donné et je m'excuse pour ma réponse tardive. J'ai retiré la boucle et je l'ai remplacé par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("A" & x, "A" & y).FormulaLocal = txt
    Sinon le problème de compatibilité persiste toujours quand je remplace dans la formule que tu as donné

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    txt = "=SI(ESTVIDE(" & Cells(r, 1).Address(RowAbsolute:=False, ColumnAbsolute:=False) & ");""Cellule vide"";""Cellule remplie"")"
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    txt = "=SI(ESTVIDE(" & Cells(r, 1).Address(RowAbsolute:=False, ColumnAbsolute:=False) & ");ANNEE(C:C)" & "&" & "" - "" & "&" & "MOIS(C:C);ANNEE(S:S)" & "&" & "" - "" & "&" & "MOIS(S:S))"
    Donc dès le départ en fait j'avais une erreur sur la fonction Cells et sur la partie ANNEE et MOIS.

    Je pense qu'au final ce que je veux écrire ne s'écrit pas comme ça. J'ai ré-écrit la formule de plusieurs façons différentes mais rien n'y fait. J'ai toujours ce problème de compatibilité.

    Aurais-tu une idée ?

    Encore merci pour les conseils !

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 179
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Avant de construire la formule avec du code VBA, il faudrait la tester manuellement dans Excel pour vérifier si elle ne provoque pas d'erreur

    Je n'adresse jamais de colonne complète comme par exemple ANNEE(C:C)
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

Discussions similaires

  1. [XL-2007] erreur d'éxecution 13 : imcompatibilité de type
    Par Merryy dans le forum Macros et VBA Excel
    Réponses: 19
    Dernier message: 27/07/2015, 11h13
  2. Imcompatibilité de type if-and
    Par dvdhag123 dans le forum Macros et VBA Excel
    Réponses: 25
    Dernier message: 30/10/2013, 15h27
  3. [XL-2000] erreur d'execution '13': Imcompatibilité de type.
    Par dybmans dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 25/10/2010, 16h37
  4. utilisation du meta type ANY
    Par Anonymous dans le forum CORBA
    Réponses: 1
    Dernier message: 15/04/2002, 12h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo