XL 2016 Copier/coller automatiquement des colonnes d'une feuille vers une autre feuille avec avec l'élément Range

leregalgourmand

XLDnaute Nouveau
Bonjour à tous,

Je bute depuis sur un soucis de l'élément Range. En effet, je désire copier automatiquement et coller des colonnes de la feuille 1 dans des colonnes de la feuille 2 ou 3 etc...de manière à ce que chaque fois que j'apporte des modifications dans les colonnes sources de la feuille 1, elles puissent aussi apparaître telles quelles dans les colonnes cibles de manière à reproduire exactement le même texte tel qu'il apparaît dans les colonnes sources.

J'ai essayé avec le code VBA dans la pièce jointe.
Pouvez vous m'aider à améliorer le code ?
Au début ça a marché, mais après ça ne fonctionne plus. J'ai un message d'erreur 450 et une MsgBox qui dit affiche : erreur d'exécution 450 Nombre d'arguments incorrects ou affectation de propriété incorrecte.

Et le débogage me met la ligne du Set myRange en jaune.
Je ne vois pas d'où provient l'erreur. Pouvez vous m'aider ??
Cordialement
 

Pièces jointes

  • mon.test.xlsm
    19.7 KB · Affichages: 10
Solution
Rebonjour a tous,

J'ai vraiment apprécié votre soutien et surtout la rapidité avec laquelle vous l'avez fait. Merci pour vos suggestions. Vos propositions de code dont le travail. Sauf que je veux en fait compliquer la chose. L'objectif c'est d'avoir une bonne compilation pour réaliser cette copie automatique de plusieurs colonnes pas forcément suivantes comme "A:C" mais du genre :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.ScreenUpdating = False
Dim myRange As Range
Set myRange = Sheets("premier"').Range ("A:A", "B:B", "C:C","E:E")'les colonnes à copier'
If Not Intersect(Target, myRange) Is Nothing Then
myRange.Copy...

Jacky67

XLDnaute Barbatruc
Bonjour à tous,

Je bute depuis sur un soucis de l'élément Range. En effet, je désire copier automatiquement et coller des colonnes de la feuille 1 dans des colonnes de la feuille 2 ou 3 etc...de manière à ce que chaque fois que j'apporte des modifications dans les colonnes sources de la feuille 1, elles puissent aussi apparaître telles quelles dans les colonnes cibles de manière à reproduire exactement le même texte tel qu'il apparaît dans les colonnes sources.

J'ai essayé avec le code VBA dans la pièce jointe.
Pouvez vous m'aider à améliorer le code ?
Au début ça a marché, mais après ça ne fonctionne plus. J'ai un message d'erreur 450 et une MsgBox qui dit affiche : erreur d'exécution 450 Nombre d'arguments incorrects ou affectation de propriété incorrecte.

Et le débogage me met la ligne du Set myRange en jaune.
Je ne vois pas d'où provient l'erreur. Pouvez vous m'aider ??
Cordialement
Bonjour à tous
Entres autres :rolleyes:
Il y a une faute de frappe dans l'instruction
Sub Worksheet_SelectioChange(ByVal Target As Range)
Sub Worksheet_SelectionChange(ByVal Target As Range)

Une proposition en PJ avec ce code dans le module de la feuille "deuxieme"
Se met à jour à l'activation de la feuille "deuxieme"
VB:
Private Sub Worksheet_Activate()
    premier.Columns("A:C").Copy [A1]
End Sub
 

Pièces jointes

  • mon.test.xlsm
    14 KB · Affichages: 7
Dernière édition:

Phil69970

XLDnaute Accro
Bonjour à tous

Une autre solution :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Set myRange = Sheets("premier").[A:C]
Set myRange1 = Sheets("deuxieme").[A:C]

If Not Application.Intersect(Target, Range("A:C")) Is Nothing Then
    myRange.Copy Destination:=myRange1
End If

Set myRange = Nothing
Set myRange1 = Nothing

End Sub

@Phil69970
 

Pièces jointes

  • mon.test V1.xlsm
    16.1 KB · Affichages: 4

leregalgourmand

XLDnaute Nouveau
Bonjour à tous

Une autre solution :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Set myRange = Sheets("premier").[A:C]
Set myRange1 = Sheets("deuxieme").[A:C]

If Not Application.Intersect(Target, Range("A:C")) Is Nothing Then
    myRange.Copy Destination:=myRange1
End If

Set myRange = Nothing
Set myRange1 = Nothing

End Sub

@Phil69970

Bonjour Phil69970,
J'ai essayé ta proposition, mais j'ai toujours une erreur au débogage :
VB:
If Not Application.Intersect(Target, myRange("AC")) Is Nothing Then
myRange.Copy Destination:=myRange1
Ne passe pas. Toujours en jaune au débogage.

Je vais essayer une autre solution
Merci beaucoup
 

leregalgourmand

XLDnaute Nouveau
Bjr, il te manque le ':' entre A et C
Bonjour mutzic
C'est vrai sur le forum. Mais je reprends :
VB:
If Not Application.Intersect(Target, myRange("A:C")) Is Nothing Then
myRange.Copy Destination:=myRange1

Sur mon programme c'est bien écrit avec les " :". Donc c'est lors de la saisie ici sur le forum que j'ai oublié les 2 points.

Donc mon problème demeure toujours bien entendu.:(:(
 

leregalgourmand

XLDnaute Nouveau
Rebonjour a tous,

J'ai vraiment apprécié votre soutien et surtout la rapidité avec laquelle vous l'avez fait. Merci pour vos suggestions. Vos propositions de code dont le travail. Sauf que je veux en fait compliquer la chose. L'objectif c'est d'avoir une bonne compilation pour réaliser cette copie automatique de plusieurs colonnes pas forcément suivantes comme "A:C" mais du genre :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.ScreenUpdating = False
Dim myRange As Range
Set myRange = Sheets("premier"').Range ("A:A", "B:B", "C:C","E:E")'les colonnes à copier'
If Not Intersect(Target, myRange) Is Nothing Then
myRange.Copy Destination:=Sheets("deuxième").Range("C:C", "D:D", "E:E", "G:G")
End If

Application.SreenUpdating = True
End Sub

Voilà ci dessus les manipulations que je veux pouvoir faire sur toute feuille que je désire.. Merci d'avance pour votre aide. En fait ma compilation n'est pas la bonne. Ou alors comment modifier le code proposé par Phil69970 pour y arriver où celui de Jacky67 qui me semble très simple et léger.

Cordialement
 

Jacky67

XLDnaute Barbatruc
Rebonjour a tous,

J'ai vraiment apprécié votre soutien et surtout la rapidité avec laquelle vous l'avez fait. Merci pour vos suggestions. Vos propositions de code dont le travail. Sauf que je veux en fait compliquer la chose. L'objectif c'est d'avoir une bonne compilation pour réaliser cette copie automatique de plusieurs colonnes pas forcément suivantes comme "A:C" mais du genre :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.ScreenUpdating = False
Dim myRange As Range
Set myRange = Sheets("premier"').Range ("A:A", "B:B", "C:C","E:E")'les colonnes à copier'
If Not Intersect(Target, myRange) Is Nothing Then
myRange.Copy Destination:=Sheets("deuxième").Range("C:C", "D:D", "E:E", "G:G")
End If

Application.SreenUpdating = True
End Sub

Voilà ci dessus les manipulations que je veux pouvoir faire sur toute feuille que je désire.. Merci d'avance pour votre aide. En fait ma compilation n'est pas la bonne. Ou alors comment modifier le code proposé par Phil69970 pour y arriver où celui de Jacky67 qui me semble très simple et léger.

Cordialement
RE..
Si les colonnes source sont différentes des colonnes destination et discontinues, il faudra s'y prendre en plusieurs fois
Une piste....
VB:
Private Sub Worksheet_Activate()
premier.[A:C].Copy [c1]
premier.[e:e].Copy [g1]
End Sub
 
Dernière édition:

leregalgourmand

XLDnaute Nouveau
Rebonjour à tous,

Merci beaucoup à vous tous pour vos propositions instructives et très pratiques. La proposition de l'élément Range de Phil69970 est très intéressante quandled colonnes se suivent comme A,B,C et la destination ou la cible est constituée de colonnes qui se suivent. La proposition de Jacky67 est également génial dans ce cas de figure avec une grande simplicité. Voilà mon problème à ce niveau. En fait, je veux pouvoir faire cette opération sur des colonnes aléatoires aussi sur la feuille 2 ou 3 avec la mise en forme source. Voir l'exemple dans le code suivant :

VB:
Private Sub Worksheet_Activate()
premier.Columns("A:C").Copy [C1]
premier.Columns("E").Copy [G1]
premier.Columns("H").Copy [I1]
End Sub

Ce code est parfait je l'ai testé et je l'utilise.
Merci encore à vous tous
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
288 600
Messages
1 893 372
Membres
169 871
dernier inscrit
Mainos
Haut Bas