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 array


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Inscrit en
    Février 2009
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 188
    Points : 89
    Points
    89
    Par défaut incompatibilité de type array
    Bonjour,
    je me retrouve devant une incompatibilité de type dans la gestion des tableaux.

    j'aimerais que l'utilisateur puisse déterminer quel array il va utiliser mais ça bloque au niveau de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For v = 0 To UBound(rep)
    dans le code suivant :

    Auriez-vous une idée svp ?
    merci

    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
    Sub Test()
    Dim derligne as Long
    Dim Valeurs_Possibles_08 as Variant, Valeurs_Possible_05 as Variant, rep as Variant
    Dim v As Integer
    Dim F As Boolean
     
     
    rep = InputBox("Ligne ? actuellement dispo 05, 08")
    rep = "Valeurs_Possibles_" & rep
     
    Valeurs_Possibles_08 = Array("Arret1", "Arret2", "Arret3")
    Valeurs_Possibles_05 = Array("Arret4", "Arret5", "Arret6", "Arret7")
     
    derligne = Range("A" & Rows.Count).End(xlUp).Row
    For i = derligne To 2 Step -1
    F = False
      For v = 0 To UBound(rep)
        If Cells(i, 8) Like rep(v) Then
          F = True
        End If
      Next v
      If F = False Then Rows(i).Delete
    Next i
    End Sub

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 661
    Points : 5 785
    Points
    5 785
    Par défaut
    Bonjour,
    Citation Envoyé par novice06 Voir le message
    Dim rep as Variant
    rep = InputBox("Ligne ? actuellement dispo 05, 08")
    rep = "Valeurs_Possibles_" & rep
    UBound(rep)
    Tu définis rep comme variant, puis tu lui affecte une valeur de type texte, ubound s'attend a une variable de type tableau, ça ne peut pas marcher
    J'aimerais bien aller vivre en Théorie, car en Théorie tout se passe bien.

  3. #3
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    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 : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    VBA ne sait pas gérer les macrovariables comme peuvent le faire certains langages.
    Il n'est donc pas possible de construire un nom de variable comme une chaine de caractère.

    Pour y palier, il faut utiliser des variables indicées.
    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
    Sub Test()
    Dim derligne as Long
    Dim Valeurs_Possibles(8) as Variant
    Dim rep as Long, i As Long
    Dim v As Long
    Dim F As Boolean
     
    Valeurs_Possibles(8) = Array("Arret1", "Arret2", "Arret3")
    Valeurs_Possibles(5) = Array("Arret4", "Arret5", "Arret6", "Arret7")
     
    While rep <> 8 Or rep<> 5
        rep = Application.InputBox(Prompt:="Ligne ? actuellement dispo 05, 08", Type:=1)
    Wend
     
    derligne = Range("A" & Rows.Count).End(xlUp).Row
    For i = derligne To 2 Step -1
      F = False
      For v = LBound(Valeurs_Possibles(rep), 1) To UBound(Valeurs_Possibles(rep), 1)
        If Cells(i, 8) Like Valeurs_Possibles(rep, v) Then
           F = True
           Exit For
      Next v
      If Not F Then Rows(i).Delete
    Next i
    End Sub
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  4. #4
    Membre régulier
    Inscrit en
    Février 2009
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 188
    Points : 89
    Points
    89
    Par défaut
    merci pour vos interventions

    le inputbox ne sert pas à définir le nombre d'item qui constituera le tableau mais le numéro de la ligne de bus que l'on voudra traiter comme par exemple 05 pour la Ligne 05

    Valeurs_Possibles_05 sera donc un tableau avec un certains nombres d'arrêt de bus correspondant à cette ligne de bus n° 05

    Dans l'absolu je voudrais pouvoir traiter plusieurs lignes de bus donc créer au préalable plusieurs tableaux sur le principe:

    Valeurs_Possibles_05
    Valeurs_Possibles_08
    Valeurs_Possibles_XX
    Valeurs_Possibles_XXX

    l'utilisateur indiquera avant le début du traitement la ligne de bus pour laquelle il souhaite avoir un résultat donc si tant est que les données soient disponible pour la ligne 520 parce que j'aurais créé d'abord un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Valeurs_Possibles_520 = array("arret1" , "arret2", "arret3")
    Donc si l'utilisateur indique 05 dans l'inputbox le traitement bouclera sur le Array Valeurs_Possibles_05,
    et si l'utilisateur indique 520 dans l'inputbox le traitement bouclera sur le Array Valeurs_Possibles_520.


    j'ai bien saisi la problématique de l'incompatibilité d'uns valeur string non attendu dans le traitement Ubound du tableau

  5. #5
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    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 : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par novice06 Voir le message
    le inputbox ne sert pas à définir le nombre d'item qui constituera le tableau mais le numéro de la ligne de bus que l'on voudra traiter comme par exemple 05 pour la Ligne 05
    C'est bien comme ça que je l'ai compris et que je l'ai interprété dans le code que j'ai fourni.

    La variable Valeurs_Possibles est un tableau à deux indice : le premier est ce que tu appelles "le numéro de la ligne" et le second est le nombre d'item pour ce numéro de ligne.
    La seule différence avec ta description, c'est qu'il n'y a pas de "0" devant le chiffre de la ligne.

    Prends au moins la peine de tester ce qu'on te propose.

    j'ai bien saisi la problématique de l'incompatibilité d'uns valeur string non attendu dans le traitement Ubound du tableau
    Etant donné la façon dont tu formule cette phrase, je ne suis pas sûr que tu ais compris.
    Le problème ne vient pas de UBound() mais de l'impossibilité de construire un nom de cellule dans le code.
    Dans ton code initial, même si tu remplaçais le UBound() par une valeur numérique, c'est la ligne suivante qui planterait à cause du rep(v) que VBA ne pourrait pas comprendre.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  6. #6
    Membre régulier
    Inscrit en
    Février 2009
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 188
    Points : 89
    Points
    89
    Par défaut
    C'est parce-que j'avais testé et eu un retour négatif de la procédure que je suis revenu vers vous sans aucunes animosités.
    Je prendrai la peine la prochaine fois d'être plus reconnaissant pour votre contribution en comprenant tout tout de suite et en essayant de ne pas passer pour un inculte dans ce langage de programmation
    Merci pour votre bienveillance

    Je réessaierai donc demain de réadapter votre proposition et peut-être que cela marchera

  7. #7
    Membre régulier
    Inscrit en
    Février 2009
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 188
    Points : 89
    Points
    89
    Par défaut
    bonjour,

    le code me renvoit plusieurs erreurs et également incompatibilités de type. Je vais essayer une approche différente pour contourner ce problème
    merci

Discussions similaires

  1. Incompatibilité de type ListBox
    Par priest69 dans le forum Access
    Réponses: 1
    Dernier message: 16/11/2005, 11h19
  2. Message incompatibilité de type
    Par Daniel MOREAU dans le forum Access
    Réponses: 5
    Dernier message: 10/10/2005, 20h57
  3. incompatibilité de type
    Par zooffy dans le forum Access
    Réponses: 2
    Dernier message: 13/06/2005, 15h12
  4. Incompatibilité de types dans un formulaire
    Par ahage4x4 dans le forum ASP
    Réponses: 3
    Dernier message: 03/05/2005, 15h39
  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, 14h54

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