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 :

Erreur: Incompatibilité de type


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Info-Indus
    Inscrit en
    Avril 2015
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Info-Indus
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2015
    Messages : 202
    Par défaut Erreur: Incompatibilité de type
    Bonjour,

    Je suis face à un petit problème qui est entrain de me faire perdre un temps fou.
    VBA me retourne une erreur d'incompatibilité de type, à la ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Lig = Rng.Find(Texte, Cells(Lig, Rng.Column), xlValues).Row
    De mon code:

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    Option Compare Database
     
    Sub ReadData()
        Dim i As Long, j As Long, t As Integer
        Dim val, OF As String
        Dim xls As Excel.Application
        Dim CarteDuPanneau As Integer
        Dim Composant, Boitier, TypeFenetre, NFenetre, TypeErreur, Operateur As String
     
    DoCmd.SetWarnings False
    'Ajout des données dans la base
     
    PathName = "C:\Users\seyahi\Documents\Projet QUALITE\fichiers qualité\VISION\DocumentVISION\"
    FileName = "ImportDonneeExt.xlsm"
    Set xls = CreateObject("Excel.Application")
    Set wbs = xls.Workbooks.Open(FileName:=PathName & FileName)
    Set ws = wbs.Sheets("FichierAOI")
    Der_ligne = ws.Cells(Rows.Count, "B").End(xlUp).Row
     
    'For i = 1 To Der_ligne
    '    If IsNumeric(WS.Cells(i, "A")) = True Then
    '        OF = WS.Cells(i, "C").Value
    '        For j = 1 To Der_ligne
    '            If WS.Cells(j, 1) = "" Then
    '                val = WS.Cells(j, 2).Value
    '                CarteDuPanneau = Right(val, 1)
    '                Composant = Left(val, 4)
    '                Boitier = WS.Cells(j, 3)
    '                TypeFenetre = WS.Cells(j, 4)
    '                NFenetre = WS.Cells(j, 5)
    '                TypeErreur = WS.Cells(j, 7)
    '                Operateur = WS.Cells(j, 8)
    '                DoCmd.RunSQL "INSERT INTO DATA (OF, CarteDuPanneau, Composant, Boitier, TypeFenetre, NFenetre, TypeErreur, Operateur) VALUES ('" & OF & "', '" & CarteDuPanneau & "','" & Composant & "','" & Boitier & "','" & TypeFenetre & "','" & NFenetre & "','" & TypeErreur & "','" & Operateur & "')"
    '            End If
    '        Next j
    '    End If
    'Next i
    'wbs.Close
     
    '------------------------------------------------------------------------
    Dim x As Integer
    Dim Lignes()
    Dim Texte As String
    Dim Plage As Range
    Dim Flag As Boolean
     
    Set Plage = ws.Columns(10) 'plage de recherche
    Texte = "0"   'expression cherchée
    Flag = Find_Next(Plage, Texte, Lignes())  'appel de la fonction
    If Flag Then  'si fonction retourne Vrai = expression trouvée dans la plage
        For x = LBound(Lignes) To UBound(Lignes)   'restitution des lignes correspondantes
            Debug.Print Lignes(x, 1)
        Next x
    Else
        'MsgBox "L'expression : " & Texte & " n'a pas été trouvée dans la plage : " & Plage.Address
    End If
     
     
    DoCmd.SetWarnings True
    End Sub
    Function Find_Next(Rng As Range, Texte As String, Tbl()) As Boolean
     
    Dim Nbre As Integer
    Dim Lig As Long, Cptr As Long
     
    PathName = "C:\Users\seyahi\Documents\Projet QUALITE\fichiers qualité\VISION\DocumentVISION\"
    FileName = "ImportDonneeExt.xlsm"
    Set xls = CreateObject("Excel.Application")
    Set wbs = xls.Workbooks.Open(FileName:=PathName & FileName)
    Set ws = wbs.Sheets("FichierAOI")
    Der_ligne = ws.Cells(Rows.Count, "B").End(xlUp).Row
     
        'Nbre = Application.WorksheetFunction.CountIf(Rng, Texte)
            Nbre = xls.WorksheetFunction.CountIf(ws.Range("J:J"), "0")
        If Nbre > 0 Then
            ReDim Tbl(Nbre - 1)
            Lig = 1
            For Cptr = 0 To Nbre - 1
                Lig = Rng.Find(Texte, Cells(Lig, Rng.Column), xlValues).Row
                'Lig = Rng.Find(What:=Texte, after:=ws.Cells(Lig, Rng.Column), LookIn:=xlValues).Row
                Tbl(Cptr, 1) = Lig
            Next
            Debug.Print Nbre
            Debug.Print Tbl(Cptr, 1)
        Else
            GoTo Absent
        End If
        Find_Next = True
        Exit Function
    Absent:
        Find_Next = False
    End Function
    Peut être que vous allez pouvoir me trouver la cause de cette erreur, car moi j'ai cherché en vain.
    Merci d'avance

  2. #2
    Invité
    Invité(e)
    Par défaut
    bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    dim Der_ligne as integer
    Der_ligne =0
    On error resume next
    Der_ligne = ws.Cells(Rows.Count, "B").End(xlUp).Row
    If err= 0 then 
    On error goto 0
    'Traitement 
    Else
      msgbox "Pas trouver!"
    End if
    On errror goto 0
    Édite erreur de ma part
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dim Der_ligne as integer
    Der_ligne = ws.Cells(Rows.Count, "B").End(xlUp).Row

  3. #3
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Bonjour,

    il semble que tu n'ais pas prévu le cas ou ton Find ne trouve rien ...

    il serait peu-être mieux de séparer ta ligne., d'abords tu effectue ta recherche qui doit te renvoyer un range ... et seulement si tu trouve tu en extrait la propriété Row...
    et ce serait ainsi plus simple à débugger ...

    Sinon il y as une règle souvent répétée sur ce forum .. : l'on ne doit pas utiliser les objets Range,Cells.... sans préciser la feuille de calcul concerné si on ne veut éviter un code instable ... dans ton cas ou tu n'as pas précisé classeur et feuille de la cellule contenant la valeur à chercher , est-tu sur de ton argument de recherche ??

  4. #4
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut




    Bonjour,

    la cause est juste une mauvaise utilisation de la méthode Find !
    Juste consulter l'exemple de l'aide VBA de cette méthode …


    _____________________________________________________________________________________________________
    Je suis Charlie, Bardo, Sousse

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur Info-Indus
    Inscrit en
    Avril 2015
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Info-Indus
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2015
    Messages : 202
    Par défaut
    Bonjour,

    Merci pour vos réponses

    Marc-L
    Bonjour,

    la cause est juste une mauvaise utilisation de la méthode Find !
    Juste consulter l'exemple de l'aide VBA de cette méthode …
    J'ai consulté longuement l'aide VBA ce matin, mais je n'ai toujours pas trouver où je me suis planté, pouvez-vous préciser, svp ?

  6. #6
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Citation Envoyé par iliaseyah Voir le message
    Bonjour,

    Merci pour vos réponses

    Marc-L


    J'ai consulté longuement l'aide VBA ce matin, mais je n'ai toujours pas trouver où je me suis planté, pouvez-vous préciser, svp ?
    lit les autres messages je t'ai déjà donné la précision !

  7. #7
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Citation Envoyé par iliaseyah Voir le message
    mais je n'ai toujours pas trouver où je me suis planté, pouvez-vous préciser, svp ?
    Voir la première phrase du post #3 de bbil ‼
    Le code de l'exemple de l'aide VBA vérifie au moins qu'une correspondance existe …

  8. #8
    Membre confirmé
    Homme Profil pro
    Développeur Info-Indus
    Inscrit en
    Avril 2015
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Info-Indus
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2015
    Messages : 202
    Par défaut
    Re messieurs,

    J'avais bel et bien pris en compte toutes les remarques et j'ai modifié mon code en conséquences.
    J'ai oublié de vous le mettre dans mon message précédent...

    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
    Function Find_Next(Rng As Range, Texte As String, Tbl()) As Boolean
    
    Dim Nbre As Integer
    Dim Lig As Long, Cptr As Long
    Dim zone As Range
    
    PathName = "C:\Users\seyahi\Documents\Projet QUALITE\fichiers qualité\VISION\DocumentVISION\"
    FileName = "ImportDonneeExt.xlsm"
    Set xls = CreateObject("Excel.Application")
    Set wbs = xls.Workbooks.Open(FileName:=PathName & FileName)
    Set ws = wbs.Sheets("FichierAOI")
    
        'Nbre = Application.WorksheetFunction.CountIf(Rng, Texte)
            Nbre = xls.WorksheetFunction.CountIf(ws.Range("J:J"), "0")
        If Nbre > 0 Then
            ReDim Tbl(Nbre - 1)
            Lig = 1
            For Cptr = 0 To Nbre - 1
                zone = Rng.Find(Texte, ws.Cells(Lig, Rng.Column), xlValues)
                If zone = True Then
                Lig = zone.Row
                Tbl(Cptr, 1) = Lig
                End If
            Next
            Debug.Print Nbre
            Debug.Print Tbl(Cptr, 1)
        Else
            GoTo Absent
        End If
        Find_Next = True
        Exit Function
    Absent:
        Find_Next = False
    End Function
    Mais le problème persiste :/

  9. #9
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Cela ne ressemble pas vraiment à l'exemple de l'aide VBA de la méthode Find

    True n'apparaît nulle part dans le code de cet exemple …

    Vu que tout programmeur sait qu'une variable objet n'est pas une variable booléenne !

    Voir donc enfin l'utilisation de Nothing dans l'exemple …

Discussions similaires

  1. [AC-2010] Erreur "incompatibilité de type"
    Par oreoolep dans le forum VBA Access
    Réponses: 4
    Dernier message: 02/12/2011, 21h29
  2. Erreur incompatibilité de type au lancement formulaire
    Par koluche dans le forum VBA Access
    Réponses: 0
    Dernier message: 05/05/2011, 14h59
  3. Erreur "incompatibilité de type" lors import dans table Access
    Par spud96 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 05/01/2011, 21h40
  4. erreur incompatibilité de type
    Par prince19 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 02/06/2007, 11h43
  5. [VBA E]erreur incompatibilité de type que je ne comprend pas
    Par zoumzoum59 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 07/07/2006, 14h14

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