Exporter Cellules d'1 colonne vers une autre colonne si conditions

Bonjour à tous,

J’ai besoin de votre aide pour apporter une solution à un problème que je n’arrives pas à résoudre, voici donc la situation :

J’ai deux feuilles sur lesquelles on va travailler, la feuille "Source" et la feuille "Destination".

La feuille "Source" se compose de 11 colonnes. Les colonnes sur lesquelles nous allons travailler au niveau de cette feuille sont les colonnes : "A" et "K"

La feuille "Destination" se compose de 30 colonnes. La seule colonne sur laquelle nous allons travailler est la colonne "A".

Le but du code (En vba s’il vous plait) est de transférer les valeurs des cellules de la colonne "A" de la feuille "Source" vers la colonne "A" de la feuille "Destination" si les trois conditions suivantes sont réunies :

La 1première condition : la valeur de la cellule de la colonne "A" de la feuille "Source" ne doit pas déjà figurer dans la colonne "A" de la feuille "Destination".

La 2e condition : la valeur de la cellule de la colonne "K" de la feuille "Source" de la même ligne que la cellule de la colonne "A" concernée doit être égale à "X" ou "x".

La 3e condition : la valeur de la cellule en colonne "A" de la feuille "Source" doit absolument se terminer par "M".

Je reste à votre disposition pour d’autres informations supplémentaires.

Sauf erreur de ma part, le résultat souhaité se trouve dans la colonne "A" de la feuille "Destination"

Les données que j’ai mis dans mon fichier joint sont réduites pour les besoins de ma demande, autrement dit, mes données sont plus importantes, d’où, l’utilisation d’un code qui s’exécute rapidement est souhaitable.

Merci pour vos contributions.

9male-elevage.xlsm (114.40 Ko)

Hello,

Une proposition de code

Sub TransfererDonnees()
    Dim wsSource As Worksheet, wsDest As Worksheet
    Dim dictDest As Object
    Dim lastRowSource As Long, lastRowDest As Long
    Dim i As Long
    Dim valA As String, valK As String

    ' variables
    Set wsSource = ThisWorkbook.Sheets("Source")
    Set wsDest = ThisWorkbook.Sheets("Destination")

    ' dico pour optimiser la vitesse sur gros volumes
    Set dictDest = CreateObject("Scripting.Dictionary")

    ' Dernières lignes utilisées
    lastRowSource = wsSource.Cells(wsSource.Rows.Count, "A").End(xlUp).Row
    lastRowDest = wsDest.Cells(wsDest.Rows.Count, "A").End(xlUp).Row

    ' trouver les valeurs déjà présentes
    For i = 1 To lastRowDest
        valA = Trim(wsDest.Cells(i, "A").Value)
        If Len(valA) > 0 Then
            dictDest(valA) = True
        End If
    Next i

    ' Parcours des lignes de la feuille Source
    For i = 1 To lastRowSource
        valA = Trim(wsSource.Cells(i, "A").Value)
        valK = Trim(wsSource.Cells(i, "K").Value)

        If Len(valA) > 0 Then
            ' Condition 1 : n'existe pas dans Destination
            If Not dictDest.exists(valA) Then
                ' Condition 2 : Colonne K = X ou x
                If LCase(valK) = "x" Then
                    ' Condition 3 : se termine par "M"
                    If UCase(Right(valA, 1)) = "M" Then
                        ' Ajouter à la prochaine ligne vide de Destination
                        lastRowDest = lastRowDest + 1
                        wsDest.Cells(lastRowDest, "A").Value = valA
                        dictDest(valA) = True ' éviter doublons futurs
                    End If
                End If
            End If
        End If
    Next 
End Sub

@+

Bonjour Baroute78,

Merci pour votre retour ainsi que le code proposé.

J’ai testé ce dernier, il répond à mes attentes et me satisfait totalement.

Merci également pour les commentaires à l’intérieur du code qui ne facilitent sa compréhension.

Salutations amicales.

Re,

J'ai voulu dire : Merci également pour les commentaires à l’intérieur du code qui me facilitent sa compréhension.

Rechercher des sujets similaires à "exporter colonne conditions"