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 :

Rechercher tous les 'D' en fonction d'une date et donner les noms correspondants [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    responsable RH
    Inscrit en
    Janvier 2016
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : responsable RH
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2016
    Messages : 28
    Points : 17
    Points
    17
    Par défaut Rechercher tous les 'D' en fonction d'une date et donner les noms correspondants
    Bonjour,

    je cherche à remplir une fenêtre qui me renseigne sur les personnes disponibles (matérialisé par la lettre 'D') à une date donnée.

    Ci joint un exemple simplifié du type de tableau sur lequel je souhaite faire la recherche avec le bouton qui sert à ouvrir le formulaire pour saisir la date de recherche et y afficher en résultat le nom des personnes disponibles.

    si quelqu'un à déjà un fichier à peu près similaire, je pourrais utiliser le code VBA pour l'adapter à mes critères....

    Merci de votre concours.
    Fichiers attachés Fichiers attachés

  2. #2
    Membre expérimenté Avatar de Gado2600
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Mai 2013
    Messages
    903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Office VBA

    Informations forums :
    Inscription : Mai 2013
    Messages : 903
    Points : 1 364
    Points
    1 364
    Par défaut
    Bonjour,

    J'ai regardé rapidement ton fichier et ton problème.

    Tout d'abord, ta plage de données nommée "DATE", ce n'est pas une bonne idée d'utiliser ce nom. En effet, tu as une fonction VBA et une formule Excel qui ont ce même nom. Je te conseille d'en choisir un autre.

    Pour répondre à ton problème, je te conseille de remplir ta combobox des dates en y intégrant le numéro de la colonne correspondante (dans une colonne masquée dans ta combobox).
    Lors de la sélection de l'une des dates, tu récupères cette fameuse valeur "colonne" et tu parcours chacune des lignes de ta colonne pour lister tes personnes selon tes critères.

    Tout cela nécessite du VBA.

    Cordialement,
    Le sabre est une arme. Le kendo est un art de tuer. Quelles que soient les belles paroles pour l'expliquer, telle est sa vérité.

  3. #3
    Membre à l'essai
    Homme Profil pro
    responsable RH
    Inscrit en
    Janvier 2016
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : responsable RH
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2016
    Messages : 28
    Points : 17
    Points
    17
    Par défaut
    Dans ta réponse, il y a une partie de la réflexion que j'avais faite :
    en effet, je voulais récupérer dans le menu deroulant via 'ListIndex' le numéro de colonne qui correspond à la date sélectionnée :

    - 1er problème, si j'utilise la formule 'ComboBox1.Value = Format(ComboBox1.Value, "dd MMMM")' pour conserver une date dans la liste déroulante alors le résultat de ComboBox1.ListIndex est toujours = -1

    - 2ème problème : je souhaite effectuer une boucle 'For' qui va comparer toutes les valeurs de la colonne sélectionnée et enregistrer dans un tableau 'array' les numéros de ligne dont la cellue="D"
    Comment créer le tableau qui aura une taille variable en fonction du nombre de cellule="D" ?
    Quelle est la formule VBA qui me donne le numéro de la ligne ?


    j'ai ajouté le fichier avec le problème n°1

    dans l'attente, je continu à chercher pour le problème N°2
    Fichiers attachés Fichiers attachés

  4. #4
    Membre expérimenté Avatar de Gado2600
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Mai 2013
    Messages
    903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Office VBA

    Informations forums :
    Inscription : Mai 2013
    Messages : 903
    Points : 1 364
    Points
    1 364
    Par défaut
    Re-bonjour,

    Je n'ai pas examiné en détails ton problème (faute de temps actuellement) mais, listindex te retourne -1 si tu n'as pas de sélection dans ta combobox.

    A mon avis, pour changer le format de tes dates dans ta combobox, il faut parcourir chacun des items présents dedans.
    Cependant, je ne suis pas certain de ce que j'avance mais, il risque d'y avoir conflit entre ta source de combobox (DATE) et le fait de modifier les valeurs présentes dedans.

    Concernant ton second point, pour définir un tableau numérique variable, tu as cette méthode (simple) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    dim k     as long
    dim i     as long
    dim tabDatas() as variant
    k = 0
    for i = 0 to 100
    if k = 0 then redim tabdatas(k) else redim preserve tabdatas(k)
    k = k +1
    next
    Tu ne définis pas la dimension de ton tableau en le déclarant.
    "Redim" redéfinit la taille de ton tableau et "Redim preserve" redéfinit la taille de ton tableau en conservant les valeurs présentent dedans.
    Attention ! Seul la dernière dimension du tableau est modifiable en "redim preserve" :
    Exemple :
    FAUX :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    redim tabDatas(1, k)
    redim preserve tabDatas(2, k)
    VRAI :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    redim tabDatas(1, k)
    redim preserve tabDatas(1, k)
    Bon courage
    Le sabre est une arme. Le kendo est un art de tuer. Quelles que soient les belles paroles pour l'expliquer, telle est sa vérité.

  5. #5
    Membre à l'essai
    Homme Profil pro
    responsable RH
    Inscrit en
    Janvier 2016
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : responsable RH
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2016
    Messages : 28
    Points : 17
    Points
    17
    Par défaut
    j'ai avancé un début de solution dans mon 2ème problème avec l'utilisation de tableau fixe ( voir fichier joint)
    il faudra que je modifie ce point pour utiliser un tableau variable...

    Dans le résultat à afficher à ma zone de texte (ligne par ligne), Comment utiliser le même nombre de ligne que le nombre de valeurs que contient mon tableau ?
    -> pour le moment, j'ai utilise 'Cells(tableau(0), 1).Value & Chr(13) & Cells(tableau(1), 1).Value' ...etc...

    Mais çà m'oblige à écrire à l'avance un nombre de ligne qui correspond à un tableau fixe...
    je voudrai pourvoir augmenter ma sélection en fonction des besoins ... par rapport à un tableau variable.


    merci
    Fichiers attachés Fichiers attachés

  6. #6
    Membre expérimenté Avatar de Gado2600
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Mai 2013
    Messages
    903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Office VBA

    Informations forums :
    Inscription : Mai 2013
    Messages : 903
    Points : 1 364
    Points
    1 364
    Par défaut
    Je pense que le problème que tu rencontres est principalement lié au fait que tu cherches à faire du fixe et non du variable dès le début.

    Dans mon précédent post, tu as la méthode pour avoir un tableau numérique de données dynamique.

    Dans les fonctionnalités qui te sont offertes dans les listes déroulantes et zones de listes, tu disposes de :
    • .AddItem : pour un ajout de données sur une colonne
    • .List : qui permet d'alimenter ta source de données par des données venant d'un tableau (comme un tableau numérique par exemple)


    Exemple :
    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
    dim k     as long
    dim i     as long
    dim tabDatas() as variant
    dim tabFinal() as variant
    k = 0
    for i = 0 to 100
    if k = 0 then redim tabdatas(1,k) else redim preserve tabdatas(1,k)
    tabdatas(0,k)= i
    tabdatas(1,k) = i*100/1000+500
    k = k +1
    next
     
    ' On interverti les lignes et les colonnes sinon, ce n'est pas le bon format de tableau
    ReDim tabFinal(LBound(tabDatas, 2) To UBound(tabDatas, 2), LBound(tabDatas, 1) To UBound(tabDatas, 1))
    tabFinal = WorksheetFunction.Transpose(tabDatas)
    Me.cbb.List = tabFinal
    Cordialement,
    Le sabre est une arme. Le kendo est un art de tuer. Quelles que soient les belles paroles pour l'expliquer, telle est sa vérité.

  7. #7
    Membre à l'essai
    Homme Profil pro
    responsable RH
    Inscrit en
    Janvier 2016
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : responsable RH
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2016
    Messages : 28
    Points : 17
    Points
    17
    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
    14
    15
    16
    17
    18
    19
    lig = Range("A3").End(xlDown).Row
    t = 0
    Dim tableau(lig)
    For i = 0 To lig
    tableau(i) = ""
    Next i
     
     
     For i = 3 To lig
     If Cells(i, col) = "D" Then
     tableau(t) = i
     t = t + 1
     End If
     Next i
     
     
    For t = 0 To lig
    If tableau(t) <> "" Then   Label1.AddItem = Cells(tableau(t), 1).Value
    Next t
    __________________________________________________________

    J'ai un message d'erreur avec Label1.AddItem
    a priori, je n'ai pas trouvé la bonne méthode pour insérer une ligne

  8. #8
    Membre expérimenté Avatar de Gado2600
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Mai 2013
    Messages
    903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Office VBA

    Informations forums :
    Inscription : Mai 2013
    Messages : 903
    Points : 1 364
    Points
    1 364
    Par défaut
    Bonjour,

    De ce que je lis, tu tentes d'insérer une ligne dans un label.
    Un label est un contrôle qui sert à afficher du texte et rien d'autre.
    Une combobox sert à afficher des données sous forme de liste/tableau.

    AddItem est pour une liste, pas pour un controle tel que le label ou la zone de texte.

    Cordialement,
    Le sabre est une arme. Le kendo est un art de tuer. Quelles que soient les belles paroles pour l'expliquer, telle est sa vérité.

  9. #9
    Membre à l'essai
    Homme Profil pro
    responsable RH
    Inscrit en
    Janvier 2016
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : responsable RH
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2016
    Messages : 28
    Points : 17
    Points
    17
    Par défaut
    j'ai réussi à faire ce que je cherchais....


    merci pour les conseils

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

Discussions similaires

  1. E-Mail dont les éléments sont fonction d'une variable
    Par j.p.mignot dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 15/01/2008, 18h52
  2. Réponses: 7
    Dernier message: 17/11/2007, 17h05
  3. [MySQL] Trier les résultats en fonction d'une colonne ordre
    Par eclipse012 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 05/01/2007, 13h59
  4. Recherche une ligne en fonction d'une date
    Par c+cool dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 20/09/2006, 15h30
  5. Réponses: 4
    Dernier message: 18/01/2006, 14h49

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