Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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

21 réponses
Avatar
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@@

10 réponses

1 2 3
Avatar
MichD
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
Avatar
MichD
Le 21/déc./2018 à 12:59, Jarobasearobase a écrit :
Juste du texte en D1. "Décembre" par exemple obtenue d'une liste de
choix en texte
J@@
Le 21/12/2018 à 07:45, MichD a écrit :
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


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
Avatar
Jarobasearobase
Ca marche parfaitement.
Un grand merci à toi, Denis, toujours aussi efficace.
Joyeuses Fêtes,
et salutations à la Belle Province !
J@@
Le 21/12/2018 à 08:06, MichD a écrit :
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
Avatar
Jarobasearobase
Encore un point, Denis, si tu le permets :
Tout va bien sauf erreur 13 (incompatibilité de type) pour la copie "valeur seule" sur la ligne
Set Dest = Dest.Resize(Are.Rows.Count) = Are.Value
*le collage "complet" est parfait avec
Set Dest = Dest.Offset(Are.Rows.Count)
AS-tu une idée ?
Merci
J@@ (excel 2003)
Le 21/12/2018 à 08:06, MichD a écrit :
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
Avatar
MichD
Au lieu de ceci :
Set Dest = Dest.Resize(Are.Rows.Count) = Are.Value
Ce devrait être cela :
Dest.Resize(Are.Rows.Count) = Are.Value
Il faut effacer : Set Dest
MichD
Avatar
Jarobasearobase
C'est bizarre, le code avait fonctionné,
mais maintenant j'ai une erreur 13 sur
Col = Application.Match(Mois, .Rows(1).Cells, 1)
J@@
Le 21/12/2018 à 09:06, MichD a écrit :
Au lieu de ceci :
Set Dest = Dest.Resize(Are.Rows.Count) = Are.Value
Ce devrait être cela :
Dest.Resize(Are.Rows.Count) = Are.Value
Il faut effacer : Set Dest >
MichD
Avatar
MichD
Le 21/déc./2018 à 14:56, Jarobasearobase a écrit :
C'est bizarre, le code avait fonctionné,
mais maintenant j'ai une erreur 13 sur
Col = Application.Match(Mois, .Rows(1).Cells, 1)

Bonjour,
ici, un fichier exemple :
https://www.cjoint.com/c/HLvufIXEcni
Est-ce qu'en D1, tu as un nom de mois?
Est-ce que dans l'autre feuille ce nom est présent, écrit de la même
manière?
Une erreur de type 13 ressemble à ceci :
Dim S As Long
S = "toto"
Le type de la variable étant défini comme une valeur numérique (Long),
si j'essaie d'y insérer une valeur texte, j'obtiens une erreur 13.
Moi, je ne peux pas faire plus.
MichD
Avatar
Jarobasearobase
Vraiment bizarre
la ligne Col = Application.Match(Mois, .Rows(1).Cells, 1)
n'est plus en erreur, sans action de ma part, fermeture excel, redémarrage, débogage.
Mais le résultat est étrange :
janvier ok (en colonne D
février en colonne B
mars en colonne K (août)
avril en colonne A
mai ok
juin en col B
juillet rien de copié
août en colonne C
octobre rien de copié
novembre rien de copié
décembre en colonne c
Le code testé:
'---------------------------------------------------
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)
' Dest.Resize(Are.Rows.Count) = Are.Value
Next
End Sub
'---------------------------------------------------
Avatar
Jarobasearobase
Ton fichier complété exactement comme le mien. Résultats bizarres.
https://www.cjoint.com/c/HLvuVOf0ylk
La seule différence est que ton code est dans la feuille, le mien dans un module std,mais cela ne
pose sans doute pas de problème.
Merci pour ta patience
J@@
ici, un fichier exemple :
https://www.cjoint.com/c/HLvufIXEcni
Est-ce qu'en D1, tu as un nom de mois?
Est-ce que dans l'autre feuille ce nom est présent, écrit de la même manière?
Une erreur de type 13 ressemble à ceci :
Dim S As Long
S = "toto"
Le type de la variable étant défini comme une valeur numérique (Long), si j'essaie d'y insérer une
valeur texte, j'obtiens une erreur 13.
Moi, je ne peux pas faire plus.
MichD
Avatar
MichD
Dans cette ligne de code :
Col = Application.Match(Mois, .Rows(1).Cells, 1)
Modifie le 1 pour un 0, probablement une erreur de frappe!
MichD
1 2 3