XL 2016 [RESOLU] Copie entre 2 classeurs sous 2 conditions

  • Initiateur de la discussion Initiateur de la discussion ivan27
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

ivan27

XLDnaute Occasionnel
Bonjour à tous,

Pourriez-vous m'aider pour une extraction en VBA s'il vous plaît ?

En pièce jointe 2 classeurs

Si le numéro de la colonne A du classeur2 est identique au numéro de la colonne N du classeur1 et que la valeur de la colonne B du classeur2 est égale à "EMLCFM", alors je copie la date de la colonne C du classeur2 dans la colonne AD du classeur1

et

Si le numéro de la colonne A du classeur2 est identique au numéro de la colonne N du classeur1 et que la valeur de la colonne B du classeur2 est égale à "LIVCFM", alors je copie la date de la colonne C du classeur2 dans la colonne AE du classeur1

Merci d'avance pour votre aide et bonne fin de journée

Ivan
 

Pièces jointes

Bonjour,

Ton fichier en retour.
Les 2 classeurs doivent être ouverts en même temps, sinon il faut faire autrement.
VB:
Option Explicit

Sub Extraire()
Application.ScreenUpdating = False
Dim t, t1, t2, i As Integer, j As Integer, k As Integer, m As Integer
Workbooks("classeur2 Ivan.xlsx").Activate
t = ActiveWorkbook.Sheets("extraction").Range("A2:C383")
ReDim t1(1 To UBound(t), 1 To UBound(t))
Workbooks("classeur1 Ivan.xlsm").Activate
[AO2].Resize(UBound(t, 1), 3) = t
    j = 1
        m = 1
For i = 1 To UBound(t)
    If Cells(i + 1, 42) = "EMLCFM" Then
        For k = 1 To UBound(t)
            If Cells(k + 1, 41) = Cells(m + 1, 14) Then
               t1(j, 1) = Cells(k + 1, 43)
                j = j + 1
                m = m + 1
            End If
        Next k
    End If
Next i
[AD2].Resize(UBound(t1, 1), 1) = t1

For i = 1 To UBound(t)
    If Cells(i + 1, 42) = "LIVCFM" Then
        If Application.CountIf(Range("n2:n23"), Cells(i + 1, 41)) Then
            Application.Index(Range("n2:n23"), Application.Match(Cells(i + 1, 41), Range("n2:n23"), 0), 1).Offset(, 17) = Cells(i + 1, 43)
        End If
    End If
Next i
[AO2].CurrentRegion.Delete
Application.ScreenUpdating = True
End Sub

A+
 

Pièces jointes

Bonjour le forum, Calvus,
Calvus, merci beaucoup pour ta proposition.
J'ai une erreur lors de l'exécution du code :

t1(j, 1) = Cells(k + 1, 43) = <L'indice n'appartient pas à la sélection>

Bonne journée à tous
Ivan
 

Pièces jointes

  • upload_2018-2-8_7-7-28.png
    upload_2018-2-8_7-7-28.png
    13.7 KB · Affichages: 44
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
12
Affichages
282
Réponses
5
Affichages
703
Réponses
2
Affichages
281
Retour