rendre variable la cellule o=c3=b9 copier des donn=c3=a9es entre 2 feuilles - Erreur 13

Le
Jarobasearobase
Bonjour à tous

je n'arrive pas à copier mes données dans la colonne de la feuille Cible dont l'entête est semblable
à la cellule D1 de la feuille Source.

Sub CopierSaisies()
Dim c As Variant

For Each c In Worksheets("Cible").Range("d1:o1") 'les entêtes à comparer
If c = Worksheets("Source").Range("D1") Then 'l'élément à comparer

With Worksheets("Source")
.Range("D10:D26").Copy
' Worksheets("Cible").Range("H2").PasteSpecial xlValues '''' cela fonctionne
Worksheets("Cible").Cells(2, c).PasteSpecial xlValues '''' ici j'ai une erreur 13

' la copie doit se faire dans la colonne de la feuille Cible dont l'entête = D1 de la feuille Source

End With
End If
Next
End Sub

Merci pour l'aide
Cordialement
J@@
Vos réponses Page 1 / 3
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
MichD
Le #26502296
Le 20/déc./2018 à 19:11, Jarobasearobase a écrit :
Bonjour à tous
je n'arrive pas à copier mes données dans la colonne de la feuille Cible
dont l'entête est semblable à la cellule D1 de la feuille Source.
Sub CopierSaisies()
Dim c As Variant
For Each c In Worksheets("Cible").Range("d1:o1")  'les entêtes à comparer
  If c = Worksheets("Source").Range("D1") Then    'l'élément à comparer
    With Worksheets("Source")
     .Range("D10:D26").Copy
'     Worksheets("Cible").Range("H2").PasteSpecial xlValues   '''' cela
fonctionne
     Worksheets("Cible").Cells(2, c).PasteSpecial xlValues    '''' ici
j'ai une erreur 13
' la copie doit se faire dans la colonne de la feuille Cible dont
l'entête = D1 de la feuille Source
    End With
  End If
Next
End Sub
Merci pour l'aide
Cordialement
J@@

Bonjour,
La variable C devrait être de type Range
Worksheets("Cible").Cells(2, c).PasteSpecial xlValues
C devrait une cellule et non une colonne.
En définissant C as Range, tu pourrais utiliser :
Worksheets("Cible").Cells(2, c.row).PasteSpecial xlValues
Je te suggère une autre approche pour copier la valeur d'une plage de
cellules vers une autre destination qui est simple et rapide.
Nom des feuilles et des plages de cellules à adapter.
'--------------------------------
Sub test()
Dim T As Variant
With Worksheets("Feuil1")
'.Tu places les données du tableau dans une
'variable de type tableau
T = .Range("A1:A10").Value
End With
'Maintenant, tu peux copier le tableau T où tu veux
'comme ceci, aussi souvent que tu veux.
With Worksheets("Feuil2")
'Copie vers la plage B1:B10
.Range("B1").Resize(UBound(T, 1), UBound(T, 2)) = T
'Copie vers la plage G10:G19
.Range("G10").Resize(UBound(T, 1), UBound(T, 2)) = T
End With
End Sub
'--------------------------------
MichD
MichD
Le #26502295
Bonjour,
La variable C devrait être de type Range
Worksheets("Cible").Cells(2, c).PasteSpecial xlValues
C devrait une cellule et non une colonne.
En définissant C as Range, tu pourrais utiliser :
Worksheets("Cible").Cells(2, c.row).PasteSpecial xlValues
Je te suggère une autre approche pour copier la valeur d'une plage de
cellules vers une autre destination qui est simple et rapide.
Nom des feuilles et des plages de cellules à adapter.
'--------------------------------
Sub test()
Dim T As Variant
With Worksheets("Feuil1")
'.Tu places les données du tableau dans une
'variable de type tableau
T = .Range("A1:A10").Value
End With
'Maintenant, tu peux copier le tableau T où tu veux
'comme ceci, aussi souvent que tu veux.
With Worksheets("Feuil2")
'Copie vers la plage B1:B10
.Range("B1").Resize(UBound(T, 1), UBound(T, 2)) = T
'Copie vers la plage G10:G19
.Range("G10").Resize(UBound(T, 1), UBound(T, 2)) = T
End With
End Sub
'--------------------------------
MichD
Jarobasearobase
Le #26502298
Merci Denis
**Pour la version avec Array :
1 - comment avoir plusieurs plages en Array qui se copieront à la suite l'une de l'autre :
T = .Range("D10:D26", "E10:E26", "F10:F22").Value ' erreur 450
2 - la zone de copie est variable (c'était le but de mon c) c'est à dire que la copie se fait dans
la colonne dont l'entête a le même contenu que la cellule D1 de la feuille Origine (j'ai 12 colonnes
janvier à décembre en Cible).
**Pour la version avec la variable c, en pressant F8, le c.row donne "1" et colle en colonne A,
alors qu'il devrait indiquer "7" pour coller dans la colonne où l'entête mentionne "juillet",
Merci pour tes lumières, et ta patience.
Cordialement
J@@
Le 20/12/2018 à 14:35, MichD a écrit :
Bonjour,
La variable C devrait être de type Range
Worksheets("Cible").Cells(2, c).PasteSpecial xlValues
C devrait une cellule et non une colonne.
En définissant C as Range, tu pourrais utiliser :
Worksheets("Cible").Cells(2, c.row).PasteSpecial xlValues
Je te suggère une autre approche pour copier la valeur d'une plage de cellules vers une autre
destination qui est simple et rapide.
Nom des feuilles et des plages de cellules à adapter.
'--------------------------------
Sub test()
Dim T As Variant
With Worksheets("Feuil1")
    '.Tu places les données du tableau dans une
    'variable de type tableau
    T = .Range("A1:A10").Value
