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@@
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
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
**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 :
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
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 :
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@@
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
Toi aussi, un vrai fidèle à Excel 2003 ! voire au mpfe.
J@@
Le 21/12/2018 à 07:21, Jacquouille a écrit :
'---------------------------------------------------
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