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

sossso -  
 sossso -
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.

11 réponses

  1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour,

            lo = wsExcel.Range(wsExcel.Range("a6"), wsExcel.Range("a6").End(xlDown)).Row
            'ou plus simple
            lo = wsExcel.Range("A65535").End(xlUp).Row
    0
    1. sossso
       
      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
      1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717 > sossso
         
        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
  2. sossso
     
    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
  3. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    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
  4. sossso
     
    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
    1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Re,

      si vous voulez simplement enregistrer, oui, un wbExcel.save ira
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. sossso
     
    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
  7. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    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
  8. sossso
     
    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
  9. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    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
  10. sossso
     
    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
  11. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    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
  12. sossso
     
    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