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 une valeur dans un tableau pour récupérer le contenu dans une autre feuille excel


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 28
    Points : 12
    Points
    12
    Par défaut Rechercher une valeur dans un tableau pour récupérer le contenu dans une autre feuille excel
    Bonjour,

    Voilà je souhaiterai rechercher tous les intitulés "101 - Épaisseur Zone 1" à "101 - Épaisseur Zone 13" et récupérer les valeurs des cellules qui sont juste en face (1.8254766 à 1.9041447). Je tiens à préciser que ces 13 valeurs sont toujours classées dans l'ordre "101 - Épaisseur Zone 1" à "101 - Épaisseur Zone 13" mais elles ne sont jamais à la même place. J'entends par là qu'elles peuvent se retrouver sur la plage A1:A13 comme elles peuvent se retrouver sur la plage A5012:A5024 etc.... (les valeurs que je souhaite donc récupérer sont celles en rouges sur l'image suivante :

    Nom : Sans titre.png
Affichages : 328
Taille : 10,2 Ko

    Je souhaiterais les récupérer sous la forme suivante (sachant que j'ai environ 100 fichiers excel ou je dois récupérer ces 13 valeurs qui sont toujours dans la colonne A mais jamais sur la même plage) :

    Nom : Sans titre1.png
Affichages : 309
Taille : 40,1 Ko

    J'espère avoir été claire dans mes explications.
    Merci à ceux qui prendront le temps de lire cette discussion et peut-être d'apporter quelques éléments de réponse.

    Yoann.

  2. #2
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    Bonjour à toi,

    D'après ce que j'ai compris elle sont par contre toujours en colonne A, donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        Dim zone As Range
     
        Set zone = Range("A:A").Find("101 - Épaisseur Zone 1").Resize(13)
        zone.Select

  3. #3
    Membre éprouvé
    Homme Profil pro
    Directeur
    Inscrit en
    Avril 2003
    Messages
    724
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur

    Informations forums :
    Inscription : Avril 2003
    Messages : 724
    Points : 1 166
    Points
    1 166
    Par défaut
    Salut,

    Je te passe un élément de réponse.
    Dans une feuille, tu vas chercher toutes les occurrences de ["101 - Épaisseur Zone xxxxx]
    Pour cela, tu peux utiliser la méthode Find.
    Seulement, il faut lui faire chercher toutes les occurrences.
    Tu peux t'inspirer de la procédure [chercherDansPlage_AllOccurences] ci-dessous.
    Cordialement,

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    Sub chercherDansPlage_AllOccurences()
        ' variable objet
        Dim rng As Range ' référencer la plage de cellules
        Dim rngData As Range ' référencer la cellule qui contient la donnée cherchée
     
        ' variables simples
        Dim s1stAdresse As String
     
        ' turn off the auto calculation
        Application.Calculation = xlCalculationManual
     
        ' référencer la bdd
        Set rng = Range("A1").CurrentRegion
     
        ' chercher une data dans cette plage
        ' rng.Find "AZRIA", , , , , , True
        ' NB: régler LookAt suivant que l'on cherche dans la totalité ou sur une partie
        ' du contenu de la cellule
        Set rngData = rng.Find(What:="AMELLAL", MatchCase:=True, LookAt:=xlWhole, LookIn:=xlValues)
     
        If Not rngData Is Nothing Then
            s1stAdresse = rngData.Address ' permet d'arrêter la recherche dès qu'on revient sur la première celllule
            Debug.Print s1stAdresse
     
            Do
                Set rngData = rng.FindNext(rngData)
                If rngData.Address <> s1stAdresse Then
                    Debug.Print rngData.Address
                End If
            Loop While Not rngData Is Nothing And rngData.Address <> s1stAdresse
     
        End If
     
        ' turn on the auto calculation
        Application.Calculation = xlCalculationAutomatic
     
     
    End Sub

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 28
    Points : 12
    Points
    12
    Par défaut
    Bonjour Philippe PONS,
    J'ai analysé le code que tu m'as envoyé et j'ai fais juste deux modifications que j'ai crois avoir compris (en rouge) et je suppose que toute la partie bleue sert à se déplacer dans la base de donné si le programme ne trouve rien ?

    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
    28
    29
    Sub chercherDansPlage_AllOccurences()
        Dim rng As Range
        Dim rngData As Range
     
        Dim s1stAdresse As String
     
        Application.Calculation = xlCalculationManual
     
        Set rng = Range("A1:A3000").CurrentRegion
     
        Set rngData = rng.Find(What:="101 - Epaisseur Zone 1", MatchCase:=True, LookAt:=xlWhole, LookIn:=xlValues)
     
        If Not rngData Is Nothing Then
            s1stAdresse = rngData.Address 
            Debug.Print s1stAdresse
     
            Do
                Set rngData = rng.FindNext(rngData)
                If rngData.Address <> s1stAdresse Then
                    Debug.Print rngData.Address
                End If
            Loop While Not rngData Is Nothing And rngData.Address <> s1stAdresse
     
        End If
     
        Application.Calculation = xlCalculationAutomatic
     
     
    End Sub
    Je pense maintenant qu'il faut que je rajoute (si j'ai bien compris) la condition que je souhaite effectuer dans le cas où il trouverait la valeur souhaitée ?

    Merci de ta réponse.

    Yoann

  5. #5
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    @yoann33 : Tu n'as pas bien lut le code...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Not rngData Is Nothing Then
    Tu as réellement plusieurs occurrences de chaque "101 - Épaisseur Zone 1" dans un même fichier ?
    Ou dans tes environs 100 fichiers tu est sur qu'il n'y a qu'une seule fois "101 - Épaisseur Zone 1" dans chaque fichier ?

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 28
    Points : 12
    Points
    12
    Par défaut
    Bonjour Cerede2000,

    Il n'y a en effet qu'une seule fois "101 - Épaisseur Zone 1" dans chaque fichier.

  7. #7
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    C'est bien ce que j'avais comprit au départ.... As tu essayé mon code post #2 ?

    Ceci suffit, j'ai commenté tu devrait pouvoir t'en sortir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub recupDonnees()
        Dim zone As Range
     
        Set zone = [A:A].Find("101 - Épaisseur Zone 1") 'Cherche 101 - Épaisseur Zone 1 dans TOUTE la colonne A
        If Not zone Is Nothing Then 'Si j'ai trouvé, au cas ou un fichier n'en aurais pas pour ne pas avoir d'erreur
            set zone = zone.Resize(13) 'Je redimensionne ma zone pour prendre les 13 lignes nécéssaires...
            zone.Select 'Je selectionne les lignes pour tester et voir que c'est bien ce que je veux :)
        End If
    End Sub
    Tu n'indiques pas ce que tu souhaites faire après avec ces données.

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 28
    Points : 12
    Points
    12
    Par défaut
    Merci je comprend mieux en effet.

    Bah après avoir trouvé chaque valeurs dans chacune des 100 feuilles (ou fichiers) , je veux les récupérer (en ligne) pour les mettre dans une autre feuille sous ce format là :
    Nom : Sans titre1.png
