Problème importation données VBA

mitcha -  
 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.
A voir également:

1 réponse

Utilisateur anonyme
 
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 :

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
0