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 :

Actions selon les valeurs d'un tableau [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 200
    Par défaut Actions selon les valeurs d'un tableau
    Bonjour

    Je suis sous Excel 2007 et je souhaite effacer une lgne en fonction de la non présence d'une valeur

    Mon code fonctionne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    For j = 850 To 2 Step -1
        Select Case Cells(j, i).Value
            'Case "V1", "V2", "V4", "V6", "V7"
            Case Else
        'Suppression 
                Rows(j).EntireRow.Delete
        End Select
    Pour faciliter la pérennité je souhaite mettre les valeurs Vx dans un tableau pour ne pas avoir a fouiller le code a chaque changement de valeur.
    Ainsi si, dans le futur, les valeurs changent (différentes, moins de valeurs, plus de valeurs) je n'aurai qu'a modifier les valeurs ou ajouter/supprimer des lignes au tableau

    Ma question est donc, comment interroger le tableau en question ?
    Nom du tableau : TAId

  2. #2
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    peux-tu montrer la procédure complète ?

    une boucle sur chaque colonne de chaque ligne ne me semble pas obligatoire ... via la fonction CountIf peut être

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 200
    Par défaut
    Peu importe, j'optimiserai après (je dois identifier dans quelle colonne chercher, je peux récupérer l'indice de la colonne, ce que je ne fais pas actuellement)
    Mon point de blocage concerne surtout le case pour voir si la valeur de ma cellule se situe dans mon tableau

  4. #4
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par Guigsounet Voir le message
    voir si la valeur de ma cellule se situe dans mon tableau
    alors adapte cet exemple puisque tu ne veux rien montrer, pas même à quoi correspond ton TAId

    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
    Public Function IsInArray(ValeurCherchée As Variant, ArrayDeRecherche As Variant) As Boolean
    ' fonction qui vérifie si une chaine de caractère est dans un Array
    ' retourne Vrai si c'est dedans, sinon retourne Faux
        If Not IsArray(ArrayDeRecherche) Then Exit Function
        IsInArray = InStr(1, vbNullChar & Join(ArrayDeRecherche, vbNullChar) & vbNullChar, vbNullChar & ValeurCherchée & vbNullChar) > 0
    End Function
     
     
    Sub toto()
    Dim TabVal()
    Dim MaChaine As String
    TabVal = Array("titi", "toto", "tata")
     
    MaChaine = "toto"
    MsgBox IsInArray(MaChaine, TabVal)
     
    MaChaine = "toutou"
    MsgBox IsInArray(MaChaine, TabVal)
    End Sub

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 200
    Par défaut
    Merci je regarde ça
    Le tableau est composé d'une colonne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Asset ID
    V1 
    V2
    V4
    V6
    V7
    Mon code ressemble à ça
    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
    For i = 1 To 15
     
    If Cells(1, i).Value = "Asset ID" Then
        Exit For
    End If
    Next i
     
    For j = 850 To 2 Step -1
        Select Case Cells(j, i).Value
            Case "V1", "V2", "V4", "V6", "V7"
            Case Else
        'Suppression 
                Rows(j).EntireRow.Delete
        End Select
    Next

  6. #6
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    j'ai du mal à suivre la mécanique en lisant ton code

    1) tu cherches la colonnes qui contient tes Asset ID : ok, bien que ce soit pas la façon la plus optimisée
    2) ensuite, tu boucles sur les lignes de la même feuille et cherche à supprimer celles qui ne contiennent pas une valeur Asset ID dans la colonne des Asset ID

    le point 2 m'interroge : si tu charges l'ensemble de tes Asset ID présents sur cette feuille, alors du coup aucune ligne ne va se supprimer ?
    il doit nous manquer une explication


    admettons que tu as 250 Asset ID possibles (V1 à V250), en fait tu voudrais supprimer les lignes ne contenant pas une liste plus restreintes d'asset id (par exemple : de V12 à V45 et V142) ?

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 01/05/2015, 03h39
  2. Trier un std::map selon les valeurs plutot que les clés
    Par dj.motte dans le forum SL & STL
    Réponses: 2
    Dernier message: 13/11/2004, 21h54
  3. comparer les valeurs d'un tableau
    Par nicerico dans le forum ASP
    Réponses: 4
    Dernier message: 19/08/2004, 11h20
  4. Compter les valeurs d'un tableau
    Par leeloo076 dans le forum ASP
    Réponses: 6
    Dernier message: 30/03/2004, 13h29

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