UserForm insérer contenu de 2 feuil dans une autre feuil de classeur différent
Résolu/Fermé
alex141077
Messages postés
52
Date d'inscription
vendredi 5 avril 2013
Statut
Membre
Dernière intervention
8 février 2022
-
13 mai 2021 à 13:56
Le Pingou Messages postés 12240 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 11 février 2025 - 14 mai 2021 à 12:03
Le Pingou Messages postés 12240 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 11 février 2025 - 14 mai 2021 à 12:03
A voir également:
- UserForm insérer contenu de 2 feuil dans une autre feuil de classeur différent
- Insérer une vidéo dans powerpoint - Guide
- Insérer signature word - Guide
- Insérer liste déroulante excel - Guide
- Insérer sommaire word - Guide
- Word numéro de page 1/2 - Guide
10 réponses
Le Pingou
Messages postés
12240
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
11 février 2025
1 457
13 mai 2021 à 18:02
13 mai 2021 à 18:02
Bonjour,
Essayer comme suit:
Essayer comme suit:
'--- Copier/coller des onglets sélectionnés
With ListBox2
d = 0
For I = 0 To .ListCount - 1
If .Selected(I) Then
Workbooks("alexchoix.xlsx").Sheets(.List(I)).Range("A1:B53").Copy Workbooks("alex.xlsm").Sheets("Feuil1").Range("b1").Offset(0, d)
d = d + 2
End If
Next I
End With
Unload Me
Le Pingou
Messages postés
12240
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
11 février 2025
1 457
Modifié le 13 mai 2021 à 16:02
Modifié le 13 mai 2021 à 16:02
Bonjour,
juste au passage: dans votre code CommandButton1_Click vous avez mis l'instruction Unload Me qui ferme le formulaire et donc vous perdez le contenu de la variable Feuille....!
juste au passage: dans votre code CommandButton1_Click vous avez mis l'instruction Unload Me qui ferme le formulaire et donc vous perdez le contenu de la variable Feuille....!
Le Pingou
Messages postés
12240
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
11 février 2025
1 457
13 mai 2021 à 16:30
13 mai 2021 à 16:30
Bonjour,
Il vous suffit de compléter votre code selon les informations
Il vous suffit de compléter votre code selon les informations
With ListBox2
For I = 0 To .ListCount - 1
If .Selected(I) Then
' copier les données (b1:c53) de la feuille selon List(I)
'Premier passage:
'les coller sur classeur source, feuille 1 plage B1:C53
'deuxième passage
'les coller sur classeur source, feuille 1 plage D1:E53
End If
Next I
End With
Le Pingou
Messages postés
12240
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
11 février 2025
1 457
Modifié le 13 mai 2021 à 21:32
Modifié le 13 mai 2021 à 21:32
Bonjour,
Est-ce que le classeur actif est celui que vous choisissez dans "choix = Application.GetOpenFilename
Si Oui alors modifier ma ligne d'instruction comme suit:
Et en plus corriger votre code : remplacer WBKS par WBKC
et aussi ici:
Est-ce que le classeur actif est celui que vous choisissez dans "choix = Application.GetOpenFilename
Si Oui alors modifier ma ligne d'instruction comme suit:
For I = 0 To .ListCount - 1
If .Selected(I) Then
WBKC.Sheets(.List(I)).Range("A1:B53").Copy WBKS.Sheets("Menu").Range("b1").Offset(0, d)
' *** ancien code.......Workbooks("alexchoix.xlsx").Sheets(.List(I)).Range("A1:B53").Copy Workbooks("alex.xlsm").Sheets("Feuil1").Range("b1").Offset(0, d)
d = d + 2
..........
..........
End If
Et en plus corriger votre code : remplacer WBKS par WBKC
'If choix = "" Then Exit Sub Else Set wbks = Workbooks.Open(choix)
If VarType(choix) = vbBoolean Then Exit Sub Else Set WBKS= Workbooks.Open(choix)
et aussi ici:
For Each Ws In WBKS.Worksheets
RechercheMenu.ListBox2.AddItem Ws.Name
Next Ws
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
alex141077
Messages postés
52
Date d'inscription
vendredi 5 avril 2013
Statut
Membre
Dernière intervention
8 février 2022
2
Modifié le 14 mai 2021 à 09:26
Modifié le 14 mai 2021 à 09:26
Le seul classeur actif (wbks) est celui qui contient la macro . Le second classeur (wbkc) n'est pas ouvert et devient actif après l'instruction
Cette ligne de code pose soucis. J'avais déjà tenter cette écriture mais cela crée un bug "l'indice n'appartient pas à la sélection"
J'ai donc du ajouter les écriture suivante:
Au final je suis toujours obligé d'écrire
choix = Application.GetOpenFilename
Cette ligne de code pose soucis. J'avais déjà tenter cette écriture mais cela crée un bug "l'indice n'appartient pas à la sélection"
wbkc.Sheets(.List(I)).Range("B1:C53").Copy wbks.Sheets("Menu").Range("B1").Offset(0, d)
J'ai donc du ajouter les écriture suivante:
Set wbks = ThisWorkbook
Set wbkc = Workbooks(Workbooks.Count)
Au final je suis toujours obligé d'écrire
Workbooks(Workbooks.Count).
alex141077
Messages postés
52
Date d'inscription
vendredi 5 avril 2013
Statut
Membre
Dernière intervention
8 février 2022
2
Modifié le 14 mai 2021 à 10:13
Modifié le 14 mai 2021 à 10:13
Bon j'ai réécrit mon code en rajoutant une petite condition pour sélectionner que 4 items maxi.
Private Sub CommandButton1_Click()
'Déclaration des variables
Dim I As Integer
Dim d As Integer
Dim a As Integer
Set wbks = ThisWorkbook
Set wbkc = Workbooks(Workbooks.Count)
'Copier/coller des onglets sélectionnés
With ListBox2
d = 0
For I = 0 To .ListCount - 1: If ListBox2.Selected(I) Then wbkc.Sheets(.List(I)).Range("B1:C53").Copy wbks.Sheets("Menu").Range("B1").Offset(0, d)
d = d + 2 'Décalage de 2 colonnes
' Selection de 4 items maximum
If a > 4 Then ListBox2.Selected(ListBox2.ListIndex) = False: MsgBox "Vous ne pouvez pas sélectionner plus de 4 menus"
Next I
End With
Unload Me
Workbooks(Workbooks.Count).Close
End Sub
Le Pingou
Messages postés
12240
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
11 février 2025
1 457
Modifié le 14 mai 2021 à 11:08
Modifié le 14 mai 2021 à 11:08
Bonjour,
C'est étonnant car chez moi cela fonctionne correctement .
Avez-vous bien corrigé votre code les 2 parties que j'ai cité pour WBKS par WBKC?
Ces 2 lignes sont inutiles:
Set wbks = ThisWorkbook
Set wbkc = Workbooks(Workbooks.Count)
car vous avez déjà réalisé dans votre code.
Mon fichier d'essai : https://www.cjoint.com/c/KEojh2vDFd0
C'est étonnant car chez moi cela fonctionne correctement .
Avez-vous bien corrigé votre code les 2 parties que j'ai cité pour WBKS par WBKC?
Ces 2 lignes sont inutiles:
Set wbks = ThisWorkbook
Set wbkc = Workbooks(Workbooks.Count)
car vous avez déjà réalisé dans votre code.
Mon fichier d'essai : https://www.cjoint.com/c/KEojh2vDFd0
alex141077
Messages postés
52
Date d'inscription
vendredi 5 avril 2013
Statut
Membre
Dernière intervention
8 février 2022
2
Modifié le 14 mai 2021 à 11:21
Modifié le 14 mai 2021 à 11:21
Bonjour,
Je remets l'intégralité du code tel qu'il est...
Si je n'ajoute ces 2 ligne
Je remets l'intégralité du code tel qu'il est...
Si je n'ajoute ces 2 ligne
Set wbks = ThisWorkbookca bug!
Set wbkc = Workbooks(Workbooks.Count)
Public wbks As Workbook Public wbkc As Workbook Public feuil$ '-------------------------------------------------------------- Sub userform_initialize() 'Déclaration des variables Dim choix$, Ws As Worksheet, feuil$, x$ Application.EnableEvents = False Sheets("Menu").Cells.Select Selection.ClearContents Application.EnableEvents = True 'Génération de la liste des onglets Set wbks = ThisWorkbook choix = Application.GetOpenFilename("Fichiers Excel (*.xls; *.xlsx; *.xlsm),*.xls; *.xlsx; *.xlsm") If VarType(choix) = vbBoolean And Sheets("Sommaire").Select Then Exit Sub Else: Set wbks = Workbooks.Open(choix) With ListBox2 .MultiSelect = fmMultiSelectMulti .Clear For Each Ws In wbks.Worksheets '!!! "wbkc" n'affiche pas la bonne liste!!! RechercheMenu.ListBox2.AddItem Ws.Name Next Ws End With End Sub '------------------------------------------------------------------ 'Action quand on clique sur le Bouton "Créer" Private Sub CommandButton1_Click() Dim I As Integer Dim d As Integer Dim a As Integer Set wbks = ThisWorkbook Set wbkc = Workbooks(Workbooks.Count) 'Copier/coller des onglets sélectionnés With ListBox2 d = 0 For I = 0 To .ListCount - 1: If ListBox2.Selected(I) Then wbkc.Sheets(.List(I)).Range("B1:C53").Copy wbks.Sheets("Menu").Range("B1").Offset(0, d) d = d + 2 If a > 4 Then ListBox2.Selected(ListBox2.ListIndex) = False: MsgBox "Vous ne pouvez pas sélectionner plus de 4 menus" Next I End With Unload Me Workbooks(Workbooks.Count).Close End Sub
Le Pingou
Messages postés
12240
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
11 février 2025
1 457
14 mai 2021 à 11:41
14 mai 2021 à 11:41
alex141077
Messages postés
52
Date d'inscription
vendredi 5 avril 2013
Statut
Membre
Dernière intervention
8 février 2022
2
Modifié le 14 mai 2021 à 11:54
Modifié le 14 mai 2021 à 11:54
mi aculpa...ca fonctionne beaucoup mieux comme ca!!!
Milles remerciements Le Pingou
Je remets l'intégralité du code si cela peut aider d'autres utilisateurs
Milles remerciements Le Pingou
Je remets l'intégralité du code si cela peut aider d'autres utilisateurs
Option Explicit Public wbks As Workbook Public wbkc As Workbook Public feuil$ Sub userform_initialize() 'Déclaration des variables Dim choix$, Ws As Worksheet, feuil$, x$ Application.EnableEvents = False Sheets("Menu").Cells.Select Selection.ClearContents Application.EnableEvents = True 'Génération de la liste des onglets Set wbks = ThisWorkbook choix = Application.GetOpenFilename("Fichiers Excel (*.xls; *.xlsx; *.xlsm),*.xls; *.xlsx; *.xlsm") If VarType(choix) = vbBoolean And Sheets("Sommaire").Select Then Exit Sub Else: Set wbkc = Workbooks.Open(choix) With ListBox2 .MultiSelect = fmMultiSelectMulti .Clear For Each Ws In wbkc.Worksheets RechercheMenu.ListBox2.AddItem Ws.Name Next Ws End With End Sub 'Action quand on clique sur le Bouton "Créer" Private Sub CommandButton1_Click() Dim I As Integer Dim d As Integer Dim a As Integer 'Copier/coller des onglets sélectionnés With ListBox2 d = 0 For I = 0 To .ListCount - 1: If ListBox2.Selected(I) Then wbkc.Sheets(.List(I)).Range("B1:C53").Copy wbks.Sheets("Menu").Range("B1").Offset(0, d) d = d + 2 If a > 4 Then ListBox2.Selected(ListBox2.ListIndex) = False: MsgBox "Vous ne pouvez pas sélectionner plus de 4 menus" Next I End With Unload Me Workbooks(Workbooks.Count).Close End Sub
Le Pingou
Messages postés
12240
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
11 février 2025
1 457
14 mai 2021 à 12:03
14 mai 2021 à 12:03
Merci, content pour vous .
Mettre en résolu si c'est le cas
Salutations.
Le Pingou
Mettre en résolu si c'est le cas
Salutations.
Le Pingou
Modifié le 13 mai 2021 à 19:38
Je n'ai pas essayé le code car je m'aperçois que tu as ciblé des noms de classeur. Or les noms sont variables c'est pour cela que j'avais déclaré les variables suivantes:
WBKS : le classeur ouvert qui contient la macro et ou l'on colle le contenu dans Sheets("Menu")
WBKC : le classeur a ouvrir avec Application.GetOpenFilename pour copier le contenu des 2 onglets
Par contre le nom de la feuil de destination est toujours la meme :
et la variable "D" = 0 n 'est pas déclaré
13 mai 2021 à 20:37
Par contre j'ai beau y tortiller dans tous les sens mais je ne trouve pas de solution sans nommer les classeurs actifs
Modifié le 13 mai 2021 à 21:04
pour le dernier classeur ouvert
pour le premier classeur ouvert
Un grand merci LePingou pour ton aide bien précieuse.