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 VBA copier puis poursuivre recherche suivante


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2019
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Octobre 2019
    Messages : 23
    Par défaut Recherche VBA copier puis poursuivre recherche suivante
    Bonjour,

    Voila ce que je souhaite faire.
    J'ai une feuille "import donnée" ds laquelle j'ai concaténé plusieurs fichier. Dans ce fichier apparait dans la colonne B a plusieurs reprises le mot "Consommation" et dessous des valeurs dont j'ai besoin de copier ( et ceux a plusieurs reprises, les fichiers etant superposés)
    Je veux via VBA faire une recherche de ce mot, puis qd il l;'a trouvé se décale de 3 lignes et 0 colonnes
    la je selectionne et copie ce qui m'interesse dans une autre feuille.
    Puis je reviens dans ma feuille import donnée relance la recherche du mot consommation et recommence.
    cette boucle dois durer 10 fois.

    Mon Pb quand je fais cette recherche il repart du haut du tableau.
    Merci pour votre aide.
    J’espère être clair

  2. #2
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Bonjour
    Regarde l'aide sur la méhode Find de l'objet Range. Tu as un exemple d'utilisation sur toutes les occurrences.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    With Worksheets(1).Range("a1:a500") 'A adapter
        Set c = .Find(2, lookin:=xlValues) 
        If Not c Is Nothing Then 
            firstAddress = c.Address 
            Do 
                c.Value = 5 'A adapter
                Set c = .FindNext(c) 
            Loop While Not c Is Nothing And c.Address<> firstAddress
        End If 
    End With
    Tu remplaceras la ligne c.Value=5 par c.offset(3).copy...

  3. #3
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2019
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Octobre 2019
    Messages : 23
    Par défaut
    Ok déjà merci , cela m'a bien aidé.
    Maintenant comment faut-il que je fasse pour que le copier coller se fasse à la suite de ce qui a déjà été copié et n'écrase pas la première copie ?

    voila 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
    Sub test()
     
    With Sheets(2).Range("B1:b1800") 'A adapter
        Set c = .Find(what:="Consommation")
        If Not c Is Nothing Then
            firstAddress = c.Address
     
            Do
                Range(c.Offset(3, 0), c.Offset(3, 1)).Select
                Range(Selection, Selection.End(xlDown)).Copy Sheets(3).Cells(2, 1) 'c.Value = Essai
                Set c = .FindNext(c)
            Loop While Not c Is Nothing And c.Address <> firstAddress
        End If
    End With
    End Sub

    merci

  4. #4
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonjour,

    à toi ô grand mercatog (Il y a du "Seigneur des Anneaux" dans ce nom là! ). J'espère que tu vas bien.

    Pour répondre à la question de notre ami.
    Rechercher après chaque copie la dernière cellule informée décalée d'une ligne.
    Pour une plus grande souplesse d'écriture, personnellement, j'utiliserais une fonction retournant cette cellule.

    Je viens de tester

    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
    Option Explicit
     
    Public Sub rp_chaine()
     
    Dim i As Long
     
    With Worksheets("lawks")
     
    For i = 1 To 10
            destcel("lawks", 1).Value = 1
    Next i
     
    End With
     
    End Sub
     
    Public Function destcel(nomfeuille As String, numcolonne As Integer) As Range
     
    With Worksheets(nomfeuille)
        Set destcel = .Cells(.Rows.Count, numcolonne).End(xlUp).Offset(1, 0)
    End With
     
     
    End Function
    (à adapter bien entendu)

    Dans le cas ici exposé, destcel serait la cellule de destination.

  5. #5
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Bonjour Cher Marcel,
    Merci pour tout. Voilà, ça peut rouler. Et vous? c'est désormais l'Italie!

    Pour compléter, sur la base du code de jeje
    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
    Sub Test()
    Dim FirstAddress As String
    Dim c As Range
     
    With Sheets(2)
        Set c = .Range("B:B").Find(what:="Consommation", LookIn:=xlValues, lookat:=xlPart)    'Regarde les arguments de la méthode find
        If Not c Is Nothing Then
            FirstAddress = c.Address
            Do
                .Range(c.Offset(3, 1), c.Offset(3, 0).End(xlDown)).Copy Sheets(3).Cells(Rows.Count, 1).End(xlUp)(2)
                Set c = .Range("B:B").FindNext(c)
            Loop While Not c Is Nothing And c.Address <> FirstAddress
        End If
    End With
    End Sub

  6. #6
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2019
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Octobre 2019
    Messages : 23
    Par défaut
    Merci
    a vous 2, je vais tester.
    Tres sympa de m'avoir repondu aussi rapidement

Discussions similaires

  1. [XL-2016] VBA / Copier-coller des données d'une feuille à une autre avec une recherche variable
    Par Sandrine888 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 11/09/2018, 17h42
  2. [XL-2007] VBA Copier/coller certaines cellules suivant deux conditions
    Par Franck76Dav dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 13/08/2017, 17h08
  3. [XL-2016] VBA - Copier ligne avec condition ( recherche partielle)
    Par Kiwi1110 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 27/07/2016, 10h10
  4. Réponses: 9
    Dernier message: 11/03/2014, 10h12
  5. Réponses: 7
    Dernier message: 02/02/2005, 08h04

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