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 :

Fonction Find avec Array [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Inscrit en
    Octobre 2008
    Messages
    240
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 240
    Par défaut Fonction Find avec Array
    Bonjour le forum,

    J'ai deux Arrays
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    TabQuoi = Array("TOTAL  D C", "PICKING", "KITTING", "RECEPTION", _
    "ABSENTS", "DIVERS", "CP", "RTT", "1/2 RTT", "Heures de picking", _
    "Nombre de lignes facturées", "Lignes facturées / heure / personne")
     
    TabVariable = Array(TotalDC, Picking, Kitting, Reception, _
    Absents, Divers, CP, RTT, DemiRTT, HeuresPicking, NbLignesFacturees, Index)
    J'aimerais monter une fonction find qui irait chercher chaque valeur de TabQuoi dans la feuille active et affecter le numéro de ligne de la recherche respectivement à chaque Variable de TabVariable. Et j'avoue que je coince...
    Je sais faire un find pour chaque valeur, mais j'aimerais simplifier ce code.

    Merci d'avance.

  2. #2
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Dim i As Byte
    Dim TabQuoi, TabVariable
    Dim c As Range, plage As Range
     
    Set plage = ActiveSheet.Range("A1:E200") 'à adapter
     
    For i = 0 To 11
        Set c = plage.Find(TabQuoi(i), LookIn:=xlValue, lookat:=xlWhole)
            If Not c Is Nothing Then TabVariable(i) = c.Row
        Set c = Nothing
    Next i
     
    'Utilisation de TabVariable

  3. #3
    Membre éclairé
    Inscrit en
    Octobre 2008
    Messages
    240
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 240
    Par défaut
    Ah c'est pour ça que je ne suis pas un membre chevronné. Merci, je vais tester!
    Est-ce qu'on peut calculer le nombre de valeurs dans un array d'ailleurs?

  4. #4
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    membre chevronné
    ce ne sont que des apparences, je t'assure
    par contre, la question n'est pas claire
    Est-ce qu'on peut calculer le nombre de valeurs dans un array d'ailleurs?

  5. #5
    Membre éclairé
    Inscrit en
    Octobre 2008
    Messages
    240
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 240
    Par défaut
    En fait, je me lance peut-être dans quelque chose trop difficile pour moi pour le moment, mais le nombre de valeurs dans chacun des Tab peut-être amené à varier...

    Dans ton code, tu fais aller i de 0 à 11 parce qu'il y a 12 valeurs dans mon TabVariable, non? J'aimerais détecter qu'un utilisateur encore moins doué que moi n'en a pas rajouté...

  6. #6
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut Plus de précision
    Edit:
    donne l'indice du dernier élément
    donne l'indice du premier élément
    Par défaut, le premier élément a l'indice 0
    Tu peux le changer par Option base au début de module

    donne le nombre d'éléments du tableau Tablo

    en règle générale le nombre d'éléments est donné par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Ubound(Tablo)-Lbound(Tablo)+1

  7. #7
    Membre éclairé
    Inscrit en
    Octobre 2008
    Messages
    240
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 240
    Par défaut
    Merci.

    J'ai testé, et j'ai un "L'indice n'appartient pas à la sélection" sur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Set c = Plage.Find(TabQuoi(i), LookIn:=xlValue, lookat:=xlWhole)
    que je ne comprends pas (forcément).

    Voilà mon code entier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Dim TabQuoi, TabVariable, Quoi, Variable
    Dim c As Range, Plage As Range
    TabQuoi = Array("TOTAL  D C", "PICKING", "KITTING", "RECEPTION", _
    "ABSENTS", "DIVERS", "CP", "RTT", "1/2 RTT", "Heures de picking", "Nombre de lignes facturées", "Lignes facturées / heure / personne")
    TabVariable = Array(TotalDC, Picking, Kitting, Reception, _
    Absents, Divers, CP, RTT, DemiRTT, HeuresPicking, NbLignesFacturees, Index)
     
    Set Plage = ActiveSheet.UsedRange
    For i = 0 To UBound(TabVariable)
        Set c = Plage.Find(TabQuoi(i), LookIn:=xlValue, lookat:=xlWhole)
            If Not c Is Nothing Then TabVariable(i) = c.Row
        Set c = Nothing
    Next i

  8. #8
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    C'est quoi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    TabVariable = Array(TotalDC, Picking, Kitting, Reception, _
    Absents, Divers, CP, RTT, DemiRTT, HeuresPicking, NbLignesFacturees, Index)
    ?
    Teste ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim TabQuoi, TabVariable, Quoi, Variable
    Dim c As Range, Plage As Range
    TabQuoi = Array("TOTAL  D C", "PICKING", "KITTING", "RECEPTION", _
    "ABSENTS", "DIVERS", "CP", "RTT", "1/2 RTT", "Heures de picking", "Nombre de lignes facturées", "Lignes facturées / heure / personne")
    TabVariable = Array(TotalDC, Picking, Kitting, Reception, _
    Absents, Divers, CP, RTT, DemiRTT, HeuresPicking, NbLignesFacturees, Index)
     
    msgbox UBound(TabVariable)

  9. #9
    Membre éclairé
    Inscrit en
    Octobre 2008
    Messages
    240
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 240
    Par défaut
    Le nom de mes différentes variables. J'aimerais que la macro cherche la ligne où se trouve "TOTAL DC", affecte ce numéro de ligne à la variable TotalDC, puis cherche la ligne où se trouve "Picking", et affecte ce numéro de ligne à la variable Picking... et ainsi de suite.

  10. #10
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Array(arglist)
    L'argument arglist est une liste de valeurs délimitée par des virgules attribuées aux éléments du tableau contenu dans la variable de type Variant. Si aucun argument n'est spécifié, un tableau de longueur nulle est créé.
    Tu ne peux pas passer ainsi (à ma connaissance)

    essaie ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim a As Integer, b As Integer
    Dim tabl
     
    tabl = Array(a, b)
    tabl(0) = 14
    tabl(1) = 25
     
    MsgBox a & "..............." & tabl(0)

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

Discussions similaires

  1. [Toutes versions] Fonction FIND avec plusieurs valeurs dans une meme cellule.
    Par Manu3100 dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 05/07/2015, 18h56
  2. Réponses: 4
    Dernier message: 15/06/2009, 15h31
  3. Fonction Find avec doublons
    Par Jeyjey1 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 28/02/2008, 08h30
  4. [VBA-E]Problème avec la fonction Find
    Par Mirx1 dans le forum Macros et VBA Excel
    Réponses: 17
    Dernier message: 27/04/2006, 18h43
  5. Problème avec une fonction et un array
    Par Neal Morse dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 28/08/2005, 12h04

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