Copier coller une colonne d'une feuille vers une autre

Résolu
benjamin -  
 benjamin -
Bonjour,

Bonjour les amis ! je viens encore vers vous pour sous soumettre la résolution d'un problème.
J'ai deux classeurs ANN_LEG et TAMP.Xlsx
Dans la feuil1 de ANN_LEG, la première ligne est réservée aux titres de champs. De même que la première ligne de la feuille1 de TAMP.xlsx. Mon travail consiste à copier-coller une colonne donnée de la feuille 1 de TAMP.xlsx dans l'autre feuille du classeur ANN_LEG.xlsx

Voici comment ca doit se passer : à chaque fois, je saisi dans un inputbox un champ de titre (par exemple Achat 2014). L'application doit d'abord chercher si Achat 2014 GNF existe dans TAMP.xlsx et si Prév Achat 2014 existe dans la feuille du classeur ANN_LEG.xlsx et copier coller toute cette colonne dans la feuille du classeur ANN_LEG.xlsx
Après chaque opération, un nouveau, msgbox doit apparaitre et me demander si je désire continuer. Si Oui, apparaitre un inputbox pour y renseigner un titre de champs. Sinon, l'opération est terminée.

Pour le moment, j'essaie une programmation sans msgbox. C'est-à-dire pas de message pour détecter ma volonté de continuer. Après tout, je suis confronté à un problème de boucle folle. Je saisi Achat 2014; Or Achat 2014 GNF et Prév Achat 2014 sont des lignes de champs existant dans les feuilles. Normalement l'opération de copie coller devrait être exécutée mais hélas !! C'est une boucle infinie (l'input apparait après avoir renseigné Achat 2014).
Aidez-moi s'il vous plait. Voire même me permettre d'afficher un nouveau msgbox après l'opération de copie collée pour me demander si je désire continuer ou pas (comme ci-dessus expliquée).

Voici mon code
Sub cop ()
Dim trouve1 as range
Dim trouve2 as range
Do while trouve1 is nothing or trouve2 is nothing
Bte=inputbox("Veuillez renseigner un champs de titre! , '' & chr(10) & ''Par Exemple : Achat 2014'', ''CHOIX DU MOIS !!! '')
Set trouve1=workbook(''TAMP.xlsx'').worksheets(''tampon_Cumul'').rows(1).cells.find(bte & ''GNF'' , lookat:= xlwhole)
Set trouve2=workbook(''ANN_LEG.xlsx'').worksheets(''Cumul'').rows(1).cells.find( ''Prév'' & bte , lookat:= xlwhole)
Loop
Cl1=split(range(trouve1.address).address, '' $'') (1)
Cl2=split(range(trouve2.address).address, '' $'') (1)
workbook(''TAMP.xlsx'').worksheets(''tampon_Cumul'').columns(cl1).copy workbook(''ANN_LEG.xlsx'').worksheets(''Cumul'').columns (cl2)
end sub

4 réponses

  1. Polux31 Messages postés 7219 Statut Membre 1 204
     
    Bonjour,

    Si la saisie est bte = "Achat 2014" alors bte & "GNF" donne "Achat 2014GNF" et non "Achat 2014 GNF".

    Idem pour "''Prév'' & bte qui donne "PrèvAchat 2014" et non "Prèv Achat 2014".

    La recherche Find() ne donnera aucune réponse même si la colonne existe.

    Ensuite, pas la peine de faire un Do While ... Loop. Il suffit de rappeler la procédure cop.

    Dim rep As Integer
    
        rep = MsgBox("Voulez vous continuer ?", vbYesNo, "Continuer")
        If rep = vbYes Then
            cop
        Else
            Exit Sub
        End If


    ;0)

    0
  2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bonjour,

    En plus de ce que t'indique Polux que je salue, ta syntaxe de "find" est fausse et, de plus, tu peux avoir la valeur de la colonne directement sans passer pat la création d'une cellule, lourde en mémoire ...

    un exemple à adapter
    dim Cl1 as byte, Cl2 as byte
    '...code
    on error goto= saisie
    Cl1=workbook("TAMP.xlsx").worksheets("tampon_Cumul").Rows(1).Find(what:="Achat 2014 GNF"., lookat:=xlWhole).Column
    'Cl2=.....m^me punition
    On error goto 0
    '....code dont proposition de Polux
    Exit sub
    saisie:
    msgbox "saisie incorrecte",vbcritical
    End sub

    nota dans ton code + haut:écrire ""(ouvrer les guillemets) et non 2 apostrophes à la suite
    Michel
    0
  3. benjamin
     
    Merci pour l'intérêt que tu as accordé a ma préoccupation!
    j'aimerais savoir
    Si: bte &'' ''& ''GNF" donne Achat 2014 GNF.

    Et ''Prév'' &'' ''& bte, ça devrait marcher non?

    Merci d'avance pour la réponse!
    0
    1. Polux31 Messages postés 7219 Statut Membre 1 204
       
      Oui ça donne le bon résultat tout comme :

      bte & " GNF" et "Prèv " & bte ...

      D'autre part, regarde la réponse de michel_m (que je salue également) concernant la syntaxte du Find()..
      0
  4. benjamin
     
    Merci les amis.
    Après avoir fais bte &'' ''& ''GNF et ''Prév'' &'' ''& bte, j'ai la boucle folle. c'est a dire une boucle infini de inputbox comm s'il y existait une erreur de saisie.

    En utilisant la methode de Michel, ca ne marche pas et jai un message d'erreur : erreur definie par l'application ou par l'objet
    Voici la synthaxe.
    Aidez moi, je suis un apprenant!!

    sub....
    Dim cl1 as byte
    Dim cl2 as byte
    cl1=workbook(''TAMP.xlsx'').worksheets(''tampon_Cumul'').rows(1).cells.find(bte &'' ''& ''GNF , lookat:= xlwhole).columns

    cl2=workbook(''ANN_LEG.xlsx'').worksheets(''Cumul'').rows(1).cells.find( ''Prév'' &'' ''& bte , lookat:= xlwhole).columns

    workbook(''TAMP.xlsx'').worksheets(''tampon_Cumul'').columns(cl1).copy workbook(''ANN_LEG.xlsx'').worksheets(''Cumul'').columns (cl2)
    end sub
    0
    1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      Tu as très mal lu ce que je t'indiquais:
      :-(
      ....rows(1).find...

      et non ...rows(&).cells.find....

      Rows(1) définit le champ de recherche ligne 1;
      Cells n'est pas une propriété de l'objet Rows mais cells définit toutes les cellules de la feuille ....

      A la fin: Column et non Columns
      0
    2. Polux31 Messages postés 7219 Statut Membre 1 204
       
      Pour bien apprendre, il faut bien lire ...

      D'une part, tu n'as pas lu les recommandations de michel et d'autre part, si tu as aussi lu mes recommandations, il ne devrait plus y avoir de boucle While !!!
      0
    3. benjamin
       
      Merci les amis!
      Mon premier programme ci dessus marche, le problème était lié a la base de donnée.
      Au fait Dans l'une des feuilles, il y avait Achat 2014 et dans l'autre il y avait Achat 2014.(problème d'espace). le contrôle des syntaxes des mots est rigoureux du fait de xlwhole.
      En plus, j'ai écris Prév au lieu de ''Prév'' &'' ''& bte, tout en modifiant les champs de titres de ma base de donnée.
      Merci les amis!!!
      0