Recherche sous condition puis importer

Bonjour à tous,

Dans le fichier ci-joint je souhaiterais créer, associer une macro au bouton "importer" de la feuille nommée "défauts" qui aurait la fonction suivante:

Aller sur la feuille de calcul nommée "Equipements". Rechercher les machines dont l'état est "3". Copier chaque ligne ou figure l'état "3" et coller dans la feuille "défauts". (J'ai effectué manuellement le copié/collé sur la feuille "défauts" pour plus de lisibilité sur ce que je souhaite automatiser).

Bien à vous.

14book1.xlsx (12.66 Ko)

Bonjour,

proposition de macro

Sub importer()
    Set wsi = Sheets("Equipements") ' wsi référence  feuille Equipements
    Set wso = Sheets("Défauts") ' wso référence  feuille Défauts
    dli = wsi.Range("c" & Rows.Count).End(xlUp).Row ' dli dernière ligne contenant des données sur la feuille wsi
    dlo = 9 ' compteur de lignes de la feuille défauts
    wsi.Rows(dlo).Copy wso.Rows(dlo) ' on copie les entêtes de wsi vers wso sur la même ligne
    For i = 10 To dli ' on parcourt toutes les lignes de wsi
        If wsi.Cells(i, 3) = 3 Then ' si le contenu de la colonne C est 3 
            dlo = dlo + 1 'on incrémente le compteur de lignes dlo
            wsi.Rows(i).Copy wso.Rows(dlo) on copie la ligne de wsi sur wso
        End If
    Next i ' ligne suivante
    Set wsi = Nothing
    Set wso = Nothing
End Sub

Bonjour,

D'une part je suis impressionné et d'autre part très reconnaissant. Je souhaiterais maintenant adapter ce code à plusieurs feuilles d'"équipements" qui contiennent différentes plages de recherche. Que dois-je ajouter/modifier pour que cette macro s'applique à toutes mes feuilles. Mon niveau VBA est proche de zéro.

Merci.

re-bonjour,

que dois-tu changer ? sans en savoir plus à propos de ton classeur, difficile à dire potentiellement toutes les lignes marquées d'une *

Sub importer()
   Set wsi = Sheets("Equipements") ' wsi référence  feuille Equipements *
   Set wso = Sheets("Défauts") ' wso référence  feuille Défauts
   dli = wsi.Range("c" & Rows.Count).End(xlUp).Row ' dli dernière ligne contenant des données sur la feuille wsi
   dlo = 9 ' compteur de lignes de la feuille défauts *
   wsi.Rows(dlo).Copy wso.Rows(dlo) ' on copie les entêtes de wsi vers wso sur la même ligne *
   For i = 10 To dli ' on parcourt toutes les lignes de wsi en commençant à la ligne 10 *
       If wsi.Cells(i, 3) = 3 Then ' si le contenu de la colonne C est 3  *
           dlo = dlo + 1 'on incrémente le compteur de lignes dlo
           wsi.Rows(i).Copy wso.Rows(dlo) on copie la ligne de wsi sur wso
        End If
    Next i ' ligne suivante
   Set wsi = Nothing
    Set wso = Nothing
End Sub

Je dois adapter le code pour une recherche sur plusieurs feuilles avec différentes plages.

Merci beaucoup.

Ci-joint un exemple.

12book1.xlsx (12.66 Ko)

bonjour,

il me semble que c'est le même fichier que celui que tu as mis dans ton 1er message.

Désolé pour cette bévue.

Ci-joint le bon fichier.

Je souhaiterais faire cette même opération sur des plages bien précise et dans plusieurs feuilles afin d'importer le tout dans "défauts".

Merci beaucoup.

19book1.xlsx (14.73 Ko)

re-re-bonjour,

voici un proposition

Sub importer()
    dlo = 9

    Set wso = Sheets("Défauts")    ' wso référence  feuille Défauts
    For Each wsi In Worksheets
        If Left(wsi.Name, 10) = "Equipement" Then
            dli = wsi.Range("c" & Rows.Count).End(xlUp).Row    ' dli dernière ligne contenant des données sur la feuille wsi

            If dlo = 9 Then wsi.Rows(dlo).Copy wso.Rows(dlo)    ' on copie les entêtes de wsi vers wso sur la même ligne *
            For i = 1 To dli    ' on parcourt toutes les lignes de wsi en commençant à la ligne 10 *
                If wsi.Cells(i, 3) = 3 Then    ' si le contenu de la colonne C est 3  *
                    dlo = dlo + 1    'on incrémente le compteur de lignes dlo
                    wsi.Rows(i).Copy wso.Rows(dlo)    'on copie la ligne de wsi sur wso
                End If
            Next i    ' ligne suivante
        End If
    Next
    Set wso = Nothing
    Set wsi = Nothing
End Sub

Merci beaucoup.

Je souhaiterais juste avoir une dernière information.

Mon classeur comporte plusieurs feuilles avec des noms complètements différents. Donc plutôt que d'appeler les 10 premières lettres communes de chaque feuille avec le dernier code fourni (d'après ce que j'ai compris), serait il possible d'appeler les feuilles avec leur nom à chaque fois. (ex: j'ai une feuille quie se nomme "BSM", l'autre "Chargement", l'autre "Sprinkler", etc.

Merci.

bonjour,

code modifié pour prendre en compte toutes les feuilles sauf la feuille "Défauts"

Sub importer()
    dlo = 9

    Set wso = Sheets("Défauts")    ' wso référence  feuille Défauts
   For Each wsi In Worksheets
        If wsi.name<>wso.name Then
            dli = wsi.Range("c" & Rows.Count).End(xlUp).Row    ' dli dernière ligne contenant des données sur la feuille wsi

            If dlo = 9 Then wsi.Rows(dlo).Copy wso.Rows(dlo)    ' on copie les entêtes de wsi vers wso sur la même ligne *
           For i = 1 To dli    ' on parcourt toutes les lignes de wsi en commençant à la ligne 1 *
               If wsi.Cells(i, 3) = 3 Then    ' si le contenu de la colonne C est 3  *
                   dlo = dlo + 1    'on incrémente le compteur de lignes dlo
                   wsi.Rows(i).Copy wso.Rows(dlo)    'on copie la ligne de wsi sur wso
               End If
            Next i    ' ligne suivante
       End If
    Next
    Set wso = Nothing
    Set wsi = Nothing
End Sub

Merci pour tous ces précieux renseignements.

Bonne soirée à vous.

Cordialement.

Rechercher des sujets similaires à "recherche condition puis importer"