Copier coller une colonne d'une feuille vers une autre [Résolu/Fermé]

Signaler
-
 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

Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 154
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)




Messages postés
16392
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
27 février 2021
3 144
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
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!
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 154
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()..
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
Messages postés
16392
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
27 février 2021
3 144
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
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 154
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 !!!
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!!!