XL 2010 Copier-coller entre 2 onglets avec recherche

Phillip

XLDnaute Occasionnel
Bonjour,


Je tourne en rond sur une question de copier coller..

Un exemple simple :
Sub cop()
With Sheets("B")
Sheets("A").Range("B2:H2").Copy: .Paste .Range("b13")
Application.CutCopyMode = False
end With
end Sub

je constate Que B est l'onglet de destination, et que l'on fait un copie-coller en précisant l'onglet A origine et le range destination de l'onglet B, B13. Ca marche.

Fort de cela, j'adapte dans mon code, un peu plus compliqué, où je fais des recherches dans les 2 onglets
Code:
with Sheets("Soirées ").Range("i:i")
                        Set VNumsoiree = .Find(Vtheme, LookAt:=xlWhole)
                            vcolnumsoiree = VNumsoiree.Column
                            vrgnumsoiree = VNumsoiree.Row + 14
                        If Not VNumsoiree Is Nothing Then
                                If Cells(vrgnumsoiree - 14, vcolnumsoiree - 7).Value = "" Then
                                                set RechAdherent = Sheets("BdD").Range("a:a").Find(VNAdherent, LookAt:=xlWhole)
                                                ligneadherentbdd = RechAdherent.Row
                                                                          
                                              
                                              
                                                Sheets("BdD").Range(Cells(ligneadherentbdd, 2), Cells(ligneadherentbdd, 8)).Copy: _
                                                .Paste .Range(Cells(vrgnumsoiree - 14, 2))
                                                Application.CutCopyMode = False
'                                              
  Autre code qui suit....

End with

Et j'ai une erreur sur mon copy-paste

Je suis bien dans l'onglet origine avec mon with sheets ("soirées"), Je précise bien ce que je veux copier avec
sheets("BdD"), et je suppose que range(cells(vrgnumsoiree-14,2)) est bien dans l'onglet Soirée, puisque dans le modèle simple la syntaxe est comme cela.

est-ce que pour la nième fois je me fais des noeuds dans mes range ?

Merci de votre aide

Cordialement
 

vgendron

XLDnaute Barbatruc
Bonjour
Je crois que tu te fais des noeuds pour rien. et surtout. à mutlitplier les posts pour le meme sujet tu vas perdre aussi les gens du forum.. (si ce n'est les agacer)
donc..
1) POSTER ton fichier exemple -- des copies de codes incomplet ne servent à rien
2) appliquer les propositions qu'on te fait, et ne pas les modifier avant d'avoir compris

dans ce dernier code
VB:
with Sheets("Soirées ").Range("i:i")
                        Set VNumsoiree = .Find(Vtheme, LookAt:=xlWhole)
                            vcolnumsoiree = VNumsoiree.Column
                            vrgnumsoiree = VNumsoiree.Row + 14
                        If Not VNumsoiree Is Nothing Then
                                If Cells(vrgnumsoiree - 14, vcolnumsoiree - 7).Value = "" Then
                                                set RechAdherent = Sheets("BdD").Range("a:a").Find(VNAdherent, LookAt:=xlWhole)
                                                ligneadherentbdd = RechAdherent.Row
                                                                         
                                             
                                             
                                                Sheets("BdD").Range(Cells(ligneadherentbdd, 2), Cells(ligneadherentbdd, 8)).Copy: _
                                                .Paste .Range(Cells(vrgnumsoiree - 14, 2))
                                                Application.CutCopyMode = False
'                                              
  Autre code qui suit....

End with
tu attribues les numéros de colonne et ligne dans les variables vcolnumsoirée et vrgnumsoiree AVANT de savoir si le VNumsoirée a été trouvé (= avant le if)
quand tu fais un set .find
si pas trouvé. le find est nothing
si trouvé: not is nothing..
c'est seulement la qu'il faut attribuer tes numéros..sinon, tu risques de travailler sur des cellules fantomes... et bug

donc
VB:
with Sheets("Soirées ").Range("i:i") 'dans la colonne I de la feuille Soirée
                        Set VNumsoiree = .Find(Vtheme, LookAt:=xlWhole) 'cherche le contenu de la variable VTheme: et la cellule trouvée est "nommée" VNumsoirée
                            
                        If Not VNumsoiree Is Nothing Then 'si la recherche a donné quelque chose !
vcolnumsoiree = VNumsoiree.Column 'récupère la colonne
                            vrgnumsoiree = VNumsoiree.Row + 14 'récupère la ligne +14
                                If Cells(vrgnumsoiree - 14, vcolnumsoiree - 7).Value = "" Then 'pourrait etre remplacé par : if VNumSoiree.offset(0,-7)="" then    '''----Deja expliqué dans l'autre post
                                                set RechAdherent = Sheets("BdD").Range("a:a").Find(VNAdherent, LookAt:=xlWhole) 'nouvelle recherche de VNAdherent dans la colonne A de la feuille BdD
'idem.. manque la condition if Not RechAdherent is nothing then
                                                ligneadherentbdd = RechAdherent.Row
                                                                  ....
....
...       
                                                                                        
                                                Sheets("BdD").Range(Cells(ligneadherentbdd, 2), Cells(ligneadherentbdd, 8)).Copy: _ 'à mon avis;. il faut revoir la syntaxe du copy..
'voir aide vba: range().copy destination:= ....
                                                .Paste .Range(Cells(vrgnumsoiree - 14, 2))
                                                Application.CutCopyMode = False
'                                              
  Autre code qui suit....

End with
 

Phillip

XLDnaute Occasionnel
Bonjour,

merci VGendron pour le temps passé encore pour moi. J'ai conscience que l'aide du forum est basée sur le bénévolat et que ce qui paraît peu évident pour certains doit agacer ceux qui sont plus à l'aise avec VBA. Si j'étais très à l'aise, je serais de ceux qui aident les autres...
Ceci dit, je n'ai pas l'impression de reposer la même question...Il s'agit certes du même projet sur lequel je travaille depuis plusieurs jours, mais il me pose des problèmes à des endroits différents. Sois sûr que je ne pose pas toutes mes questions, je modifie plutôt mon code pour contourner le problème...J'imagine que si j'étais vraiment à l'aise je pourrais beaucoup simplifier mes macros en utilisant des tableaux, des classes etc...

Merci encore

Cordialement

Phillip
 

Phillip

XLDnaute Occasionnel
Bonjour,

Je mets cette réponse pour mémoire et pour alimenter peut-être les recherches de ceux qui auront le même problème que moi. La syntaxe du copier coller entre feuille n'est décidément pas triviale, et j'ai eu beaucoup de mal à trouver, donc je partage mon expérience.

Worksheets("Toto").Range(Worksheets("Toto").Cells(ligneacopier, 2), Worksheets("Toto").Cells(ligneacopier, 8)).Copy _
Destination:=Worksheets("Tata").Cells(lignedestination , 2)

Cordialement

Phillip
 

Discussions similaires

Réponses
4
Affichages
555
Réponses
8
Affichages
1 K