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 :

Recherche valeurs dans un fichier


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Janvier 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2013
    Messages : 13
    Points : 4
    Points
    4
    Par défaut Recherche valeurs dans un fichier
    Bonjour,

    J'aimerais réaliser la chose suivante :
    J'ai un fichier Excel dans lequel se trouve plusieurs dizaines de feuilles dont leurs mises en pages sont identiques. Il existe 4 colonnes, seules certaines valeurs des cellules des colonnes A B & C changent, celles de colonne D ne change pas.
    J'aimerais rechercher une valeur particulière présente en colonne D dans tout le fichier. Et pour toutes occurrences trouvées, je voudrais copier les valeurs des cellules en colonne A correspondantes dans un fichier tiers.

    Exemple :

    Je recherche les @IPs du serveur 1, et donc je recherche la valeur "serveur1" :
    Onglet A:
    10.186.10.35 | 255.255.255.0 | 10.186.10.1 | serveur1
    Onglet B:
    10.186.11.35 | 255.255.255.0 | 10.186.11.1 | serveur1
    Onglet C:
    10.186.12.35 | 255.255.255.0 | 10.186.12.1 | serveur1

    j'aimerais que mon fichier tiers contiennent :
    10.186.10.35
    10.186.11.35
    10.186.12.35

    Je suis débutant. Et avec l'enregistrement de macro, je suis bloqué au fait de trouver une second valeur. Je reste toujours bloqué à la cellule de l'onglet A.

    D'avance merci de votre aide.

  2. #2
    Membre émérite
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Points : 2 657
    Points
    2 657
    Par défaut
    quel est ton fichier tiers ? Un autre fichier excel ? Déjà existant ? Que tu veux créer ? Dans lequel tu veux mettre tes valeurs les unes à la suite des autres ? Sur différents onglets ? etc...

    Je te propose de nous donner un fichier exemple dans lequel tu places ce que tu as, et ce que tu souhaites !

  3. #3
    Candidat au Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Janvier 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2013
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    Toutes ces valeurs doivent être coller sur un même onglet dans un fichier tiers qui existe déjà.

    Ces valeurs doivent être coller de la même manière que dans l'exemple.

  4. #4
    Membre émérite
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Points : 2 657
    Points
    2 657
    Par défaut
    Je te propose la macro suivante :
    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 recap()
    Dim cell_ori As Range
    Dim search As String
    Dim off As Integer
     
    search = InputBox("Which server do you want to track?", "Search")
    off = 0
     
    With Workbooks("test")
        For i = 1 To .Sheets.Count - 1
            With .Worksheets(i)
                Set cell_ori = .Range("D1")
                For j = 0 To .Columns(4).Find("*", , , , xlByColumns, xlPrevious).Row
                    If cell_ori.Offset(j, 0) = search Then
                        Worksheets("recap").Range("A1").Offset(off, 0) = cell_ori.Offset(j, -3)
                        off = off + 1
                    End If
                Next j
            End With
        Next i
    End With
     
    End Sub
    Tiens moi au courant !

  5. #5
    Candidat au Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Janvier 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2013
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    Voilà ma macro :
    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    Sub Macro1()
    '
    ' Macro1 Macro
    ' Correspondance @IP avec le fichier d'attribution des @IPs
    '
     
    '
    Dim Node_3963 As String
    Dim IP1_Node_3963 As String
     
    Windows("Cluster - easymk_v4.0.xlsm").Activate
    Node_3963 = Sheets("info").Range("E13").Value
     
    ' Ouverture du fichier
    Workbooks.Open Filename:= _
    "\\Atlas\C362736\User\Création Partition\IP-QC-TEST.xls"
    ' Recherche de mon nom de serveur dans tout le classeur
    Cells.Find(What:=Node_3963, After:=ActiveCell, LookIn:=xlFormulas, _
    LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
    MatchCase:=False, SearchFormat:=False).Activate
    ' IP1_Node_3963 = ActiveCell.Offset(0, -3).Range("A1").Select
    ' Je recupère la valeur correspondante que je copie
    ActiveCell.Offset(0, -3).Range("A1").Select
    Selection.Copy
    ' Je reviens sur le fichier du cluster et je colle ma valeur
    Windows("Cluster - easymk_v4.0.xlsm").Activate
    Sheets("info").Range("P13").Select
    ActiveSheet.Paste
     
    ' Je recommence la manipulation pour la copie d'une seconde valeur
    Windows("IP-QC-TEST.xls").Activate
    Cells.FindNext(After:=ActiveCell).Activate
    ActiveCell.Offset(0, -3).Range("A1").Select
    Selection.Copy
    Windows("Cluster - easymk_v4.0.xlsm").Activate
    Sheets("info").Range("P14").Select
    ActiveSheet.Paste
     
    Windows("IP-QC-TEST.xls").Activate
    Cells.FindNext(After:=ActiveCell).Activate
    Cells.FindNext(After:=ActiveCell).Activate
    ActiveCell.Offset(0, -3).Range("A1").Select
    Selection.Copy
    Windows("Cluster - easymk_v4.0.xlsm").Activate
    Sheets("info").Range("P15").Select
    ActiveSheet.Paste
     
    Windows("IP-QC-TEST.xls").Activate
    ActiveWindow.Close
     
    End Sub
    IP-QC-TEST.xls est le fichier avec les multiples onglets.
    Cluster - easymk_v4.0.xlsm est le fichier où ces informations doivent être copiés.

    J'ai modifié plusieurs informations depuis l'enregistrement automatique. Mais mon code bloque sur la recherche d'une seconde valeur.

    J'espère que c'est plus clair. Merci de votre aide.

  6. #6
    Membre émérite
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Points : 2 657
    Points
    2 657
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    'Nom de la Sub
    Sub recap()
    'Déclaration des variables
    Dim cell_ori As Range
    Dim search As String
    Dim off As Integer
     
    'Affiche une inputbox dans laquelle il faut placer le serveur à tracker
    search = InputBox("Which server do you want to track?", "Search")
    'Set off à 0
    off = 0
    'Ouvre ton classeur "IP-QC-TEST"
    'Remarque: je doute qu'avec le chemin que tu as placé tu arrives à bien l'ouvrir, mais si cela fonctionne, au temps pour moi.
    Workbooks.Open Filename:="\\Atlas\C362736\User\Création Partition\IP-QC-TEST.xls"
     
    'On travaille dans ce nouveau classeur
    With Workbooks("IP-QC-TEST")
        'De la feuille 1 à la feuille n (n étant le nombre de feuilles que tu as dans ton classeur)...
        For i = 1 To .Sheets.Count
            '... avec cette feuille...
            With .Worksheets(i)
                '... on set "cell_ori" (= cellule d'origine) sur la cellule D1
                Set cell_ori = .Range("D1")
                'On créer un boucle de 0 au nombre de ligne qu'on trouve dans la colonne D
                For j = 0 To .Columns(4).Find("*", , , , xlByColumns, xlPrevious).Row
                    'Si "D1" avec un offset de j lignes (soit le parcours de toute la colonne D) est équivalent à la recherche...
                    If cell_ori.Offset(j, 0) = search Then
                        '... alors dans le classeur "Cluster - easymk_v4.0", dans la feuille "Feuil1" dans la cellule A, on place la valeur souhaitée.
                        Workbooks("Cluster - easymk_v4.0").Worksheets("Feuil1").Range("A1").Offset(off, 0) = cell_ori.Offset(j, -3)
                        off = off + 1
                    End If
                Next j
            End With
        Next i
    End With
     
    End Sub
    Modifie ce que tu as a modifier, et ça devrait répondre à tes attentes.

  7. #7
    Candidat au Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Janvier 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2013
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    Merci beaucoup. Cela correspond à ce que je souhaite.

    Une fois les valeurs copiés dans mon fichier easymkxx, j'ai un message d'erreur :

    Erreur d'execution '91' :
    Variable objet ou variable de bloc non définie
    Et cela s'arrête sur la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For j = 0 To .Columns(4).Find("*", , , , xlByColumns, xlPrevious).Row
    Voilà le code un peu modifié :
    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
    'Nom de la Sub
    Sub recap()
    'Déclaration des variables
    Dim cell_ori As Range
    Dim search As String
    Dim off As Integer
     
    'Affiche une inputbox dans laquelle il faut placer le serveur à tracker
    search = "oawfap30"
    'Set off à 0
    off = 0
    'Ouvre ton classeur "IP-QC-TEST"
    Workbooks.Open Filename:="\\Atlas\C362736\User\Création Partition\IP-QC-TEST.xls"
     
    'On travaille dans ce nouveau classeur
    With Workbooks("IP-QC-TEST.xls")
        'De la feuille 1 à la feuille n (n étant le nombre de feuilles que tu as dans ton classeur)...
        For i = 1 To .Sheets.Count
            '... avec cette feuille...
            With .Worksheets(i)
                '... on set "cell_ori" (= cellule d'origine) sur la cellule D1
                Set cell_ori = .Range("D1")
                'On créer un boucle de 0 au nombre de ligne qu'on trouve dans la colonne D
                For j = 0 To .Columns(4).Find("*", , , , xlByColumns, xlPrevious).Row
                    'Si "D1" avec un offset de j lignes (soit le parcours de toute la colonne D) est équivalent à la recherche...
                    If cell_ori.Offset(j, 0) = search Then
                        '... alors dans le classeur "Cluster - easymk_v4.0.xlsm", dans la feuille "info" dans la cellule P15, on place la valeur souhaitée.
                        Workbooks("Cluster - easymk_v4.0.xlsm").Worksheets("info").Range("P15").Offset(off, 0) = cell_ori.Offset(j, -3)
                        off = off + 1
                    End If
                Next j
            End With
        Next i
    End With
     
    End Sub

  8. #8
    Membre émérite
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Points : 2 657
    Points
    2 657
    Par défaut
    Cela signifie que l'un de tes onglets n'a pas de valeur sur la colonne D. Es-tu sûr que TOUS tes onglets ont les "serveur..." dont tu parles sur la colonne D ? =)

    Si tu me réponds "oui sauf le dernier", alors écris seulement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For i = 1 To .Sheets.Count - 1
    Si tu me réponds "oui sauf les 2 derniers", alors écris seulement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For i = 1 To .Sheets.Count - 2
    Si tu me réponds "oui sauf le premier" (ce qui est impossible puisque tes valeurs s'écrivent correctement), alors écris seulement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For i = 2 To .Sheets.Count
    Bref, tu auras compris la logique !

  9. #9
    Candidat au Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Janvier 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2013
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    Et dernière question, si seuls certains de mes onglets (Exemple trois onglets sur les 30 que possèdent le fichier) contiennent cette valeur "serveur", quel serait le code à appliquer ?

    Encore merci pour ton aide précieuse.

  10. #10
    Membre émérite
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Points : 2 657
    Points
    2 657
    Par défaut
    Je n'ai pas compris...

    Ce code balaye tous tes onglets... Donc les trois onglets en question ?

  11. #11
    Candidat au Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Janvier 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2013
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    Désolé, j'ai mal interprété ta question :
    Es-tu sûr que TOUS tes onglets ont les "serveur..." dont tu parles sur la colonne D ? =)
    Les valeurs "serveurs" se trouvent bien dans les colonnes D.
    Je souhaite juste ne plus avoir l'erreur une fois le code exécuté.

  12. #12
    Membre émérite
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Points : 2 657
    Points
    2 657
    Par défaut
    Et c'est ce que je te dis : l'erreur vient très probablement du fait que l'un de tes onglets (parmi les 30, probablement le dernier) ne possède rien dans sa colonne D.

    Trois solutions :
    1) Tu regardes ces onglets qui n'ont rien dans leur colonne D et tu fais en sorte que ta boucle ne passe pas par ces onglets
    2) Gestion de l'erreur, à placer avant ta boucle :3) Test sur la dernière cellule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
            With .Worksheets(i)
                Set cell_ori = .Range("D1")
                Set lastcell = .Columns(4).Find("*", , , , xlByColumns, xlPrevious)
     
                If Not lastcell Is Nothing Then
                    For j = 0 To .Columns(4).Find("*", , , , xlByColumns, xlPrevious).Row
                        If cell_ori.Offset(j, 0) = search Then
                            Workbooks("Cluster - easymk_v4.0.xlsm").Worksheets("info").Range("P15").Offset(off, 0) = cell_ori.Offset(j, -3)
                            off = off + 1
                        End If
                    Next j
                End If
            End With
    Comme je te disais, si c'est seulement ton dernier onglet qui n'a rien dans sa colonne D (et qui n'aura jamais rien), je te propose :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For i = 1 To .Sheets.Count - 1
    Tiens moi au courant !

    En passant :
    Un petit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    With Workbooks("Cluster - easymk_v4.0.xlsm").Worksheets("info")
        If .Range("P15").Value <> "" Then
            .Range("P15", .Columns(16).Find("*", , , , xlByColumns, xlPrevious)).Clear
        End If
    End With
    avant le "With Workbooks("IP-QC-TEST.xls")" ne ferait pas de mal si tu fais une autre recherche ! ^^
    Ca efface toutes les cellules dans la range "P15" jusqu'à la dernière cellule non vide de la colonne P si le programme trouve quelque chose dans la cellule P15.

  13. #13
    Candidat au Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Janvier 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2013
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    Un grand merci pour ton aide.

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

Discussions similaires

  1. recherche valeur dans un fichier extérieur
    Par liop49 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 18/02/2009, 11h55
  2. Rechercher valeur dans fichier ini?
    Par jojo86 dans le forum Langage
    Réponses: 10
    Dernier message: 06/02/2009, 12h10
  3. recherche valeur dans fichier fermé
    Par afssaLERH dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 12/02/2008, 12h06
  4. Recherche de valeurs dans plusieurs fichiers
    Par Trooper2 dans le forum Macros et VBA Excel
    Réponses: 33
    Dernier message: 04/07/2007, 12h04
  5. [D6] Recherche d'une valeur dans un fichier
    Par Lung dans le forum Langage
    Réponses: 2
    Dernier message: 06/09/2005, 08h26

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