Macro excel decalage colonne à droite

Résolu/Fermé
soniatouns777 Messages postés 16 Date d'inscription mercredi 26 janvier 2011 Statut Membre Dernière intervention 26 février 2011 - 28 janv. 2011 à 09:07
 soniatouns777 - 28 janv. 2011 à 11:50
Bonjour,

ca fait un moment que je bloque :
Je voudrais ajouter les mêmes cellules : C3 :C15 et D3 :D15 et C19 :C31 et D37 :D47 (ce sont des données qui se mettent automatiquement à jour tout les mois) de la feuille Tableau Fonctionnement vers la feuille Cumul Fonctionnement dans les plages C4 :F16 pour janvier, ensuite de G4 :J16 pour février et ainsi de suite jusqu'en décembre : donc à chaque fois je colle 4 colonnes plus loin vers la droite répercutant les titres et le format

mon souci est que les données doivent s'ajouter par la droite, alors qu'avec moi elles s'écrasent

Merci de votre aide
A voir également:

4 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
Modifié par pijaku le 28/01/2011 à 09:45
Bonjour,
Tu as plusieurs solutions pour résoudre ton problème.
Si tu le souhaites, tu peux placer ton code vba ici dans une réponse (n'oublie pas les balises "codes" à côté de souligné S) et on sera à même de te le corriger.
Sinon, disais je donc, tu peux utiliser :

1- Numéro de la première colonne vide à droite :
Dim PremiereColonneVideADroite As Integer 
    PremiereColonneVideADroite = Range("IV1").End(xlToLeft).Column + 1

2- Issu de : cette excellente source...
- Dernière ligne renseignée de la feuille de calculs
Dim Derlig As Long 
DerLig = Split(Worksheets("Feuil2").UsedRange.Address, "$")(4)
- donne la lettre de la dernière colonne renseignée de la feuille de calculs
Dim Dercol As String 
Dercol = Split(Worksheets("Feuil2").UsedRange.Address, "$")(3)
- Donne le numéro de la dernière Colonne de la feuille de calculs
Dim Dercol As Long 
Dercol = Range(Split(Worksheets("Feuil2").UsedRange.Address, "$")(3) & 1).column

3- Une boucle peut être également utilisée.
Pour boucler toutes les 4 colonnes :
Dim Col As Integer 
For Col = 1 To 37 Step 4 
    MsgBox Cells(1, Col).Address 
Next
Tu dis...
"Laissez-moi deviner... Votre surnom, c'est «Bande Passante»? "
- Le Tribunal des flagrants délires- P.Desproges -
1
soniatouns777 Messages postés 16 Date d'inscription mercredi 26 janvier 2011 Statut Membre Dernière intervention 26 février 2011 1
28 janv. 2011 à 10:22
bonjour pijaku, merci pour ta réponse
en fait j'ai déjà un debut de code (ca fait 3 jours que je suis dessus et je suis pas super calé), je dois ajouter une boucle à mon code et je ne sais pas comment !!
ci dessous mon code <Sub Macro()

Dim i As Integer

With Sheets("Tableau Fonctionnement")
i = .Range("C5").End(xlToRight).Column + 1
Sheets("Cumul Fonctionnement").Range("C5:F16").Copy
Sheets("Cumul Fonctionnement").Cells(6, i).PasteSpecial Paste:=xlFormats
.Range("C5:D15").Copy
Sheets("Cumul Fonctionnement").Cells(6, i + 1).PasteSpecial Paste:=xlPasteValues

.Range("D21:D31").Copy
Sheets("Cumul Fonctionnement").Cells(6, i + 2).PasteSpecial Paste:=xlPasteValues

.Range("D37:D47").Copy
Sheets("Cumul Fonctionnement").Cells(6, i + 3).PasteSpecial Paste:=xlPasteValues

End With
End Sub>
1
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
28 janv. 2011 à 10:40
Comme indiqué dans mon post précédent :
A essayer car je n'ai pas testé... et ne suis pas bien réveillé!!!
Dim i As Integer 
With Sheets("Tableau Fonctionnement") 
For i =  .Range("C5").End(xlToRight).Column + 1 To .Range("C5").End(xlToRight).Column + 48 'ici 48 représente 4 x 12 mois ... à vérifier!
i = .Range("C5").End(xlToRight).Column + 1 
Sheets("Cumul Fonctionnement").Range("C5:F16").Copy 
Sheets("Cumul Fonctionnement").Cells(6, i).PasteSpecial Paste:=xlFormats 
.Range("C5:D15").Copy 
Sheets("Cumul Fonctionnement").Cells(6, i + 1).PasteSpecial Paste:=xlPasteValues 

.Range("D21:D31").Copy 
Sheets("Cumul Fonctionnement").Cells(6, i + 2).PasteSpecial Paste:=xlPasteValues 

.Range("D37:D47").Copy 
Sheets("Cumul Fonctionnement").Cells(6, i + 3).PasteSpecial Paste:=xlPasteValues 
Next i
End With 


Pour placer du code ici, sélectionne le en entier et clique sur <> en haut de chaque réponse...
0
soniatouns777
28 janv. 2011 à 11:01
salut pijaku
la macro s'exécute sans fin et toujours sur la même plage !!

merci encore de ton aide
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
28 janv. 2011 à 11:31
Bon, chez moi, la boucle s'arrête...
Toujours sur la même plage, étonnant...
De toutes façons, il y a pas mal d'erreur dans le code. En voici une :
Range("C5:F16").Copy
C5:F16 = 4 colonnes
Cells(6, i).PasteSpecial ---> ici on prends pour exemple i=1. On colle donc en A6, C5:F16, 4 colonnes
Range("C5:D15").Copy
Cells(6, i + 1).PasteSpecial ---> ici i+1=2, forcément... Or on devrait coller en colonne 5...

Faisons simple, enregistre une copie de ton classeur (en .xls, xl version 97-2003) sous un autre nom, remplace les données confidentielles dans cette copie par des chiffres et des lettres ou ce que tu veux et joins le nous, grâce à https://www.cjoint.com/ (tu va sur ce site, créer un lien vers ton fichier et reviens coller ce lien dans une réponse ici même).
0
soniatouns777
28 janv. 2011 à 11:50
ca y 'est j'ai corrigé mon code, ca marche allélouya
je crois que c'était moi qui n'étais pas réveillé !!
merci encore pijaku pour ta précieuse collaboration
0