VBA Excel - copie cellules vers autre fichier

bibifoc -  
lermite222 Messages postés 8724 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Je cherche à copier les données d'un formulaire sur plusieurs fichiers:
- un fichier Excel où se trouve le formulaire (çà marche)
- un autre fichier Excel (là çà ne marche pas mais je ne vois pas de message d'erreur)

Voici les lignes de code:

Private Sub Validation_Click()

Dim Position As Integer

'Détermine l'index de la première ligne vide
Position = Worksheets("Fichier concaténé").Range("A999").End(xlUp).Row + 1

' Intègre les valeurs entrées dans le User Form sur la première ligne vide
Worksheets("Fichier concaténé").Range("A" & Position).Value = MasterData.SupplierName.Value

If MasterData.SupplierName.Value = "" Then
MsgBox ("Please enter a supplier name")

Else
Worksheets("Fichier concaténé").Range("B" & Position).Value = MasterData.ContractNumber.Value
Worksheets("Fichier concaténé").Range("C" & Position).Value = MasterData.InternalClient.Value
Worksheets("Fichier concaténé").Range("D" & Position).Value = MasterData.InternalClientBU.Value
Worksheets("Fichier concaténé").Range("F" & Position).Value = MasterData.ContractAdministrator.Value
Worksheets("Fichier concaténé").Range("G" & Position).Value = MasterData.ContractAdministratorBU.Value
Worksheets("Fichier concaténé").Range("I" & Position).Value = MasterData.AP.Value

Unload Me


End If

'c'est cette partie qui ne fonctionne pas
Dim wb As Workbook
Set wb = GetObject("C:\...toto.xlsx")
wb.Activate

Dim Position2 As Integer


'Détermine l'index de la première ligne vide
Position2 = wb.Worksheets("Circuits").Range("A999").End(xlUp).Row + 1

' Intègre les valeurs entrées dans le User Form sur la première ligne vide
wb.Worksheets("Circuits").Range("A" & Position2).Value = MasterData.SupplierName.Value

If MasterData.SupplierName.Value = "" Then
MsgBox ("Please enter a supplier name")

Else
wb.Worksheets("Circuits").Range("C" & Position2).Value = MasterData.ContractNumber.Value
wb.Worksheets("Circuits").Range("H" & Position2).Value = MasterData.InternalClient.Value
wb.Worksheets("Circuits").Range("I" & Position2).Value = MasterData.InternalClientBU.Value
wb.Worksheets("Circuits").Range("F" & Position2).Value = MasterData.ContractAdministrator.Value
wb.Worksheets("Circuits").Range("G" & Position2).Value = MasterData.ContractAdministratorBU.Value
wb.Worksheets("Circuits").Range("J" & Position2).Value = MasterData.AP.Value

Unload Me


End If

ActiveWindow.Close Savechanges:=False

End Sub

Si vous avez des idées, des conseils, je suis preneuse! Merci beaucoup!!!
A voir également:

2 réponses

lermite222 Messages postés 8724 Date d'inscription   Statut Contributeur Dernière intervention   1 191
 
Bonjour,
Set wb = GetObject("C:\...toto.xlsx") ??
Essaye plutôt
Set wb = WorkBooks.Open("C:\...toto.xlsx")  

Et je supose que tu est dans un Userform ? si oui,
Supprime le premier Unlod.Me
Et le 2èm tu le déplace juste avant le End Sub
A+
PS: Une fois que tu met Unload.Me la suite de la procédure ne se fait pas.
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
0
bibifoc
 
Merci beaucoup Lermite! Je ne savais pas pour "unload". Et c'était logique, j'aurais dû y penser.

Par contre, grrr, au final c'est toujours la même chose, rien ne s'enregistre dans le 2ème workbook. On dirait que le user form ne garde pas en mémoire ce qui a été enregistré. Il le "coupe colle" dans le 1er fichier et du coup il n'y a plus rien à mettre dans le 2ème fichier. Sais-tu comment je peux faire plutôt du "copier coller", de manière à pouvoir enregistrer plusieurs fois, dans des fichiers différents, la même donnée saisie dans un user form?
0
lermite222 Messages postés 8724 Date d'inscription   Statut Contributeur Dernière intervention   1 191
 
Re,
Un peu en aveugle..
Essaye ça
Private Sub Validation_Click()
Dim LigneVide As Long
Dim wb As Workbook

    If SupplierName.Value = "" Then
        MsgBox ("Please enter a supplier name")
        Exit Sub
    End If
    With Worksheets("Fichier concaténé")
    
        'Détermine l'index de la première ligne vide
        LigneVide = .Cells(Rows.Count, "A").End(xlUp).Row + 1
    
    ' Intègre les valeurs entrées dans le User Form sur la première ligne vide
        .Range("A" & LigneVide).Value = SupplierName.Value
        .Range("B" & LigneVide).Value = ContractNumber.Value
        .Range("C" & LigneVide).Value = InternalClient.Value
        .Range("D" & LigneVide).Value = InternalClientBU.Value
        .Range("F" & LigneVide).Value = ContractAdministrator.Value
        .Range("G" & LigneVide).Value = ContractAdministratorBU.Value
        .Range("I" & LigneVide).Value = MasterData.AP.Value
    End With
    
    'c'est cette partie qui ne fonctionne pas
    Set wb = Workbooks.Open("C:\...toto.xlsx")
    With wb.Worksheets("Circuits")

        'Détermine l'index de la première ligne vide
        LigneVide = .Cells(Rows.Count, 1).End(xlUp).Row + 1

        ' Intègre les valeurs entrées dans le User Form sur la première ligne vide
        .Range("A" & LigneVide).Value = SupplierName.Value
        .Range("C" & LigneVide).Value = ContractNumber.Value
        .Range("H" & LigneVide).Value = InternalClient.Value
        .Range("I" & LigneVide).Value = InternalClientBU.Value
        .Range("F" & LigneVide).Value = ContractAdministrator.Value
        .Range("G" & LigneVide).Value = ContractAdministratorBU.Value
        .Range("J" & LigneVide).Value = AP.Value
        .Save
        .Close
    End With
    Unload Me

End Sub

A+
0