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 date dans colonne et renvoi la ligne correspondante


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 163
    Points : 49
    Points
    49
    Par défaut Rechercher date dans colonne et renvoi la ligne correspondante
    Bonjour,

    Je viens de commencer le langage VBA. Seul petit problème je ne comprend pas par où commencer! Comment cela fonctionne?

    Je vous explique. J'ai un document excel avec plusieurs entreprises et une date correspondante à chacune. Je voudrais créer une macro qui renvoi les entreprises correspondante à la date du jour....
    Est-ce possible en VBA? Est-ce compliqué?


    Merci d'avance

    Bonne journée

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Comme toujours il y a plusieurs solutions possibles, en voici une :

    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
    Sub essai()
    Dim plg As Range, cel As Range
    dl = Range("A65536").End(xlUp).Row
    Set plg = Range("A2:A" & dl)
    mdat = Format(Now, "dd/mm/yyyy")
    txt = ""
    For Each cel In plg
    If cel.Text = mdat Then
    adr = cel.Address
    Range(adr).Select
    ste = ActiveCell.Offset(0, 1).Value
    txt = txt & adr & " " & ste & Chr(10)
    End If
    Next
     
     If txt = "" Then
     MsgBox "Aucune correspondance n'a été trouvée", , "Sté(s) trouvée(s)"
     Else
     MsgBox txt, , "Sté(s) trouvée(s)"
     End If
     
     
    End Sub
    Code à coller dans la fenêtre VBA dans votre feuille.

    Colonnes à adapter. Ici on suppose que la date est en "A" et la société en "B"

    Bien évidemment vous avez demandé que ce soit fait en VBA car sinon cela est facile à faire avec Excel et "Données", "Filtre automatique".
    Dernière modification par Invité ; 12/10/2008 à 18h52.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 163
    Points : 49
    Points
    49
    Par défaut
    J'ai encore un petit problème, en faite la macro me renvoi les localisations des dates trouvés $A$5. Alors que je voudrais la société ( en B ) associé à la date
    Est ce que, si tu as le temps, tu pourrais rajouter quelque commentaire, afin je comprenne...et/ou des conseils...
    C'est "ma" première macro...
    Y a t il un autre moyen que les macro pour faire ce que j'ai décrit précédemment?

    Bonne Soirée

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Points : 855
    Points
    855
    Par défaut
    Chez moi ça marche: c'est chez toi qu'il y a un problème, ou alors tu t'es planté de colonne pour les entreprises...

    Ca me donne bien l'adresse de la date et l'entreprise. Si tu veux que l'entreprise, remplace ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    txt = txt & adr & " " & ste & Chr(10)
    par ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    txt = txt & ste & Chr(10)

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Comme le dit Decondelite, vous avez sûrement un problème de colonne si vous ne voyez pas le nom de la société et en dehors de ce problème vous pouvez modifier la ligne indiquée comme il le précise (j'avais ajouté l'adresse de la cellule devant le nom de la société car qui peut le plus peut le moins).

    Regardez ce qui se passe avec ce fichier exemple joint.

    En ce qui concerne votre question :

    Y a t il un autre moyen que les macro pour faire ce que j'ai décrit précédemment?
    j'avais déjà répondu au moins partiellement :

    Bien évidemment vous avez demandé que ce soit fait en VBA car sinon cela est facile à faire avec Excel et "Données", "Filtre automatique".
    Fichiers attachés Fichiers attachés

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 163
    Points : 49
    Points
    49
    Par défaut
    Je suis désolé, mais où est la ligne de code où il est spécifié que les entreprises sont en B. Car chez moi elle ne le sont pas, autant la plage de date j'ai réussi à la changer. Autant pour les sociétés je ne trouve pas...

    Peut-être un indice, mes entreprises sont en C et mes dates en AG...

    Une autre petit question, imaginons que le bouton se trouve sur un autre onglet (feuille 2 par ex) où vais je devoir inscrire cette modification?

    Je tiens à vous remerciez pour votre aide, et votre patience...


    PS: Quel est la différence entre sub et private sub?

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 163
    Points : 49
    Points
    49
    Par défaut
    J'ai résolu mon problème, ma colonne entreprise n'étant pas à droite de la colonne date, il fallait mettre ActiveCell.Offset(0, -30).Select. Car pour ma part ma colonne entreprise étant de 30 vers la gauche...

    J'aimerai juste solution mon problème: si je veux que mon bouton soit sur un autre onglet mais qu'il travail sur l'onglet précédent que dois je faire?

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Points : 855
    Points
    855
    Par défaut
    Adapter tous les objets qui s'y rapportent en rajoutant Sheets("Nom de ta feuille") devant.

    Ou alors tu actives ta feuille avant, mais tu risque d'avoir des problèmes car ta procédure s'exécute dans une procédure événementielle ratachée à la feuille dans laquelle se trouve le bouton.

    C'est à toi de voir.

  9. #9
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    En effet, vous ne pouvez pas utiliser une procédure événementielle d'une feuille pour traiter les données d'une autre feuille.

    Pour votre cas, dans la fenêtre VBA cliquer sur "Insertion" puis "Modules".
    Double-cliquez sur le module et collez ce code dans la fenêtre de droite :

    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
    Sub Recherch_ste()
    Dim plg As Range, cel As Range, wks
    'Remplacez éventuellement "Feuil2" par le nom de la feuille contenant les données
    Set wks = Worksheets("Feuil2")
    dl = wks.Range("A65536").End(xlUp).Row
    Set plg = wks.Range("A2:A" & dl)
    mdat = Format(Now, "dd/mm/yyyy")
    txt = ""
     
    wks.Activate
    For Each cel In plg
    If cel.Text = mdat Then
    adr = cel.Address
    Range(adr).Select
    ste = ActiveCell.Offset(0, -30).Value
    'txt = txt & adr & " " & ste & Chr(10)
    txt = txt & ste & Chr(10)
    End If
    Next
     
     If txt = "" Then
     MsgBox "Aucune correspondance n'a été trouvée", , "Sté(s) trouvée(s)"
     Else
     MsgBox txt, , "Sté(s) trouvée(s)"
     End If
     
    End Sub
    Ensuite vous pouvez conserver un bouton de commande et dans le code de la feuille sur laquelle se trouve ce bouton vous collez ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub CommandButton1_Click()
      Recherch_ste
      End sub
    Mais vous pouvez ne pas mettre ce code sur la feuille et remplacer simplement le bouton de commande, par exemple, par un rectangle que vous mettez en forme (texte, couleur, etc.) puis clic droit sur ce rectangle et cliquer sur ajouter une macro et cliquer sur la macro "Recherch_ste" et OK.

  10. #10
    Invité
    Invité(e)
    Par défaut
    Finalement je reviens sur ce que j'ai écrit précédemment.

    Decondelite m'a signalé qu'il utilisait sans problème ce genre de code sur une feuille pour traiter les données d'une autre feuille et j'en profite pour le remercier de son message.

    J'ai en effet essayé et cela fonctionne, il faut juste ajouter "wks" devant Range dans cette ligne :

    Vous avez donc le choix du code sur la feuille ou dans un module.

    Je ne sais plus pourquoi je pensais que cela ne fonctionnerai pas, je ne pense pourtant pas avoir été le seul à écrire ce genre de chose.

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Points : 855
    Points
    855
    Par défaut
    Ce que j'en sais, c'est que la syntaxe "courte" (référence implicite) pour désigner des plages de cellules ne fonctionne que pour la feuille dans laquelle la procédure événementielle se situe. Or ceci est différent des procédures classiques où la syntaxe courte réfère aux plages de la feuille active (comme indiqué dans l'aide en ligne).
    J'ai passé de longues heures de débogage poussé et sans succès, avant de m'en rendre compte par hasard.

    Ainsi, même si on active une autre feuille, on est obligé de préciser une référence à la feuille avant de travailler sur la cellule désirée, et par exemple on peut être amené à taper ActiveSheet.Range("A1").

    Bref, si on utilise la référence implicite (et ça marche pour tout pas que pour les Range) dans une procédure événementielle de feuille et que celle-ci n'est pas la feuille active, on peut s'attendre à des comportements de Excel assez bizarres...

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 163
    Points : 49
    Points
    49
    Par défaut
    Merci pour votre aide!

    J'ai encore deux petites questions:

    Est-il possible de, après avoir trouver les sociétés qui correspondent aux dates, réduire le tableau aux lignes des sociétés trouvées?

    Comment fonctionne la variable date, ici "now". Est-il possible de remplacer la date du jour, par la semaine dernière ou le mois dernier?

    Merci d'avance

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Points : 855
    Points
    855
    Par défaut
    Y a pas de miracle: va falloir que tu mettes la main à la pâte pour obtenir quelque chose, que tu le veuilles ou non. Faut que tu potasse le langage, et que tu te serve de l'aide en ligne de l'éditeur (accessible avec F1) en cherchant dedans: il constitue ta source d'information première.

    Tu as aussi des tutoriels et des FAQ expliquant en détail les dates.

    Je ne vais pas te pondre de code tout cuit, car si tu veux manipuler tes lignes et tes dates, il va falloir que ce soit toi qui bosse dessus. Nous, on pourra éventuellement t'aider si tu bloque, mais on ne va pas tout faire à ta place de A à Z c'est pas possible.

    Donc pour ta première question:
    L'enregistreur de macros est ton ami, et tu devrais t'en servir pour voir comment on fait pour supprimer des lignes en VBA. Sers-toi du code qu'il te donne comme base pour ne supprimer que les lignes que tu veux: il n'y a que quelques petites modifs à faire sur le code qu'on t'a déjà donné.

    Pour ta deuxième question:
    Tu as toutes les infos qu'il te faut dans l'aide en ligne. Cherche là pour tout ce qui est fonction de dates: "Documentation VB"->"Manuel de référence"->"Index/Listes"->"Résumé des mots clés de date et d'heure".
    Il y a également des tutos et des FAQ sur le site pour t'aider à manipuler les dates.

    Bref, essaye de chercher un peu par toi-même, et ensuite demande nous de l'aide si tu coince vraiment.

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 163
    Points : 49
    Points
    49
    Par défaut
    Je suis désolé de revenir encore vous demandez de l'aide mais je n'ai pas trouver comment masquer les cellules qui ne sont pas le resultat de la macro..

    Avez vous une idée?

  15. #15
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Bonjour,

    On peut masquer une ligne ou une colonne mais pas une cellule

    Cdlt

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 163
    Points : 49
    Points
    49
    Par défaut
    Désolé, je parlais bien de ligne...

  17. #17
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    J'ai lu en diagonale la discussion, essaie ceci :
    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
    Sub test()
    Dim i As Long, result As String
     
    With Sheets("tafeuille") '<-- adapter le nom de la feuille
        .Range("A:A").EntireRow.Hidden = False '<-- réaffichage de toutes les lignes
        For i = 2 to .Cells(Rows.Count, 33).End(xlUp).Row '<-- de la ligne 2 à la  dernière ligne de la colonne AG
            If .Cells(i, 33) = Date Then '<-- si la cellule contient la date du jour (Date renvoie la date du jour)
                result = result & Chr(10) & .Cells(i, 3) '<-- alors on mémorise le nom de la société
            Else
                .Rows(i).Hidden = True '<-- sinon on masque la ligne
            End If
        Next
    End With
     
    MsgBox "les sociétés correspondantes à la date du jour sont :" & vbLf & vbLf & result
     
    End Sub
    Cdlt

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 163
    Points : 49
    Points
    49
    Par défaut
    savez vous où je dois insérer ce code??

  19. #19
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Dans un module standard (Module1 par exemple)

    Ensuite pour l'exécuter, soit tu fais Alt+F8 --> test --> exécuter, soit tu insères un bouton sur une des feuilles (un bouton provenant du menu "boîte à outils contrôles") --> clic droit sur le bouton --> Visualiser le code --> tu obtiens
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub CommandButton1_Click()
     
    End Sub
    et tu écris le nom de la procédure entre les deux lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub CommandButton1_Click()
        test
    End Sub

  20. #20
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 163
    Points : 49
    Points
    49
    Par défaut
    Mais ce dernier code remplace l'autre?
    Il permet de faire les deux en même temps?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. recherche heure dans colonne date+heure
    Par lebowsky60 dans le forum Excel
    Réponses: 4
    Dernier message: 18/12/2013, 12h58
  2. [XL-2007] Automatisation de recherche dans colonne et copie des lignes
    Par looping06 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 15/08/2012, 16h19
  3. Réponses: 1
    Dernier message: 09/02/2012, 18h30
  4. Réponses: 1
    Dernier message: 02/09/2010, 16h05
  5. Recherche Date dans un String
    Par deniooo dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 18/07/2008, 12h05

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