Copier les résultats d'une recherche dans un autre classeur2

Fermé
sossso - Modifié par sossso le 15/05/2015 à 21:57
 sossso - 16 mai 2015 à 21:09
Bonjour,

En fait , je suis un peu débutant en VBA et j'ai besoin de votre aide . Dans un classeur1 , j'ai créer une useform à la quelle je donne une date , une maturité et un taux1 , lorsque j'execute , elle me cherche un taux2 et taux3 qui correspond à ce taux 1 à partir d'un tableau . Mon problème c'est que je veux que ces informations : le taux2, taux3, taux 1 , date, maturité soient copié dans un autre classeur2 dans un tableau dans la feuille "Achats " dans les colonnes H , G , F ,C ,A .Qui ce qui manque pour les informations peuvent etre copiés , concentrez vous sur la fin du code . ci dessous mon code :
<code>Private Sub CommandButton1_Click()
Dim d As Date
Dim s As String
s = ComboBox1.Text
Select Case s
Case Is = "52s"
    Worksheets("52 W").Activate
Case Is = "2A"
    Worksheets("2 ans").Activate
Case Is = "5A"
    Worksheets("5 ans").Activate
Case Is = "10A"
  Worksheets("10 ans").Activate
Case Is = "15A"
    Worksheets("15 ans").Activate
Case Is = "20A"
   Worksheets("20 ans").Activate
Case Is = "30A"
    Worksheets("30 ans").Activate
End Select
d = TextBox2.Text

Range("b1").Value = d

Dim l As Integer
l = Range(Range("a14"), Range("a14").End(xlDown)).Count
Dim aa As Double
Dim bb As Double
Dim a As Integer
Dim b As Integer
Dim cost As Boolean
cost = False
Dim r As String


Dim i  As Integer
For i = 1 To l
If Range("a" & 13 + i).Value = r Then
aa = Range("c" & 13 + i).Value
bb = Range("d" & 13 + i).Value

cost = True
i = l + 1
End If
Next
If cost = False Then
MsgBox ("Verifier le taux1")
Else

Dim appExcel As Excel.Application 'Application Excel
Dim wbExcel As Excel.Workbook 'Classeur Excel
Dim wsExcel As Excel.Worksheet 'Feuille Excel

'Ouverture de l'application
Set appExcel = CreateObject("Excel.Application")
'Ouverture d'un fichier Excel
Set wbExcel=
appExcel.Workbooks.Open("C:\Users\sossso\Desktop\\classeur2.xls")
'wsExcel correspond à la première feuille du fichier
Set wsExcel = wbExcel.Worksheets("Achats")

Dim lo As Integer
lo = wsExcel.Range(wsExcel.Range("a6"), wsExcel.Range("a6").End(xlDown)).Count
lo = lo + 6

wsExcel.Range("a" & lo).Value = d
wsExcel.Range("c" & lo).Value = ComboBox1.Text
wsExcel.Range("h" & lo).Value = TextBox3.Text
wsExcel.Range("f" & lo).Value = aa
wsExcel.Range("g" & lo).Value = bb

</code>

EDIT: Ajout de la coloration syntaxique.

A voir également:

11 réponses

f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 702
Modifié par f894009 le 16/05/2015 à 08:20
Bonjour,

        lo = wsExcel.Range(wsExcel.Range("a6"), wsExcel.Range("a6").End(xlDown)).Row
        'ou plus simple
        lo = wsExcel.Range("A65535").End(xlUp).Row
0
Bonjour ,

Merci pour votre proposition mais normalement , J'ai essayé ça mais c'est la même chose , le problème c'est qu'il manque quelque chose à la fin du code . J'ai essayer de mettre à la fin
wbExcel.Close 
, cela marche mais lorsque le classeur2 est ouvert il me demande à chaque fois d' enregistrer le classeur 2 avec un autre nom . Moi je veux que ces données soient copiés directement dans les places que j'ai mentionné dans la feuille "marketing" classeur2 à chaque fois que j'utilise ma Useform. Qu'est ce que vous me proposez ? et merci
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 702 > sossso
16 mai 2015 à 11:20
Re,

dans la feuille "marketing" classeur2 z'etes sur car dans le code c'est pas ca

le problème c'est qu'il manque quelque chose à la fin du code Surement, mais dites ce que vous voulez clairement
0
oui je suis vraiment Désolé , je voulais dire que les données soient copiés dans la feuille "Achats" du classeur2 . les informations qui sont représentés dans le code par les variables : d, Combobox1.text, Textbox3.text , aa ,bb ; je les trouve dans le fichier classeur1 où il existe le code , et je veux que ces informations soient copiés dans un autre classeur2 dans un tableau dans la feuille "Achats " dans les colonnes A , C , H ,F ,G .

J'ai essayer d'ajouter à la fin
wbExcel.Close
, cela marche mais lorsque le classeur2 est ouvert il me demande à chaque fois d' enregistrer le classeur 2 avec un autre nom . Moi je veux que ces données soient copiés directement dans les places que j'ai mentionné dans la feuille "Achats" classeur2 à chaque fois que j'utilise ma Useform. J'espère que ça soit claire . merci
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 702
16 mai 2015 à 11:58
Re,

essayez ceci:

par contre comprens pas le lo=lo+6