Affichages : 269
Taille : 40,1 Ko

    je ne sais pas si tu as compris ce que je souhaitais faire ?

  9. #9
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    Dans ce cas c'est très simple !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub recupDonnees()
        Dim zone As Range
     
        Set zone = [A:A].Find("101 - Épaisseur Zone 1") 'Cherche 101 - Épaisseur Zone 1 dans TOUTE la colonne A
        If Not zone Is Nothing Then 'Si j'ai trouvé, au cas ou un fichier n'en aurais pas pour ne pas avoir d'erreur
            Set zone = zone.Offset(ColumnOffset:=1).Resize(13) 'Je selectionne la seconde colonne et redimensionne ma zone pour prendre les 13 lignes nécéssaires...
            zone.Copy 'Copie les données
            [A20].PasteSpecial Paste:=xlPasteValues, Transpose:=True 'Les colles avec tranpose pour les mettre en ligne
        End If
    End Sub
    Il te reste à choisi ou coller les données :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     [A20].PasteSpecial Paste:=xlPasteValues, Transpose:=True

  10. #10
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 28
    Points : 12
    Points
    12
    Par défaut
    si je souhaite les copier/coller d'une feuille à l'autre (voire d'un fichier à l'autre) je fais comment ?
    j'essaye ton programme

  11. #11
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    Non là après faut quand même pas abuser....
    Copier/coller entre feuilles ce n'est pas dur à trouver.
    Même inter-classeur tu va très facilement avoir ce qu'il faut avec un minimum de recherche.
    http://excel.developpez.com/faq/?page=PressePapier

  12. #12
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 28
    Points : 12
    Points
    12
    Par défaut
    merci de ton aide ça marche parfaitement bien,
    Pour ce qui est de passer d'un fichier à l'autre j'ai déjà une version presque finie mais qui elle recopiait seulement une plage de données définie (A1:A14) par exemple et qui travaillait avec les fichiers fermés donc je vais essayer de l'adapter dans ma boucle et de voir comment tout cela peut tourner.
    En tout cas merci à toi

  13. #13
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    Ah ben voila !
    Tu as donc tout ce qu'il te faut pour réussir complètement

  14. #14
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 28
    Points : 12
    Points
    12
    Par défaut
    Oui exactement
    Merci

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

Discussions similaires

  1. [Débutant] annotation dans le model pour tester l'unicité d'une valeur
    Par mannou87 dans le forum ASP.NET MVC
    Réponses: 9
    Dernier message: 29/05/2013, 16h31
  2. Réponses: 6
    Dernier message: 02/02/2013, 11h12
  3. Erreur 1004 dans le code pour supprimer le contenu d'une cellule
    Par pimpom81 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 09/08/2012, 17h07
  4. Liens dans un tableau qui change le contenu d'un autre case da ce tableu
    Par maxtofurious dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 13/06/2007, 17h09
  5. Réponses: 7
    Dernier message: 12/06/2007, 14h59

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