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 :

Incompatibilité de type dans IF


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2019
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Incompatibilité de type dans IF
    Bonjour,

    j'ai depuis peu commencer la programmation d'une macro sur Excel qui sert à supprimer certaines lignes,

    mais lors de l’exécution de mon code VBA me sors une erreur d'incompatibilité à la L.17 et je n'arrive pas à voir le problème, je débute, un peu d'aide me serait bien utile !

    Merci de votre compréhension

    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
     
    Sub supp_ligne()
    '
    ' supp_ligne Macro
    ' L'objectif de cette macro est de supprimer les lignes du classeur en trop afin de faciliter le travail à un opérateur
    ' Les lignes enlevées sont celles qui contiennent la valeur "S" dans la colonne N, toutes les lignes contenant le même numéro
    ' que la ligne supprimé seront supprimées également
     
    'Variable de type entier numérique
    Dim numTel As Long
    Dim ligne As Integer
    ligne = 1
     
    While Cells(ligne, 16) <> ""
    'Cette structure conditionnelle va vérifier si la valeur dans la cellule N1 est égale à "S", si oui, le programme supprimera et gardera
    'en mémoire le numéro de téléphone de la ligne qui vient d'être supprimée, sinon, il passera ) la ligne suivante
    If Worksheets("EXTRACTION ACD").Range("N" + ligne) = "S" Or numTel = Cells(ligne, 16).Value Then
        numTel = Cells(ligne, 16).Value 'Affecte à la variable numTel la valeur contenue dans la colonne des numéro de téléphone
        Selection.EntireRow.Delete 'Sélectionne et supprime la ligne complète
        MsgBox "Ligne supprimée" + numTel 'Test
    Else
        MsgBox "passer la ligne"
        ligne = ligne + 1
    End If
    Wend
    MsgBox "Macro terminée"
    End Sub

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 73
    Points : 142
    Points
    142
    Par défaut
    Bonjour.

    Le message te dis que deux données sont incompatibles entre elles. Tu compares des choux et des carottes, quoi.
    Rapide tour dans la documentation officielle :
    Propriété Worksheet.Range (Excel)
    Renvoie un objet Range qui représente une cellule ou une plage de cellules.
    Et tu compares cet objet à la chaine "S"...

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2019
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Merci de ta réponse, mais quand je rajoute un .Value après l'objet Range j'ai toujours la même erreur, que devrais-je faire pour pouvoir comparer sans que j'ai une erreur qui sorte ?

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 73
    Points : 142
    Points
    142
    Par défaut
    Pour débugger, il faut trouver d'où vient exactement l'erreur.
    Tu peux commencer par :
    1. Afficher les variables que tu utilises, avec MsgBox(maVar).
    Il y a peut-être une variable mal renseignée, ou un mauvais typage.

    2. Dissocier les conditions qui posent problème.
    Là tu as un IF condition1 OR condition2.
    Tu peux tester avant les conditions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    IF condition1
       MsgBox("Condition1")
    IF condition2
       MsgBox("Condition2")

  5. #5
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    Bonjour
    le ".value" est en soit pas handicapant la souplesse de VBA le considere par contre
    reflechi
    si tu boucle de minimum a maximum et qu'entre les deux tu supprime des lignes n'y a t-il pas un probleme qui va se créer d'apres toi

    fait une recherche sur ce forum sur " supprimer des ligne en boucle" ca va t'apprendre une chose essentielle a savoir en ce qui concerne la methode que tu veux employer pour shunter tes lignes

    ensuite je dirais aussi qu'il serait bien que tu fasse une recherche sur la methode autofilter et specialcells je pense que ca te serait utile car se sera toujours une methode plus fiable et moins contraignante et plus facile a gérer

    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    242
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 242
    Points : 484
    Points
    484
    Par défaut
    Bonjour,
    Voici peut-être le chou et la carotte dont parlait macgawel :L'opérateur de concaténation est &

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2019
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par zenpbb Voir le message
    Bonjour,
    Voici peut-être le chou et la carotte dont parlait macgawel :L'opérateur de concaténation est &
    Merci beaucoup c'était ça le problème !

  8. #8
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2019
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par patricktoulon Voir le message
    Bonjour
    le ".value" est en soit pas handicapant la souplesse de VBA le considere par contre
    reflechi
    si tu boucle de minimum a maximum et qu'entre les deux tu supprime des lignes n'y a t-il pas un probleme qui va se créer d'apres toi

    fait une recherche sur ce forum sur " supprimer des ligne en boucle" ca va t'apprendre une chose essentielle a savoir en ce qui concerne la methode que tu veux employer pour shunter tes lignes

    ensuite je dirais aussi qu'il serait bien que tu fasse une recherche sur la methode autofilter et specialcells je pense que ca te serait utile car se sera toujours une methode plus fiable et moins contraignante et plus facile a gérer

    Merci pour tes conseils !

  9. #9
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re grosse erreur
    re
    tag résolu avec ce principe !!???
    il n'y a donc personne qui va lui dire qu'on ne supprime pas les lignes en bouclant du min vers le max mais l'inverse non?? personne ???

    demonstration de la sottise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub test()
    Max = 20
    i = 1
    While i < Max
    If Cells(i, 1).Value = "titi" Then Cells(i, 1).EntireRow.Delete
    i = i + 1
    Wend
    End Sub
    Nom : demo2.gif
Affichages : 741
Taille : 441,0 Ko

    demonstration du comment il faut faire avec la methode boucle (while,do loop for next )qui n'est pas la plus optimale cela etant dit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub test()
    Max = 20
    i = Max
    While i > 1
    If Cells(i, 1).Value = "titi" Then Cells(i, 1).EntireRow.Delete
    i = i - 1
    Wend
    End Sub
    Nom : demo2.gif
Affichages : 707
Taille : 347,5 Ko
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 73
    Points : 142
    Points
    142
    Par défaut
    La question était "Pourquoi ai-je une erreur d'incompatibilité ?", pas "Mon code est-il fonctionnellement correct ?"

    Il a eu sa réponse : mauvais opérateur pour la concaténation.
    Il lui reste à tester son programme, et le corriger s'il ne fait pas ce qui est souhaité. Quitte à poser une nouvelle question...

    Et fonctionnellement parlant, son code a l'air cohérent puisqu'il n'incrémente pas ligne s'il a supprimé la ligne (et qu'il arrête la boucle dès qu'il n'y a rien dans une cellule)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [A-02] Incompatibilité de type dans un DLookUp
    Par Domi2 dans le forum VBA Access
    Réponses: 2
    Dernier message: 15/11/2008, 13h09
  2. Réponses: 3
    Dernier message: 30/07/2008, 11h56
  3. Incompatibilité de type dans un formulaire
    Par Kalseln dans le forum IHM
    Réponses: 7
    Dernier message: 04/09/2007, 22h02
  4. "Incompatibilité de type" dans une formule
    Par Log_polmed dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 19/06/2007, 15h03
  5. Incompatibilité de types dans un formulaire
    Par ahage4x4 dans le forum ASP
    Réponses: 3
    Dernier message: 03/05/2005, 15h39

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