Problème importation données VBA
mitcha
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour,
Je voudrais mettre en place un programme qui ouvre un classeur fait une recherche et double clique sur quelque cellules (celles qu'il trouve) pour afficher le détail et les importer sur mon fichier (chaque détail de cellule doit être importé dans une feuille différente), le programme marche bien pour la recherche et le double clique seulement au moment d'importer les données il m'importe que le premier résultat de sa recherche donc il me manque les autres données.
Voici mon programme:
Private Sub CommandButton2_Click()
Dim classeurSource As Workbook, classeurDestination As Workbook
Dim objWorksheet As Worksheet, objRange As Range
onglet = Feuil2.Cells(1, 1)
Set classeurSource = Application.Workbooks.Open(nomfichierentre)
Sheets(onglet).Select
Set objWorksheet = ThisWorkbook.ActiveSheet
Set classeurDestination = ThisWorkbook
trouve = False
i = 0
j = 1
maDonnee = "Total général"
For Each cell In Sheets(onglet).Range("A1:A100")
If cell = maDonnee Then
reponse = MsgBox(" resultat =" & cell.Offset(-1, 1) & " ,Voulez-vous continuer?", vbOKCancel, "Validation")
k = cell.Row
k = k - 1
ref = "B" & k
Sheets(onglet).Select
Sheets(onglet).Range(ref).Select
Selection.ShowDetail = True
Sheets(onglet).Select
Sheets(onglet).Range("C" & k).Select
Selection.ShowDetail = True
i = i + 2
trouve = True
End If
Next
If Not trouve Or reponse = 2 Then
MsgBox ("pas de Total général ou abandon ")
classeurSource.Close
Exit Sub
End If
nbfeuille = classeurDestination.Sheets.Count
For j = 1 To i - 1
nbfeuille = classeurDestination.Sheets.Count
classeurSource.Sheets("Feuil" & j).Cells.Copy classeurDestination.Sheets(nbfeuille).Range("A1")
Next j
classeurSource.Close False
End Sub
Je n'arrive pas a trouver le problème.
Merci par avance pour votre aide.
Je voudrais mettre en place un programme qui ouvre un classeur fait une recherche et double clique sur quelque cellules (celles qu'il trouve) pour afficher le détail et les importer sur mon fichier (chaque détail de cellule doit être importé dans une feuille différente), le programme marche bien pour la recherche et le double clique seulement au moment d'importer les données il m'importe que le premier résultat de sa recherche donc il me manque les autres données.
Voici mon programme:
Private Sub CommandButton2_Click()
Dim classeurSource As Workbook, classeurDestination As Workbook
Dim objWorksheet As Worksheet, objRange As Range
onglet = Feuil2.Cells(1, 1)
Set classeurSource = Application.Workbooks.Open(nomfichierentre)
Sheets(onglet).Select
Set objWorksheet = ThisWorkbook.ActiveSheet
Set classeurDestination = ThisWorkbook
trouve = False
i = 0
j = 1
maDonnee = "Total général"
For Each cell In Sheets(onglet).Range("A1:A100")
If cell = maDonnee Then
reponse = MsgBox(" resultat =" & cell.Offset(-1, 1) & " ,Voulez-vous continuer?", vbOKCancel, "Validation")
k = cell.Row
k = k - 1
ref = "B" & k
Sheets(onglet).Select
Sheets(onglet).Range(ref).Select
Selection.ShowDetail = True
Sheets(onglet).Select
Sheets(onglet).Range("C" & k).Select
Selection.ShowDetail = True
i = i + 2
trouve = True
End If
Next
If Not trouve Or reponse = 2 Then
MsgBox ("pas de Total général ou abandon ")
classeurSource.Close
Exit Sub
End If
nbfeuille = classeurDestination.Sheets.Count
For j = 1 To i - 1
nbfeuille = classeurDestination.Sheets.Count
classeurSource.Sheets("Feuil" & j).Cells.Copy classeurDestination.Sheets(nbfeuille).Range("A1")
Next j
classeurSource.Close False
End Sub
Je n'arrive pas a trouver le problème.
Merci par avance pour votre aide.
A voir également:
- Problème importation données VBA
- Fuite données maif - Guide
- Supprimer les données de navigation - Guide
- Trier des données excel - Guide
- Sauvegarde des données - Guide
- Excel validation des données liste - Guide
1 réponse
Bonjour,
Je n'ai pas testé ton code,mais il y a ambiguité dans ces lignes
onglet = Feuil2.Cells(1, 1)
Set classeurSource = Application.Workbooks.Open(nomfichierentre)
Sheets(onglet).Select
Set objWorksheet = ThisWorkbook.ActiveSheet
Set classeurDestination = ThisWorkbook
N'étant pas déclaré, on imagine que [ onglet ] est une variable de type
string, qui prend la valeur de la cellule A1 de la feuille 2.
onglet = Feuil2.Cells(1, 1) = onglet = Feuil2.Cells(1, 1) .Value
L'instruction suivante instancie un nouveau classeur.
Set classeurSource = Application.Workbooks.Open(nomfichierentre)
On doit croire que dans le fichier que tu viens d'ouvrir, il y a une
feuille qui porte le nom emmagasiné dans la variable [ onglet ].
L'instruction suivante instancie un "handle" sur cette même feuille
de ce nouveau classeur (nomfichierentre) ouvert.
Et pour finir le dèrnière instruction, instancie un second handle
sur le même classeur !
Set classeurDestination = ThisWorkbook
À ce moment le classeur actif est le classeur [ nomfichierentre ],
donc les deux instances [ classeurSource ] et [ classeurDestination ]
pointe sur le même classeur actuellement.
Je crois qu'il faut changer l'ordre des instructions, mais je ne sais pas
trop ce que tu veux faire :
Bien entendu, tu sais mieux que moi ce que tu veux faire !
Souviens-toi que lors de cette instruction :
Set classeurSource = Application.Workbooks.Open(NomFichierEntre)
Le ThisWorkbook est maintenant celui de [ NomFichierEntre ]
Lorsque tu as plus d'un fichier Excel d'ouvert, si tu veux redonner
le focus sur un classeur, tu dois utiliser l'instruction :
Workbooks("Classeur1.xls").Activate
ou
classeurSource.Activate
classeurDestination.Activate
Cdt
Lupin
Je n'ai pas testé ton code,mais il y a ambiguité dans ces lignes
onglet = Feuil2.Cells(1, 1)
Set classeurSource = Application.Workbooks.Open(nomfichierentre)
Sheets(onglet).Select
Set objWorksheet = ThisWorkbook.ActiveSheet
Set classeurDestination = ThisWorkbook
N'étant pas déclaré, on imagine que [ onglet ] est une variable de type
string, qui prend la valeur de la cellule A1 de la feuille 2.
onglet = Feuil2.Cells(1, 1) = onglet = Feuil2.Cells(1, 1) .Value
L'instruction suivante instancie un nouveau classeur.
Set classeurSource = Application.Workbooks.Open(nomfichierentre)
On doit croire que dans le fichier que tu viens d'ouvrir, il y a une
feuille qui porte le nom emmagasiné dans la variable [ onglet ].
L'instruction suivante instancie un "handle" sur cette même feuille
de ce nouveau classeur (nomfichierentre) ouvert.
Et pour finir le dèrnière instruction, instancie un second handle
sur le même classeur !
Set classeurDestination = ThisWorkbook
À ce moment le classeur actif est le classeur [ nomfichierentre ],
donc les deux instances [ classeurSource ] et [ classeurDestination ]
pointe sur le même classeur actuellement.
Je crois qu'il faut changer l'ordre des instructions, mais je ne sais pas
trop ce que tu veux faire :
Private Sub CommandButton2_Click() Dim classeurSource As Workbook, classeurDestination As Workbook Dim objWorksheet As Worksheet, objRange As Range, Onglet As String Dim Trouve As Boolean, NomFichierEntre As String, Reponse As Long NomFichierEntre = "C:\Fichier.xls" Onglet = Feuil2.Cells(1, 1) Sheets(Onglet).Select Set objWorksheet = ThisWorkbook.ActiveSheet Set classeurDestination = ThisWorkbook Trouve = False Set classeurSource = Application.Workbooks.Open(NomFichierEntre) i = 0 j = 1 maDonnee = "Total général" For Each cell In Sheets(Onglet).Range("A1:A100") If cell = maDonnee Then Reponse = MsgBox(" Résultat =" & cell.Offset(-1, 1) & " ,Voulez-vous continuer?", vbOKCancel, "Validation") k = cell.Row k = k - 1 ref = "B" & k Sheets(Onglet).Select Sheets(Onglet).Range(ref).Select Selection.ShowDetail = True Sheets(Onglet).Select Sheets(Onglet).Range("C" & k).Select Selection.ShowDetail = True i = i + 2 Trouve = True End If Next If Not Trouve Or Reponse = 2 Then MsgBox ("Pas de Total général ou abandon ") classeurSource.Close Exit Sub End If nbfeuille = classeurDestination.Sheets.Count For j = 1 To i - 1 nbfeuille = classeurDestination.Sheets.Count classeurSource.Sheets("Feuil" & j).Cells.Copy classeurDestination.Sheets(nbfeuille).Range("A1") Next j classeurSource.Close False End Sub '
Bien entendu, tu sais mieux que moi ce que tu veux faire !
Souviens-toi que lors de cette instruction :
Set classeurSource = Application.Workbooks.Open(NomFichierEntre)
Le ThisWorkbook est maintenant celui de [ NomFichierEntre ]
Lorsque tu as plus d'un fichier Excel d'ouvert, si tu veux redonner
le focus sur un classeur, tu dois utiliser l'instruction :
Workbooks("Classeur1.xls").Activate
ou
classeurSource.Activate
classeurDestination.Activate
Cdt
Lupin