Copie de colonne automatique

Bonjour/Bonsoir,

Je galère un peu je me lance tout doucement dans le VBA j'ai déja grace à l'aide de ce forum mis en place des trucs bien plus complexe mais ça a toujours été du copier collé.

Ici c’est un truc je pense plus simple mais au moin j'y arrive tout seul ou presque ^^.

Je souhaite faire la copie de colonne d'une feuille dans des colonnes d'autres feuilles.

Exemple Feuille 1 Copier colonne A,B,C vers feuille 2 colonne A,B,C

J'utilise actuellement cette formule

Sub copie()

Sheets("Spare parts").Range("A:A").Copy Destination:=Sheets("Maintenance").Range("A:A")
Sheets("Spare parts").Range("B:B").Copy Destination:=Sheets("Maintenance").Range("B:B")
Sheets("Spare parts").Range("C:C").Copy Destination:=Sheets("Maintenance").Range("C:C")

End Sub

Mon problème est que ça ne fonctionne pas en temps réel.

Il faudrait en faites que ça fonctionne comme la formule: " ='Feuille1'!A1" etc pour toutes les cases

Je crois qu'il me manque un autoupdate ou alors je suis à coté de la plaque ^^.

Merci d'avance

Toriix

Salut Toriix,

si je comprends bien, il te faut une copie instantanée des données en 'Feuille 1'[A,B,C] vers 'Maintenance' [A,B,C] ?

En VBA, sous réserve d'autres événements Change() non-mentionnés dans ta demande :

Private Sub Worksheet_Change(ByVal Target As Range)
'
If Not Intersect(Target, Range("A:C")) Is Nothing Then Worksheets("Maintenance").Range(Target.Address) = Target
'
End Sub

Par formule (en [A1]), en étirant sur autant de lignes que nécessaires dans [A,B,C] :

=Feuille1!A1

... où tu remplaces 'Feuille1' par le nom de ta feuille-source.

Correct ?

A+

Bonjour Curulis,

Acutellement j'ai 4 pages sur mon tableur.

Je voudrais copier coller l'entierté des colonnes A B et C de la feuille 2 qui s'appelle Spare parts "peut être plus de colonne par après " sur la Feuille 1 qui s'appelle maintenance colonnes A B C.

La formule qui correspond sur excel comme je l'avais mentionné plus haut fais ceci "='Feuille2'!A1". que je met dans la case A1 de la feuille 1 et que je décuple vers le bas

Mais j'aimerais passer par le VBA pour ne pas que les formule ou en tout cas le résultat soit apparent.

Car dans ce cas ci j'ai 0 qui apparait et je dois en définir un certains nombre hors je ne sais pas combien de case j'aurais a terme.

Bien à toi

Salut Toriix,

Avec ce code à coller dans le module de la feuille 'Spare parts', tu as :

- Sub Worksheet_BeforeDoubleClick, la possibilité de double-cliquer en ligne 1 de cette feuille pour copier cette colonne entière dans 'Maintenance'.

Si tu veux pouvoir double-cliquer n'importe où dans cette colonne, tu supprimes

Target.Row = 1 And

;

- Sub Worksheet_Change, copier une cellule au moindre changement de celle-ci.

A toi de savoir quelle est la meilleure solution pour toi !

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'
Cancel = True
'
If Target.Row = 1 And Target <> "" Then _
    Worksheets("Maintenance").Columns(Target.Column).Value = Columns(Target.Column).Value
'
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
'
Worksheets("Maintenance").Range(Target.Address) = Target
'
End Sub

A+

La première solution me semble bien mais je n'arrive pas à la mettre en application.

Je t'envois la copie du tableur de base pour l'exemple.

Bien à toi

8spare-parts.xlsm (16.20 Ko)

Salut Toriix,

si je comprends bien, il te faut une copie instantanée des données en 'Feuille 1'[A,B,C] vers 'Maintenance' [A,B,C] ?

En VBA, sous réserve d'autres événements Change() non-mentionnés dans ta demande :

Private Sub Worksheet_Change(ByVal Target As Range)
'
If Not Intersect(Target, Range("A:C")) Is Nothing Then Worksheets("Maintenance").Range(Target.Address) = Target
'
End Sub

En faites ça n'a pas marché lors de mon test je ne sais pas pour quel raison mais maintenant ça à l'air de fonctionner avec cette solution

Et Si j'avais voulu copier les colonne ABC de la feuille 2 vers les colonnes DEF de la feuille .

La formule aurait été quoi ?

Salut Toriix,

