VBA Excel - copie cellules vers autre fichier
bibifoc
-
lermite222 Messages postés 9042 Statut Contributeur -
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!!!
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:
- VBA Excel - copie cellules vers autre fichier
- Fichier bin - Guide
- Fichier epub - Guide
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
- Liste déroulante excel - Guide
2 réponses
Bonjour,
Set wb = GetObject("C:\...toto.xlsx") ??
Essaye plutôt
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.
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.
Re,
Un peu en aveugle..
Essaye ça
A+
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+
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?