VBA Excel - copie cellules vers autre fichier

bibifoc -  
lermite222 Messages postés 9042 Statut Contributeur -
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!!!

2 réponses

  1. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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
    1. 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
  2. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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