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 :

VBA_rechercher une valeur dans une liste + copier coller dans un tableau


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Chef de projet MOA
    Inscrit en
    Janvier 2020
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Janvier 2020
    Messages : 11
    Par défaut VBA_rechercher une valeur dans une liste + copier coller dans un tableau
    Bonjour à tous,

    Je vous sollicite car après de nombreux essais la macro que j'ai adapté ne fonctionne toujours pas, et peut être que vous aurez une piste pour m'aider !

    En Feuil1 , j'ai une liste de valeurs dans une colonne "B" si les 3 premiers caractères sont : "AAA", "BBB", "CCC" , je souhaite copier coller la valeur de la cellule dans un tableau en feuille 2. ( Les AAA dans la colonne A, les BBB dans la Colonne B , CCC dans la colonne C)

    Il faudrait que la macro lise la liste, et à chaque fois qu'elle identifie un AAA qu'elle passe à la ligne suivante du tableau et qu'elle remplisse le tableau avec les informations de AAA , BBB et CCC. Sachant qu'il est possible qu'il n' y ait pas de BBB ou de CCC pour un AAA.
    ANom : 67996_640b23801994d499714288.png
Affichages : 141
Taille : 1,5 Ko

    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
    Sub CutData()
    Application.ScreenUpdating = False
    Dim MotCle
    Dim i As Byte
    Dim C As Range
    Dim F As String
    Dim Ligne As Long
        'On définit les mots clés
        MotCle = Array("AAA", "BBB", "CCC")
        'On effectue la recherche de chaque mot clé dans la colonne A de la Feuil1
        For i = 0 To UBound(MotCle)
            Do
                Set C = Worksheets("Feuil1").Columns(1).Find(MotCle(i), LookIn:=xlValues, lookat:=xlPart)
                'Si le mot clé est trouvé
                If Not C Is Nothing Then
                    'On définit le nom de la feuille où sera effectuée la copie
                    F = "Feuil2" & (i + 2)
                    With Worksheets("Feuil2")
                        'On définit la ligne et la colonne où sera effectué le collage
                        Ligne = .Range("F" & Rows.Count).End(xlUp).Row + 1
     
                        'On effectue le copier / coller de la cellule
                        C.Cells.Copy .Range("A" & Ligne)
     
                    End With
                End If
            Loop While Not C Is Nothing
        Next i
        Application.ScreenUpdating = True 'Facultatif
    End Sub

    Merci de m'avoir lue et pour votre aide !
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    Bonjour
    tester avec prudence sur une copie
    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 Test()
    Dim F1 As Worksheet
    Dim F2 As Worksheet
    Set F1 = Sheets("Feuil1")
    Set F2 = Sheets("Feuil2")
    Dim derlig As Long
    Dim lig As Long
    Application.ScreenUpdating = False
    derlig = F1.Range("B" & Rows.Count).End(xlUp).Row
    For L = 2 To derlig
    If Left(F1.Cells(L, 2), 3) = "AAA" Then
    lig = F2.Range("A" & Rows.Count).End(xlUp).Row + 1
    F1.Cells(L, 2).Copy
    F2.Cells(lig, 1).PasteSpecial Paste:=xlPasteValues
    Application.CutCopyMode = False
    ElseIf Left(F1.Cells(L, 2), 3) = "BBB" Then
    lig = F2.Range("B" & Rows.Count).End(xlUp).Row + 1
    F1.Cells(L, 2).Copy
    F2.Cells(lig, 2).PasteSpecial Paste:=xlPasteValues
    Application.CutCopyMode = False
    ElseIf Left(F1.Cells(L, 2), 3) = "CCC" Then
    lig = F2.Range("C" & Rows.Count).End(xlUp).Row + 1
    F1.Cells(L, 2).Copy
    F2.Cells(lig, 3).PasteSpecial Paste:=xlPasteValues
    Application.CutCopyMode = False
    End If
    Next L
    Application.ScreenUpdating = True
    End Sub

  3. #3
    Membre averti
    Femme Profil pro
    Chef de projet MOA
    Inscrit en
    Janvier 2020
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Janvier 2020
    Messages : 11
    Par défaut
    Bonjour BENNASR!

    Merci beaucoup pour ton retour ça fonctionne ( et bien mieux que le mien merci

    Par contre juste un petit détail, est il possible de faire en sorte que la macro suive la chronologie de la liste. Que lorsqu'elle "rencontre un AAA" dans la liste elle passe à la ligne suivante pour remplir le tableau ?
    J'ai fait un exemple ci dessous pour être plus explicite Nom : 67996_640b38c1dcf6b095169965.png
Affichages : 127
Taille : 1,7 Ko

    Merci bonne après midi

  4. #4
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    Attention ça n’efface pas les données de la feuille 2 avant l'exécution
    tu peux effacer feuille2 avant d'envoyer les données avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    F2.Cells.ClearContents
    F2.Cells(2, 1) = "titre1"
    F2.Cells(2, 3) = "titre2"
    F2.Cells(2, 3) = "titre3"
    ce qui donne :
    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
    Sub Test()
    Dim F1 As Worksheet
    Dim F2 As Worksheet
    Set F1 = Sheets("Feuil1")
    Set F2 = Sheets("Feuil2")
    F2.Cells.ClearContents
    F2.Cells(2, 1) = "titre1"
    F2.Cells(2, 3) = "titre2"
    F2.Cells(2, 3) = "titre3"
    Dim derlig As Long
    Dim lig As Long
    Application.ScreenUpdating = False
    derlig = F1.Range("B" & Rows.Count).End(xlUp).Row
    For L = 2 To derlig
    If Left(F1.Cells(L, 2), 3) = "AAA" Then
    lig = F2.Range("A" & Rows.Count).End(xlUp).Row + 1
    F1.Cells(L, 2).Copy
    F2.Cells(lig, 1).PasteSpecial Paste:=xlPasteValues
    Application.CutCopyMode = False
    ElseIf Left(F1.Cells(L, 2), 3) = "BBB" Then
    lig = F2.Range("B" & Rows.Count).End(xlUp).Row + 1
    F1.Cells(L, 2).Copy
    F2.Cells(lig, 2).PasteSpecial Paste:=xlPasteValues
    Application.CutCopyMode = False
    ElseIf Left(F1.Cells(L, 2), 3) = "CCC" Then
    lig = F2.Range("C" & Rows.Count).End(xlUp).Row + 1
    F1.Cells(L, 2).Copy
    F2.Cells(lig, 3).PasteSpecial Paste:=xlPasteValues
    Application.CutCopyMode = False
    End If
    Next L
    Application.ScreenUpdating = True
    End Sub
    mais normalement la code respecte la chronologie

  5. #5
    Membre averti
    Femme Profil pro
    Chef de projet MOA
    Inscrit en
    Janvier 2020
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Janvier 2020
    Messages : 11
    Par défaut
    Oui elle respecte la chronologie colonne par colonne , mais ce que je voudrais c'est qu'à chaque fois qu'il y a un AAA elle passe à la ligne suivante pour remplir les AAA, BBB, et CCC. Enfaite les BBB et les CCC doivent être sur la même ligne dans le tableau que le AAA qui les précède dans la liste.
    j'ai fait un petit exemple, mais je ne sais pas si je suis claire...

    Nom : Capture.PNG
Affichages : 118
Taille : 22,8 Ko

    Merci pour ton aide en tout cas

  6. #6
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    mais si il trouve une seule AAA et ensuite 2 BBB ou 2 CCC ?????

    si non
    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
    Sub Test()
    Dim F1 As Worksheet
    Dim F2 As Worksheet
    Set F1 = Sheets("Feuil1")
    Set F2 = Sheets("Feuil2")
    F2.Cells.ClearContents
    F2.Cells(2, 1) = "titre1"
    F2.Cells(2, 2) = "titre2"
    F2.Cells(2, 3) = "titre3"
    Dim derlig As Long
    Dim lig As Long
    Application.ScreenUpdating = False
    derlig = F1.Range("B" & Rows.Count).End(xlUp).Row
    For L = 2 To derlig
    lig = F2.Range("A" & Rows.Count).End(xlUp).Row + 1
    If Left(F1.Cells(L, 2), 3) = "AAA" Then
    F1.Cells(L, 2).Copy
    F2.Cells(lig, 1).PasteSpecial Paste:=xlPasteValues
    Application.CutCopyMode = False
    ElseIf Left(F1.Cells(L, 2), 3) = "BBB" Then
    'lig = F2.Range("B" & Rows.Count).End(xlUp).Row + 1
    F1.Cells(L, 2).Copy
    F2.Cells(lig, 2).PasteSpecial Paste:=xlPasteValues
    Application.CutCopyMode = False
    ElseIf Left(F1.Cells(L, 2), 3) = "CCC" Then
    'lig = F2.Range("C" & Rows.Count).End(xlUp).Row + 1
    F1.Cells(L, 2).Copy
    F2.Cells(lig, 3).PasteSpecial Paste:=xlPasteValues
    Application.CutCopyMode = False
    End If
    Next L
    Application.ScreenUpdating = True
    End Sub

Discussions similaires

  1. Faire une macro copier coller dans une feuille Calc
    Par jackouBZH dans le forum Logiciels Libres & Open Source
    Réponses: 5
    Dernier message: 13/04/2020, 19h52
  2. problème de valeur dans un tableau se trouvant dans une liste
    Par alaninho dans le forum Général Python
    Réponses: 5
    Dernier message: 16/06/2011, 10h17
  3. Réponses: 2
    Dernier message: 07/10/2009, 21h38
  4. Réponses: 2
    Dernier message: 29/06/2007, 14h49
  5. Réponses: 21
    Dernier message: 28/02/2006, 15h23

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