Chercher une valeur dans un classeur et ajouter la ligne.

taze33

XLDnaute Nouveau
Bonjour à tous

Ayant déjà plusieurs fois profité de votre expertise et de vos conseils, aujourd'hui je viens de m'inscrire, car pour une fois je ne trouve pas de réponse à mon problème. Je précise que je ne suis pas un spécialiste de VBA et vous demande d'être indulgent si vous trouvez des énormités.
Voici donc mon problème :

J’ai un Userform qui pointe sur le fichier Essai1 avec une ComboBox qui m’affiche les données contenues dans les cellules.
J’ai fait un bouton mise à jour et je souhaite en appuyant sur celui-ci que :
1) Ouvrir le fichier Essai2
2) Trier la Feuil1 par rapport à la colonne A (dans l’ordre croissant)
3) Faire un vlookup de la colonne A dans la colonne A du fichier Essai1.Feuil1
4) Ajouter la ligne du fichier Essai2 qui ne serait pas présente dans le fichier Essai1.

J'ai réussis à faire ce que je veux en mettant la Feuil1 du fichier Essai2 et dans le classeur Essai1 en feuille2.
et en ajoutant un formule =SI(ESTERREUR(RECHERCHEV(A2;Feuil1!$A:$A;1;FAUX));1;0)Recherch(V) dans la colonne K de la feuil2. Cette solution ne me convient pas.
J'ai donc essayer de rajouter en l'adaptant en vlookup mais ça bloque.

Vous trouverez en pièce jointe les deux fichiers (ils ont été remaniés ainsi que le Userform afin que pouvoir vous les joindre)

Je vous remercie par avance du temps que vous pourrez m'accorder :)
 

Pièces jointes

  • Essai1.xlsm
    37.2 KB · Affichages: 21
  • Essai2.xlsm
    10.5 KB · Affichages: 19

vgendron

XLDnaute Barbatruc
Un début avec ce que j'ai compris.. (peut etre l'inverse de ce que tu souhaites faire en fait..

VB:
Private Sub CommandButton2_Click()
Dim WbOrigine As Workbook 'Classeur Essai1
Dim WsOrigine As Worksheet
Dim WbDestination As Workbook 'Classeur Essai2
Dim WsDestination As Worksheet

Dim i As Integer
Dim j As Integer
Dim x As Integer
'Dim LigneD As Long
'Dim ligneA As Long
Dim FinOri As Long
Dim FinDest As Long

Dim temp As Variant
Dim ici As Variant

Set WbOrigine = ActiveWorkbook
Set WsOrigine = WbOrigine.ActiveSheet
FinOri = WsOrigine.Range("A" & Rows.Count).End(xlUp).Row 'on récupère la dernière ligne du classeur 1

'Workbooks.Open ("D:\Projet POIC\Essai2.xlsm") 'Repertoire à modifier en fonction d'ou vous cpierez les fichhiers
'MsgBox "le fichier est ouvert" 'juste pour tester
Workbooks("Essai2.xlsm").Activate 'à la place du workbook open au dessus, car pour les essais, le second fichier est déjà ouvert
Set WbDestination = ActiveWorkbook
Set WsDestination = WbDestination.Worksheets("BCS")
FinDest = WsDestination.Range("A" & Rows.Count).End(xlUp).Row 'on récupère la dernière ligne du classeur 2

With WsOrigine
    'WsOrigine.Range("A1:K" & FinOri).Select 'on selectionne le tablo du classeur Origine pour le trier sur la colonne A
    .Sort.SortFields.Clear 'on supprime les tris actifs
    .Sort.SortFields.Add Key:=Range("A1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortTextAsNumbers
    With .Sort
        .SetRange Range("A1:K" & FinOri)
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End With


Workbooks("Essai1.xlsm").Activate
 '1ere ligne vide archives
'ligneA = WsOrigine.Range("A" & Rows.Count).End(xlUp).Row + 1 'Sheets("Feuil1").Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row + 1
'derniere lignes données
'LigneD = WsDestination.Range("A" & Rows.Count).End(xlUp).Row '.Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row

For i = 2 To FinDest
    Set ici = WsOrigine.Range("A:A").Find(WsDestination.Range("A" & i), LookIn:=xlValues)
    If ici Is Nothing Then
        WsDestination.Range("A" & i).Resize(1, 10).Copy Destination:=WsOrigine.Range("A" & FinOri + 1)
        FinOri = FinOri + 1
        x = x + 1
    End If
Next i
       
'    temp = [Vlookup(SI(ESTERREUR(RECHERCHEV("A"& i,[Classeur6_V3.xlsm]Feuil1!$A:$A;1;FAUX));1;0)]
'    If temp = 1 Then
'        Sheets("BCS").Select
'        ActiveSheet.Range("A" & n & ":K" & n).Select
'        Selection.Copy
'        Sheets("Feuil1").Select
'        '1ere ligne vide archives
'        ligneA = Sheets("Feuil1").Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row + 1
'        'et colle dans archives
'        Sheets("Feuil1").Range("A" & ligneA).Select
'        ActiveSheet.Paste
'        x = x + 1
'    End If
'Next i
MsgBox x & " Personnel ont été ajoutés"
End Sub
 

taze33

XLDnaute Nouveau
Bonsoir merci de ta réponse rapide.
Je ne pourrais mettre en application ton code que demain après midi.
Ce que je voudrais :
Si une valeur de la colonne A du fichier Essai2 ne se trouve pas dans la colonne A du fichier Essai1 alors je copie la ligne du fichier Essai2 après la dernière ligne du fichier Essai1. J'espère avoir été clair.
Encore merci
Bonne soirée.
 

vgendron

XLDnaute Barbatruc
Hello
Voici en retour tes deux fichiers avec le code commenté et quelques notes dans le fichier Essai1
Je présume que ton projet n'est pas terminé et que l'idée du userform est de pouvoir "Modifier" une ligne
 

Pièces jointes

  • Essai1.xlsm
    31.5 KB · Affichages: 26
  • Essai2.xlsm
    10.2 KB · Affichages: 24

taze33

XLDnaute Nouveau
Bonjour vgendron
C'est super c'est exactement ce que je cherchais à faire sans y parvenir depuis plus d'une semaine..
Effectivement le Userform et les deux fichiers ont été simplifiés pour être joint à ma demande.

Encore une fois merci pour ton aide et tes explications.:D
 

Discussions similaires

Réponses
11
Affichages
189

Statistiques des forums

Discussions
312 219
Messages
2 086 369
Membres
103 197
dernier inscrit
sandrine.lacaussade@orang