Private Sub CommandButton1_Click()
    Dim d As Date
    Dim s As String
    Dim l As Integer
    Dim aa As Double
    Dim bb As Double
    Dim a As Integer
    Dim b As Integer
    Dim cost As Boolean
    Dim r As String
    Dim i  As Integer
    
    s = ComboBox1.Text
    Select Case s
        Case Is = "52s"
            Worksheets("52 W").Activate
        Case Is = "2A"
            Worksheets("2 ans").Activate
        Case Is = "5A"
            Worksheets("5 ans").Activate
        Case Is = "10A"
            Worksheets("10 ans").Activate
        Case Is = "15A"
            Worksheets("15 ans").Activate
        Case Is = "20A"
            Worksheets("20 ans").Activate
        Case Is = "30A"
            Worksheets("30 ans").Activate
        Case Else
    End Select
    d = TextBox2.Text
    Range("b1").Value = d

    l = Range(Range("a14"), Range("a14").End(xlDown)).Count
    cost = False

    For i = 1 To l
        If Range("a" & 13 + i).Value = r Then
            aa = Range("c" & 13 + i).Value
            bb = Range("d" & 13 + i).Value
            cost = True
            'i = l + 1
            Exit For
        End If
    Next i
    
    If cost = False Then
        MsgBox ("Verifier le taux1")
    Else
        Dim appExcel As Excel.Application 'Application Excel
        Dim wbExcel As Excel.Workbook 'Classeur Excel
        Dim wsExcel As Excel.Worksheet 'Feuille Excel

        'Ouverture de l'application
        Set appExcel = CreateObject("Excel.Application")
        'Ouverture d'un fichier Excel
        Set wbExcel = appExcel.Workbooks.Open("C:\Users\sossso\Desktop\\classeur2.xls")
        'wsExcel correspond à la première feuille du fichier
        Set wsExcel = wbExcel.Worksheets("Achats")

        Dim lo As Long
        lo = wsExcel.Range(wsExcel.Range("a6"), wsExcel.Range("a6").End(xlDown)).Row
        lo = lo + 6
        wsExcel.Range("a" & lo).Value = d
        wsExcel.Range("c" & lo).Value = ComboBox1.Text
        wsExcel.Range("h" & lo).Value = TextBox3.Text
        wsExcel.Range("f" & lo).Value = aa
        wsExcel.Range("g" & lo).Value = bb
        Application.DisplayAlerts = False
        wbExcel.Close True
        Application.DisplayAlerts = True
        Set wbExcel = Nothing
        Set appExcel = Nothing
    End If
End Sub
0
la commande
lo = wsExcel.Range(wsExcel.Range("a6"), wsExcel.Range("a6").End(xlDown)).Row
lo = lo + 6
, indique le fait que les données doivent etre enregister à partir de la ligne vide , c'est seulement pour indiquer la position .

En fait votre code n'a pas marché aussi :( .Avez vous une autre solution que je peux utiliser . par exemple une commande comme
wbExcel.Close 
, n'existe pas un truc comme ça pour enregistrement , je sais pas par exemple
wbExcel.Save
. Aidez moi Svp
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 702
16 mai 2015 à 16:10
Re,

si vous voulez simplement enregistrer, oui, un wbExcel.save ira
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Normalement je veux que les données que j'ai trouvé dans classeur 1 soient copiés dans classeur 2 , j'ai essayé avec
wbExcel.save
mais ça n'a pas marché
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 702
16 mai 2015 à 16:25
Re,

Y a maldonne, copier les donnees c'est ce code:
        wsExcel.Range("a" & lo).Value = d
        wsExcel.Range("c" & lo).Value = ComboBox1.Text
        wsExcel.Range("h" & lo).Value = TextBox3.Text
        wsExcel.Range("f" & lo).Value = aa
        wsExcel.Range("g" & lo).Value = bb


enregistrer la classeur c'est celui-ci:
 wbExcel.save


donc un peu de reflection avant d'ecrire ..............
0
Moi ce que je veux c'est les données soient copiés , mais lorsque j'exécute le code :
wsExcel.Range("a" & lo).Value = d
wsExcel.Range("c" & lo).Value = ComboBox1.Text
wsExcel.Range("h" & lo).Value = TextBox3.Text
wsExcel.Range("f" & lo).Value = aa
wsExcel.Range("g" & lo).Value = bb

les données ne se copient pas , alors où est le problème ?
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 702
16 mai 2015 à 16:56
Re,

mettez un point d'arret a cette ligne:
wsExcel.Range("a" & lo).Value = d


lancez votre macro, des que le programme s'arrete, passez le curseur de la souris sur lo pour voir sa valeur
0
je l'ai fais , la valeur de lo est 466 . et c'est exactement le numéro de la ligne qui est vide dans le classeur2 où je veux copier mes données . donc le principe pour lequel j'ai met la variable lo est juste . mais comment je peux résoudre mon problème qui est de copier les informations dans cette ligne vide ?
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 702
Modifié par f894009 le 16/05/2015 à 19:21
Re,

deplacez le point d'arret vers ligne

Application.DisplayAlerts = False


et regardez ce qu'il y a dans les variables et objets les lignes precedentes
0
Merci pour votre aide . mon problème est résolu . j'ai remplacer
Set appExcel = CreateObject("Excel.Application")
'Ouverture d'un fichier Excel
'Set wbExcel = appExcel.Workbooks.Open("C:\Users\sossso\Desktop\classeur2.xls")
'wsExcel correspond à la première feuille du fichier
'Set wsExcel = wbExcel.Worksheets("Achats")

par :
Set wbExcel = Workbooks("classeur2.xls")
'wsExcel correspond à la première feuille du fichier
Set wsExcel = wbExcel.Worksheets("Achats")


Merci encore pour votre aide :)
0