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


Sujet :

Macros et VBA Excel

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    juin 2011
    Messages
    523
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : juin 2011
    Messages : 523
    Points : 290
    Points
    290
    Par défaut Incompatibilité de type
    Bonjour à tous
    A partir d'une ligne et tant que la cellule de la colonne 1 = la valeur d'une autre cellule
    Je voudrais copier certaines cellules de la ligne active
    Mais j'ai un message "incompatibilité de type"

    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
    Sub ChercheDetail()
    Worksheets("Détail").Range("A2:J2500").ClearContents
    GSM = Worksheets("Détail").Range("C1").Value
    Valeur_Cherchee = "Section 7"
     
    Worksheets("Données").Activate
    Set PlageDeRecherche = ActiveSheet.Columns(1)
    i = PlageDeRecherche.Find(what:=Valeur_Cherchee, LookIn:=xlValues).Row
    i = PlageDeRecherche.Find(what:=GSM, After:=ActiveCell, LookIn:=xlValues).Row
    Application.ScreenUpdating = False
     
    With Sheets("Données")
    j = 3
    Do While Cells(i, 1).Value = GSM
     
           Cells(i, 8).Copy Worksheets("Détail").Cells(j, 1)
            Cells(i, 9).Copy Worksheets("Détail").Cells(j, 2)
            j = j + 1
            i = i + 1
    Loop
     
    End With
     
    Application.ScreenUpdating = True
     
    Worksheets("Détail").Activate
     
    Set PlageDeRecherche = Nothing
    End Sub
    Merci d'avance pour votre aide

  2. #2
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    juin 2007
    Messages
    14 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2007
    Messages : 14 617
    Points : 30 097
    Points
    30 097
    Par défaut
    Citation Envoyé par fclus Voir le message
    Mais j'ai un message "incompatibilité de type"
    Quelle ligne de code est désignée par le débugage ?
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  3. #3
    Membre expert Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    mars 2007
    Messages
    1 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : mars 2007
    Messages : 1 463
    Points : 3 172
    Points
    3 172
    Par défaut
    Bonjour,

    Première règle : déclarer toutes les variables !
    Pour en être sûr, commencer tous les modules par :
    Option Explicit.
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    juin 2011
    Messages
    523
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : juin 2011
    Messages : 523
    Points : 290
    Points
    290
    Par défaut
    Je n'ai pas montré tout le code mais les variables sont évidemment déclarées

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Option Explicit
    Dim i, j As Integer, PlageDeRecherche As Range
    Dim Valeur_Cherchee, GSM As String
    Je reçois le popup à partir de la ligne 9

  5. #5
    Membre expert Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    mars 2007
    Messages
    1 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : mars 2007
    Messages : 1 463
    Points : 3 172
    Points
    3 172
    Par défaut
    Mauvaises déclarations !
    1. Il n'y a aucune raison de déclarer ces variables au niveau du module : elles devraient être déclarées au niveau de la procédure.
    2. i et j devraient être déclarées Long (au lieu de Variant et Integer)
    3. GSM devrait être Variant
    4. Valeur_Cherchee devrait être String

    EDIT : il est très important de typer correctement les variables, dans 100% des cas, l'incompatibilité de type est due à un mauvais typage.
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    juin 2011
    Messages
    523
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : juin 2011
    Messages : 523
    Points : 290
    Points
    290
    Par défaut
    J'ai modifié la déclaration des variables mais j'obtiens le même résultat

  7. #7
    Membre expert Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    mars 2007
    Messages
    1 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : mars 2007
    Messages : 1 463
    Points : 3 172
    Points
    3 172
    Par défaut
    Vérifie la valeur de i
    Vérifie la valeur de GSM et l'emplacement hasardeux de ActiveCell
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    juin 2011
    Messages
    523
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : juin 2011
    Messages : 523
    Points : 290
    Points
    290
    Par défaut
    GSM contient bien le numéro recherché
    ActiveCell vaut 6,944444444444E-04 ???

    Je ne comprends pas pourquoi mais ça fonctionne !

    Je pense avoir un problème avec mon 2ème find (celui où je précise After:ActiveCell)
    Je recherche d'abord Section 7
    Puis à partir de cette ligne, je recherche un numéro de tel
    Je dois récupérer le numéro de la ligne à partir de laquelle je vais boucler pour extraire les données dont j'ai besoin

  9. #9
    Membre éclairé
    Homme Profil pro
    ingénieur d'étude
    Inscrit en
    juin 2013
    Messages
    383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur d'étude
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2013
    Messages : 383
    Points : 768
    Points
    768
    Par défaut
    Bonjour,

    Votre ligne 9 est effectivement problématique : vous utilisez 'ActiveCell' sans avoir préalablement activé une cellule en particulier.
    En conséquence, si vous sélectionnez une cellule qui n'est pas dans la colonne A et que vous lancez votre macro, vous obtenez une erreur.

    Vous pouvez corriger le problème de plusieurs façon, parmi lesquelles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    i = PlageDeRecherche.Find(what:=GSM, After:=Worksheets("Données").Cells(i, 1), LookIn:=xlValues).Row
    Cordialement

  10. #10
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    juin 2007
    Messages
    14 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2007
    Messages : 14 617
    Points : 30 097
    Points
    30 097
    Par défaut
    Citation Envoyé par fclus Voir le message
    Je reçois le popup à partir de la ligne 9
    La recherche renvoie vraisemblablement une valeur supérieure à 32 000 et dépasse donc la capacité d'un Integer.
    Toute variable devant représenter un numéro de ligne doit être déclarée en Long.

    Pour aller plus loin, selon moi le type Integer n'est plus vraiment utile étant donné la taille de la mémoire des ordinateurs actuels.
    A une époque où la RAM se comptait en "ko", il pouvait être utile de gagner quelques octets. Aujourd'hui qu'elle se compte en Go, à moins d'avoir une variable tableau représentant quelques millions de valeurs, ça n'a pas grand intérêt de gratter quelques octets.
    Perso, j'ai quasiment abandonné le Integer au profit du Long. Ca permet, entre autre, d'éviter des bugs comme celui-ci.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  11. #11
    Membre actif
    Profil pro
    Inscrit en
    juin 2011
    Messages
    523
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : juin 2011
    Messages : 523
    Points : 290
    Points
    290
    Par défaut
    Merci à tous pour votre aide
    Je découvre le VBA sous Excel

    J'utilise habituellement Access

    Problème résolu
    Variables redéfinies
    2ème find redéfini comme indiqué par Ben_L

    Encore merci

  12. #12
    Membre expert Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    mars 2007
    Messages
    1 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : mars 2007
    Messages : 1 463
    Points : 3 172
    Points
    3 172
    Par défaut
    Je ne parles pas de la valeur de ActiveCell mais de son emplacement HAZARDEUX !
    Il ne faut pas utiliser ActiveCell, ni Activesheet, ni activer la feuille Données ou la feuille Détail, l'utilisation des objets actifs est une des principales sources d'erreur.
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  13. #13
    Membre expert Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    mars 2007
    Messages
    1 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : mars 2007
    Messages : 1 463
    Points : 3 172
    Points
    3 172
    Par défaut
    Citation Envoyé par fclus Voir le message
    2ème find redéfini comme indiqué par Ben_L
    Notes que cette syntaxe est source de problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    i = PlageDeRecherche.Find(what:=GSM, After:=Worksheets("Données").Cells(i, 1), LookIn:=xlValues).Row
    En effet la méthode Find est susceptible d'échouer et dans ce cas il se produira une erreur !
    Il est préférable de traiter cette éventualité :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      Set cel = PlageDeRecherche.Find(what:=GSM, After:=Worksheets("Données").Cells(i, 1), LookIn:=xlValues)
      If Not cel Is Nothing Then
        i = cel.Row
        'suite de la macro
        '...
      End If
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  14. #14
    Membre actif
    Profil pro
    Inscrit en
    juin 2011
    Messages
    523
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : juin 2011
    Messages : 523
    Points : 290
    Points
    290
    Par défaut
    Re Bonjour
    J'ai réouvert ce post parce que, sur certains PC, je reçois un message "incompatibilité de type"
    Pourquoi est-ce qu'en analysant les mêmes données, ça fonctionne sur certains PC et pas sur d'autres ?
    On a tous la même version d'Excel, la même version Windows 10 et je n'ai ajouté aucune référence particulière

    La seule différence, c'est que les collègues sont "Simple Utilisateur" et pas admin de leur poste

  15. #15
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    juin 2007
    Messages
    14 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2007
    Messages : 14 617
    Points : 30 097
    Points
    30 097
    Par défaut
    Citation Envoyé par fclus Voir le message
    J'ai réouvert ce post parce que, sur certains PC, je reçois un message "incompatibilité de type"
    Il faudrait indiquer quelle ligne de code est désignée par le débugage.

    Pourquoi est-ce qu'en analysant les mêmes données, ça fonctionne sur certains PC et pas sur d'autres ?
    Sans doute parce que les données sont différentes, soit par leurs valeurs, soit par leur quantité.

    Par exemple, "Incompatibilité de type" intervient régulièrement quand on déclare en type Integer une variable désignant un nombre de lignes. Si sur un poste il y a 30 000 lignes à traiter et sur un autre il y en a 35 000, alors une erreur se produira sur le second et pas sur le premier.
    Ce n'est qu'une cause possible parmi de nombreuses autres.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  16. #16
    Membre actif
    Profil pro
    Inscrit en
    juin 2011
    Messages
    523
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : juin 2011
    Messages : 523
    Points : 290
    Points
    290
    Par défaut
    Bonjour Menhir
    Non, il s'agit bien des mêmes données !
    Mes 2 routines analysent les données du 1er onglet
    Si je les exécute sur mon PC, pas de problème
    Si je les exécute sur une autre machine, Plantage !

  17. #17
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    juin 2007
    Messages
    14 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2007
    Messages : 14 617
    Points : 30 097
    Points
    30 097
    Par défaut
    On fait un deuxième essai :
    Il faudrait indiquer quelle ligne de code est désignée par le débugage.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  18. #18
    Membre expert Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    mars 2007
    Messages
    1 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : mars 2007
    Messages : 1 463
    Points : 3 172
    Points
    3 172
    Par défaut
    Citation Envoyé par fclus Voir le message
    J'ai réouvert ce post parce que, sur certains PC, je reçois un message "incompatibilité de type"
    Normal, le fonctionnement code que tu avais mis en ligne est hasardeux, il dépend du contexte !

    Poste la totalité du code que tu utilises actuellement et indique la ligne qui "plante".
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

Discussions similaires

  1. Incompatibilité de type ListBox
    Par priest69 dans le forum Access
    Réponses: 1
    Dernier message: 16/11/2005, 12h19
  2. Message incompatibilité de type
    Par Daniel MOREAU dans le forum Access
    Réponses: 5
    Dernier message: 10/10/2005, 21h57
  3. incompatibilité de type
    Par zooffy dans le forum Access
    Réponses: 2
    Dernier message: 13/06/2005, 16h12
  4. Incompatibilité de types dans un formulaire
    Par ahage4x4 dans le forum ASP
    Réponses: 3
    Dernier message: 03/05/2005, 16h39
  5. [XSD] Incompatibilité des types xs:ID et xs:IDREF ?
    Par Cpt.FLAM dans le forum Valider
    Réponses: 6
    Dernier message: 08/04/2005, 15h54

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