Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 Problème d'écriture avec Range(Cells(x,y), Cells(x+n,y))

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Webperegrino

XLDnaute Accro
Supporter XLD
Bonjour Le Forum,
Je coince avec les lignes de VBA suivantes et je n'arrive pas à contourner le problème.
Merci d'avance pour votre intervention ou toute bonne écriture la plus simple.
Webperegrino

VB:
'repas ShO feuille Origine, ShD feuille Destination
colO = 9 'on démarre à colonne I (9)
For col = 11 To 29 Step 2
'Méthode 1
ShO.Range(Cells(13, colO), Cells(derO, colO)).Copy '← ← c'est ici que le problème se situe
ShD.Cells(7, col).PasteSpecial Paste:=xlPasteValues
'Méthode 2
ShO.Range(Cells(13, colO + 2), Cells(derO, colO + 2)).Copy Destination:=ShD.Cells(7, col + 1) 'j'imagine qu'ici ça va aussi bloquer...
colO = colO + 4
Next
 
Bonsoir.
Classique.
Vous ne pouvez pas construire un Range d'objet Worksheet à partir de Range d'un autre objet Worksheet, en l’occurrence de la feuille active quand ce n'est pas précisé, or celle ci n'est sans doute pas la ShO.
VB:
'repas ShO feuille Origine, ShD feuille Destination
colO = 9 'on démarre à colonne I (9)
For col = 11 To 29 Step 2
'Méthode 1
ShO.Range(ShO.Cells(13, colO), ShO.Cells(derO, colO)).Copy '← ← c'est ici que le problème se situe
ShD.Cells(7, col).PasteSpecial Paste:=xlPasteValues
'Méthode 2
ShO.Range(ShO.Cells(13, colO + 2), ShO.Cells(derO, colO + 2)).Copy Destination:=ShD.Cells(7, col + 1) 'j'imagine qu'ici ça va aussi bloquer...
colO = colO + 4
Next
Remarque: je préfère toujours utiliser la cellule de départ à laquelle j'applique Resize, ça évite entre autre ce problème.
 
Dernière édition:
Le Forum,
Bonjour Dranreb,
Merci pour cette information.
J'avais aussi essayé en écrivant Range(ShO.Cells(13, colO), ShO.Cells(derO, colO)).Copy Destination:=ShD.Cells(7, col)
Ça ne fonctionne pas non plus pour probablement la remarque que vous faites en #2
Je vais dormir, mes neurones sont saturées,
Webperegrino
 
Bonjour
VB:
'repas ShO feuille Origine, ShD feuille Destination
colO = 9 'on démarre à colonne I (9)
For col = 11 To 29 Step 2
'Méthode 1
Range(sheets("ShO").Cells(13, colO), sheets("ShO").Cells(derO, colO)).Copy '← ← c'est ici que le problème se situe
sheets("ShD").Cells(7, col).PasteSpecial Paste:=xlPasteValues
'Méthode 2
Range(sheets("ShO").Cells(13, colO + 2), sheets("ShO").Cells(derO, colO + 2)).Copy Destination:=sheets("ShD").Cells(7, col + 1) 'j'imagine qu'ici ça va aussi bloquer...
colO = colO + 4
Next
A+ François
 
Dernière édition:
Bonjour,

On ne voit pas tes déclarations de variables.
As-tu bien déclaré tes variables ShO, ShD et derO ?
Contiennent-elles les bonnes valeurs au moment d'exécuter la ligne d'instruction ?


VB:
Dim shS as sheet, shC as sheet
Dim LigS as long

' Repas
set shS=sheets("NomDeTaFeuilleSource")   ' Feuille source
set shC=sheets("NomDeTaFeuilleCible")    ' Feuille Cible
LigS = xxx  ' On travaille sur la ligne source xxx
ColS = 9    ' On démarre à colonne I (9e colonne)

For ColEnCours = 11 To 29 Step 2

    ' Méthode 1
    shS.Range(shS.Cells(13, ColS), shS.Cells(LigS, ColS)).Copy    ' C'est ici que le problème se situe
    shC.Cells(7, ColEnCours).PasteSpecial Paste:=xlPasteValues

    ' Méthode 2
    shS.Range(shS.Cells(13, ColS + 2), shS.Cells(LigS, ColS + 2)).Copy
    Destination:=shC.Cells(7, ColEnCours + 1)    ' J'imagine qu'ici ça va aussi bloquer...

    ColS= ColS + 4

Next ColEnCours
 
Le Forum,
Bonjour Dranreb, Fanfan38, TooFatBoy,

- Mes variables ne sont pas définies,
- Les portions de cellules à copier-coller d’une feuille à l’autre contiennent soit "1" soit rien.

Merci pour vos suggestions.
Je revois tout cela et reviens vers vous,
Webperegrino
 
Le Forum,
Je viens d'expérimenter les propositions : celle de TooFatBoy fonctionne !
La ligne de #7 de Bernard tourne bien aussi.
Merci.

Mais rien à faire avec la ligne suivante
VB:
shS.Range(shS.Cells(13, ColS), shS.Cells(LigS, ColS)).Copy Destination:=shC.Cells(7, ColEnCours).PasteSpecial, Paste:=xlPasteValues
Merci beaucoup.
Webperegrino
 
Le Forum,
TooFatBoy, comme dirait l'inspecteur, en se tapant la paume sur le front, dans "Les cinq dernières minutes" de mon enfance : "Mais c'est bien sûr !".
Quant à la virgule, je l'explose et je ré-essaie... Merci Dranreb, pour la solution #9.
Belle journée à vous tous qui m'avez grandement aider à nouveau ici. Merci encore.
Webperegrino
 
Dernière édition:
Le Forum,
Me voilà avec l'embarras du choix Dranreb, avec la solution #9 qui fonctionne parfaitement.
Un peu de pédagogie, s'il vous plait, avec l'expression "Resize(LigS-13+1)".

LigS (feuille Source) est 108 (n° de ligne de la dernière cellule occupée à copier, dans la colonne partant à ligne 13)

(LigS-13+1) donne donc 96 : est-ce le nombre de cellules à coller ? C'est cela la signification de Resize ?(redimensionner sur 96 éléments à coller dans la feuille de destination, et qui sont dans la feuille source shS).

Si je comprends bien : "coller en feuille Cible les 96 éléments trouvés dans feuille Source".

C'est la première fois que j'utilise le "RESIZE".
Ça reviendrait donc à l'utilisation de la formule de TooFatBoy en #10, du genre :
FeuilleCible.Range("K7:K102").Value=FeuilleSource.Range("I13:I108").Value) pour l'action sur la première colonne réceptrice en Cible.

J'apprends tous les jours avec votre Forum, et dire qu'il y en a qui s'ennuient pendant l'été !
Webperegrino
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…