la solution dont tu parles, qui maintenant fonctionne, ne copie qu'une cellule à la fois.

Que veux-tu réellement et complètement, finalement ?

  • copier une colonne complète ?
  • copier une cellule lors d'un changement de valeur, quelle que soit cette colonne ?
  • copier des colonnes dans d'autres colonnes ?
  • tout en même temps selon des critères définis, mesurables et calculables ?

Tout est possible ! Tu dois juste nous donner des protocoles précis, des critères, des conditions, bref, de quoi nous permettre de comprendre ton schéma décisionnel (p... que c'est beau comme phrase ! ).

Réfléchis à tout ça et tu nous reviens : rien de compliqué mais faut pas tout mélanger !

A+

Bha en réalité ici ca tombait bien puisque je devais copier coller les colonnes ABC de la feuille 2 vers les colonnes ABC de la feuille 1 mais il est possible que plus tard j'ai besoin de copier par exemple la colonne E de la feuille 2 vers la colonne F de la feuille 1.

(je n'aurais pas besoin de copier cellule unique).

Est-ce que je peux te demander de me mettre les explications des lignes pour comprendre exactement ce qu'il se passe avec la formule afin de me perfectionner stp?

et sinon oui belle phrase :p

Salut Toriix,

petit délire VBA te permettant de copier tes colonnes où tu le désires en 2 clics.

Principe

La macro attend une sélection multiple, et pour être exact une double sélection : en utilisant la touche CTRL lors de la 2e sélection, les deux sélections sont associées.

Pour désigne la(les) colonne(s) à copier :

- 1er clic (si 1 colonne) ou sélection (si plusieurs colonnes).

Attention : ne sélectionner q'UNE cellule (si 1 colonne à copier) ou plusieurs si plusieurs colonnes sur UNE ligne!

Par ex :

* pour copier la colonne [C], sélectionner [C1] ou [C10] ou [C5]... : UNE cellule!

* pour copier les colonnes [A:B], sélectionner les cellules [A1:B1] ou [A5:B5] ou [A8:B8]... sur UNE ligne!

Pour être valable, ta sélection ne doit pas être une cellule vide, la macro considérant alors cette colonne comme vide.

Tu peux sélectionner ainsi autant de colonnes que nécessaire. Les colonnes à copier considérées comme vides ne seront pas copiées.

Pour désigner les colonnes où copier les précédentes :

- 2e clic APPUYER SUR LA TOUCHE CTRL AVANT LE 2e CLIC !

Ici, UNE cellule suffit puisqu'elle désigne la colonne où démarrer la copie. Cette cellule peut être vide : aucune importance!

Si tu te rends compte que tu es en train de faire une belle c... et que la 2e sélection n'est pas terminée, pour annuler l'opération, fais en sorte que ta 2e sélection compte au moins DEUX lignes : la copie ne s'exécutera pas!

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'
Dim iCol1%, iCol2%, sCol1$, sCol2$
'
Application.EnableEvents = False
Application.ScreenUpdating = False
'
If Selection.Areas.Count = 2 Then
    If Selection.Areas(1).Rows.Count = 1 And Selection.Areas(2).Rows.Count = 1 Then
        iCol1 = Selection.Areas(1).Column
        iCol2 = Selection.Areas(2).Column
        For x = iCol1 To (iCol1 - 1) + Selection.Areas(1).Columns.Count
            If Selection.Areas(1).Cells(1, (x + 1) - iCol1) <> "" Then
                sCol1 = Split(Columns(x).Address(ColumnAbsolute:=False), ":")(1)
                sCol2 = Split(Columns(iCol2 - iCol1 + x).Address(ColumnAbsolute:=False), ":")(1)
                With Worksheets("Maintenance")
                    .Range(sCol2 & "1:" & sCol2 & .Range(sCol2 & Rows.Count).End(xlUp).Row).ClearContents
                    .Range(sCol2 & 1).Resize(Range(sCol1 & Rows.Count).End(xlUp).Row, 1).Value = _
                        Range(sCol1 & "1:" & sCol1 & Range(sCol1 & Rows.Count).End(xlUp).Row).Value
                End With
            End If
        Next
    End If
    [A1].Select
End If
'
Application.ScreenUpdating = True
Application.EnableEvents = True
'
End Sub

A+

13copycolumns.xlsm (17.85 Ko)

J'ai essayé ça fonctionne oui....

Je suis loin d'etre a ce niveau je suis encore vraiment débutant

Salut Toriix,

c'est en forgeant qu'on devient forgeron!

Bonne continuation!

A+

Rechercher des sujets similaires à "copie colonne automatique"