probleme VBA macro de copie

flo103.g

XLDnaute Nouveau
Bonjour! Novice mais téméraire, je recherche un code qui me permetrait de copier le contenu d'une cellule du classeur B ligne X en fonction de ce N° X saisi dans une cellule de la feuille A.
je souhaiterai que cette macro se lance sur modification de cette cellule A
Mon probleme est que ce code ne fonctionne que lorsqu'il est dans un module et non dans la page active.
Il bloque à la fonction Range.
Quelqu'un voit il mon erreur dans le code svp ????
le voici =

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$D$46" Then
Call descriptionL46

End If
End Sub

Private Sub descriptionL46()


ncas = Worksheets("tx1").Range("D" & CStr(46)) 'origine n° des cas a comparer dans TX1'
ref = "D" & CStr(ncas) 'origine descriptif a copier dans analyse'
Sheets("analyse").Select
Range("ncas").Select
Selection.Copy
ref = "E" & CStr(46) 'destination dans TX1'
Worksheets("tx1").Select
Range(ref).Select
ActiveSheet.Paste


End Sub
 

Cousinhub

XLDnaute Barbatruc
Re : probleme VBA macro de copie

Bonjour, dans un évènement de feuille, tu ne peux sélectionner que des cellules de cette même feuille.

essaie avec ce code (non testé)


ref2 = "E" & CStr(46) 'destination dans TX1'
With Sheets("analyse").Range("ncas")
.Copy Sheets("tx1").Range(ref2)
End With

peut-être?

Edit, il te faudra 2 ref (ref1 et ref2)
 

Gorfael

XLDnaute Barbatruc
Re : probleme VBA macro de copie

Bonjour! Novice mais téméraire, je recherche un code qui me permetrait de copier le contenu d'une cellule du classeur B ligne X en fonction de ce N° X saisi dans une cellule de la feuille A.
je souhaiterai que cette macro se lance sur modification de cette cellule A
Mon probleme est que ce code ne fonctionne que lorsqu'il est dans un module et non dans la page active.
Il bloque à la fonction Range.
Quelqu'un voit il mon erreur dans le code svp ????
le voici =

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$D$46" Then
Call descriptionL46

End If
End Sub

Private Sub descriptionL46()


ncas = Worksheets("tx1").Range("D" & CStr(46)) 'origine n° des cas a comparer dans TX1'
ref = "D" & CStr(ncas) 'origine descriptif a copier dans analyse'
Sheets("analyse").Select
Range("ncas").Select
Selection.Copy
ref = "E" & CStr(46) 'destination dans TX1'
Worksheets("tx1").Select
Range(ref).Select
ActiveSheet.Paste


End Sub
Salut
Si tu déclarais tes variables, tu saurais ce qui est une variable et ce qui ne l'est pas :p
dans ta macro, tu as une variable ncas que tu charges avec un nombre contenue en D46 de tx1
Ref = valeur contenue à la ligne ncas de la colonne D
ensuite tu sélectionnes une cellule nommée dans ton classeur avec pour nom "ncas" (une imagination débordante, hein ! Le même nom pour tout, comme ça, tu ne risques pas de l'oublier ?)
Tu viens de définir une adresse avec Ref, mais tu ne l'utilises pas, pour ne pas l'user ?

Les modules liés aux feuilles sont extrêmement jaloux : leurs instructions de sélection ou d'activation ne peuvent concerner que la feuille qui leur est liée

Je suppose que tu veux transférer le code de descriptionL46 vers Worksheet_Change ?
Dans ce cas, en supposant que c'est le module lié à la feuille "tx1" tu devrais avoir un truc de ce genre :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Ncas as long
dim Red as string
If Target.Address(0,0) = "D46" Then
'si la modif concerne la cellule D46
 
ncas = target 'origine n° des cas a comparer dans TX1'
'Récupère la valeur de la cellule qui vient d'être modifiée. Utilité ???
ref = "D" & target 'origine descriptif a copier dans analyse'
'crée une adresse avec D et la valeur contenu dans la cellule D46.???
Sheets("analyse").Range("ncas").Copy
'Met en mémoire la cellule "ncas" . Pas sûr, parce que je n'utilises pas de 'cellules nommées en VBA, mais elles sont définies pour le classeur, donc
'la feuille n'est peut-être pas indispensable
ref = "E46"'destination dans TX1'
'Worksheets("tx1").Select sert à rien, puisque c'est la feuille active
Range(ref).Select
ActiveSheet.Paste
end if
End Sub
Comme t'as une proposition de bhbh qui utilise la propriété ".copy destination", j'ai pas modifié la fin. Et comme je ne comprends pas ta macro, c'est dur de conseiller, sauf que par principe, il vaut mieux déclarer ses variables (pas en variant, dans le format des valeurs qu'elles représentent), éviter d'utiliser le même nom pour représenter des entité différente et supprimer les lignes de code inutiles

A+
 

flo103.g

XLDnaute Nouveau
Re : probleme VBA macro de copie

bonjour, je vous remercie vivement pour vos réponses.
J'ai suivi vos conseils et cela commence à prendre forme.
J'ai encore un petit probleme : je n'arrive pas à spécifier le chemin du classeur qui contient la case à copier.
Qui peut me dire comment faire svp?
je vous joint le fichier pour mieux comprendre.
Merci beaucoup!

flo
 

Pièces jointes

  • Rapext test.zip
    20.2 KB · Affichages: 37
  • Rapext test.zip
    20.2 KB · Affichages: 35
  • Rapext test.zip
    20.2 KB · Affichages: 38

Discussions similaires

Réponses
7
Affichages
226

Statistiques des forums

Discussions
312 400
Messages
2 088 089
Membres
103 712
dernier inscrit
Charles authentique