End With
'Maintenant, tu peux copier le tableau T où tu veux
'comme ceci, aussi souvent que tu veux.
With Worksheets("Feuil2")
    'Copie vers la plage B1:B10
    .Range("B1").Resize(UBound(T, 1), UBound(T, 2)) = T
    'Copie vers la plage G10:G19
    .Range("G10").Resize(UBound(T, 1), UBound(T, 2)) = T
End With
End Sub
'--------------------------------
MichD
MichD
Le #26502346
Tu as changé la donne du problème:
Un exemple de code, tu dois modifier le nom des feuilles et
des plages de cellules s'il y a lieu.
'---------------------------------------------------
Sub test()
Dim Are As Range, Rg As Range, Mois As String
Dim Col As Long, Dest As Range
With Worksheets("Feuil1")
'Variable de type range qui regroupe les 3 plages de cellules.
Set Rg = Union(.Range("D10:D26"), Range("E10:E26"), Range("F10:F22"))
'identifier le mois de D1
'je suppose qu'en D1, tu as un chiffre représentant le mois
'Mois contient le texte complet représentant le mois
Mois = Format(DateSerial(2018, .Range("D1"), 1), "MMMM")
End With
'Dans la feuille de destination
'identifier la colonne où se retrouve le "mois" dans la ligne 1 de la
feuille
With Worksheets("Feuil2")
'Si le mois recherché n'est pas sur la ligne 1,
'cette ligne de code provoque une erreur.
'le texte du moins c'est le nom complet du mois
Col = Application.Match(Mois, .Rows(1).Cells, 1)
'Variable de type range désignant la cellule où débute la copie
Set Dest = .Cells(2, Col)
End With
'La copie des données dans la même colonne
For Each Are In Rg.Columns
Are.Copy Dest 'Dest= la cellule de destination
'Modifier la position de "Dest" pour la suite de la copie
Set Dest = Dest.Offset(Are.Rows.Count)
Next
End Sub
'---------------------------------------------------
MichD
MichD
Le #26502367
Le 21/déc./2018 à 06:15, MichD a écrit :
Tu as changé la donne du problème:
Un exemple de code, tu dois modifier le nom des feuilles et
des plages de cellules s'il y a lieu.
'---------------------------------------------------
Sub test()
Dim Are As Range, Rg As Range, Mois As String
Dim Col As Long, Dest As Range
With Worksheets("Feuil1")
     'Variable de type range qui regroupe les 3 plages de cellules.
     Set Rg = Union(.Range("D10:D26"), Range("E10:E26"), Range("F10:F22"))
    'identifier le mois de D1
    'je suppose qu'en D1, tu as un chiffre représentant le mois
    'Mois contient le texte complet représentant le mois
    Mois = Format(DateSerial(2018, .Range("D1"), 1), "MMMM")
End With
'Dans la feuille de destination
'identifier la colonne où se retrouve le "mois" dans la ligne 1 de la
feuille
With Worksheets("Feuil2")
    'Si le mois recherché n'est pas sur la ligne 1,
    'cette ligne de code provoque une erreur.
    'le texte du moins c'est le nom complet du mois
    Col = Application.Match(Mois, .Rows(1).Cells, 1)
    'Variable de type range désignant la cellule où débute la copie
    Set Dest = .Cells(2, Col)
End With
'La copie des données dans la même colonne
For Each Are In Rg.Columns
    Are.Copy Dest 'Dest= la cellule de destination
    'Modifier la position de "Dest" pour la suite de la copie
    Set Dest = Dest.Offset(Are.Rows.Count)
Next
End Sub
'---------------------------------------------------
MichD


Dans la dernière section de la procédure, si tu veux copier seulement
les valeurs de la plage de cellules, change cette ligne de code
Are.Copy Dest 'Dest= la cellule de destination
Pour
Dest.Resize(Are.Rows.Count) = Are.Value
MichD
Jarobasearobase
Le #26502439
Bonjour Denis
Merci pour ta réponse.
1 - J'ai une erreur 13 "incompatibilité de type" sur la ligne
Mois = Format(DateSerial(2018, .Range("D1"), 1), "MMMM")
Les "Mois" sont seulement du texte, au format standard, ils n'ont pas de fonction de calcul.
//PS: je suis sous Excel 2003 ... désolé d'avoir oublier de le préciser//
Merci pour ton aide
Cordialement
J@@
Le 21/12/2018 à 01:15, MichD a écrit :
Tu as changé la donne du problème:
'---------------------------------------------------
Sub test()
Dim Are As Range, Rg As Range, Mois As String
Dim Col As Long, Dest As Range
With Worksheets("Feuil1")
     'Variable de type range qui regroupe les 3 plages de cellules.
     Set Rg = Union(.Range("D10:D26"), .Range("E10:E26"), .Range("F10:F22"))
    'identifier le mois de D1
    'je suppose qu'en D1, tu as un chiffre représentant le mois
    'Mois contient le texte complet représentant le mois
    Mois = Format(DateSerial(2018, .Range("D1"), 1), "MMMM")
End With
'Dans la feuille de destination
'identifier la colonne où se retrouve le "mois" dans la ligne 1 de la feuille
With Worksheets("Feuil2")
    'Si le mois recherché n'est pas sur la ligne 1,
    'cette ligne de code provoque une erreur.
    'le texte du moins c'est le nom complet du mois
    Col = Application.Match(Mois, .Rows(1).Cells, 1)
    'Variable de type range désignant la cellule où débute la copie
    Set Dest = .Cells(2, Col)
End With
'La copie des données dans la même colonne
For Each Are In Rg.Columns
    Are.Copy Dest 'Dest= la cellule de destination
    'Modifier la position de "Dest" pour la suite de la copie
    Set Dest = Dest.Resize(Are.Rows.Count) = Are.Value 'modifié pour copie valeur
Next
End Sub
'---------------------------------------------------
MichD
Jacquouille
Le #26502459
Ah, au moins un frère.
Et frère Jacques, si je ne m'abuse. -))
Jacques
" Le vin est au repas ce que le parfum est à la femme."
.
"Jarobasearobase" a écrit dans le message de groupe de discussion :
pvj66c$17p6$
Bonjour Denis
Merci pour ta réponse.
//PS: je suis sous Excel 2003 ... désolé d'avoir oublier de le préciser//
Merci pour ton aide
Cordialement
J@@
MichD
Le #26502469
Le 21/déc./2018 à 11:59, Jarobasearobase a écrit :
Bonjour Denis
Merci pour ta réponse.
1 - J'ai une erreur 13 "incompatibilité de type" sur la ligne
  Mois = Format(DateSerial(2018, .Range("D1"), 1), "MMMM")
Les "Mois" sont seulement du texte, au format standard, ils n'ont pas de
fonction de calcul.


Qu'est-ce que tu as dans la cellule D1 ?
Le chiffre représentant le mois de 1 à 12
Une date particulière 21/12/2018
ou le texte représentant ledit mois "Décembre" par exemple.
MichD
Jarobasearobase
Le #26502479
:-)
Toi aussi, un vrai fidèle à Excel 2003 ! voire au mpfe.
J@@
Le 21/12/2018 à 07:21, Jacquouille a écrit :
Ah, au moins un frère.
Et frère Jacques, si je ne m'abuse.   -))
Jacques
" Le vin est au repas ce que le parfum est à la femme."
.
"Jarobasearobase"  a écrit dans le message de groupe de discussion : pvj66c$17p6$
Bonjour Denis
Merci pour ta réponse.
//PS: je suis sous Excel 2003 ... désolé d'avoir oublier de le préciser//
Merci pour ton aide
Cordialement
J@@
MichD
Le #26502494
La procédure a été modifiée :

'---------------------------------------------------
Sub test()
Dim Are As Range, Rg As Range, Mois As String
Dim Col As Long, Dest As Range
With Worksheets("Feuil1")
'Variable de type range qui regroupe les 3 plages de cellules.
Set Rg = Union(.Range("D10:D26"), Range("E10:E26"), Range("F10:F22"))
'identifier le mois de D1
'je suppose qu'en D1, tu as un chiffre représentant le mois
'Mois contient le texte complet représentant le mois
Mois = .Range("D1")
End With
'Dans la feuille de destination
'identifier la colonne où se retrouve le "mois" dans la ligne 1 de la
feuille
With Worksheets("Feuil2")
'Si le mois recherché n'est pas sur la ligne 1,
'cette ligne de code provoque une erreur.
'le texte du moins c'est le nom complet du mois
Col = Application.Match(Mois, .Rows(1).Cells, 1)
'Variable de type range désignant la cellule où débute la copie
Set Dest = .Cells(2, Col)
End With
'La copie des données dans la même colonne
For Each Are In Rg.Columns
Are.Copy Dest 'Dest= la cellule de destination
'Modifier la position de "Dest" pour la suite de la copie
Set Dest = Dest.Offset(Are.Rows.Count)
Next
End Sub
'---------------------------------------------------
MichD
Publicité
Poster une réponse
Anonyme