Macro - copier des données dans première colonne vide

Résolu/Fermé
oldwise Messages postés 11 Date d'inscription mardi 18 août 2015 Statut Membre Dernière intervention 8 septembre 2015 - 18 août 2015 à 11:49
oldwise Messages postés 11 Date d'inscription mardi 18 août 2015 Statut Membre Dernière intervention 8 septembre 2015 - 8 sept. 2015 à 10:10
C:\Users\LECOZANNET-00378\Desktop\Feuille date.png

Bonjour à tous et merci d'avance pour votre aide,

Description :
J'ai une feuille nommée (date). C'est une autre macro que je n'évoquerai pas ici (qui fonctionne :) )
Une autre nommée "tableau_synthese".

Sur la feuille (date) j'ai plusieurs colonnes dont :
- une colonne des entrées
- une colonne des soldes
- une colonne délais
Je voudrais coller ces trois colonnes sur la feuille "tableau_synthese" à partir de la première colonne vide avec leur entête sur la ligne 2

Puis en relançant la macro que ces colonnes (qui seront sur une feuille (date 2)) soient copiées sur les colonnes vides suivantes, etc... (cela me permet d'avoir un tableau de synthèse, base pour la création de courbes d'évolution de mes données)

Voici le début de mon code pour coller les entêtes et les données des "entrées" avec deux variantes dont aucune ne fonctionne ....
Sub Tableau_synthèse()
'
<ital>' Tableau_synthèse Macro
'

'Colonne_ET : colonne en tête
'Colonne_E : colonne entrée

Dim Colonne_ET As Integer
Dim Colonne_E As Integer

'Mise en place des en têtes

Sheets("10 aout 2015").Select
Range("E4,G4,I4").Select
Range("I4").Activate
Selection.Copy
'Trouver la première colonne vide et copier les entêtes

Sheets("Tableau_Synthese").Select

'Colonne_ET = 4


Colonne_ET = Cells(2, Cells.Columns.Count).End(xlToRight).Column + 1
'If Cells(2, Colonne_ET) = "" Then
'If Colonne_ET = "" Then
' La cellule ligne 2 colonne 1 est vide
'Cells(2, Colonne_ET).Select
Columns(Colonne_ET).Select

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False

'Else
'Cells(Columns.Count, Colonne_ET).End(xlUp).Offset(2, 0).Select
' End If



'Copier les entrées sur la Colonne vide dispo
'Copier

Sheets("10 aout 2015").Select
Range("I5:I30").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Tableau_Synthese").Select

'trouver colonne vide

Colonne_E = 1

If Cells(3, Colonne_E) = "" Then
' La cellule ligne 3 colonne 1 est vide
Cells(3, Colonne_E).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False

Else
Cells(Rows.Count, Colonne_E).End(xlUp).Offset(2, 0).Select
End If</ital>

Merci à tous !


 


1 réponse

gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
18 août 2015 à 19:02
Bonjour,

Tu ne peux pas faire de copie avec des plages multiples
Range("E4,G4,I4").Copy
ne fonctionne pas.

Si j'ai bien compris ce que tu veux faire, je te propose ce code :
Sub Tableau_synthèse()
'
' Tableau_synthèse Macro'

'Colonne_ET : colonne en tête
'Colonne_E : colonne entrée
Dim Colonne_ET As Integer
Dim Colonne_E As Integer
Dim w_ET As Worksheet
Dim w_E As Worksheet
Dim lig As Long

'Mise en place des en têtes

Set w_E = Sheets("10 aout 2015")
Set w_ET = Sheets("Tableau_Synthese")
 'Trouver la première colonne vide et copier les entêtes
    Colonne_E = 5
    Colonne_ET = w_ET.Cells(2, w_ET.Columns.Count).End(xlToLeft).Column + 1
    lig = Cells(Rows.Count, Colonne_E).End(xlUp).Row - 3
'Copier les entrées sur la Colonne vide dispo
    w_E.Cells(4, Colonne_E).Resize(lig, 5).Copy
    w_ET.Cells(2, Colonne_ET).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    w_ET.Cells(2, Colonne_ET).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    w_ET.Columns(Colonne_ET + 1).Delete
    w_ET.Columns(Colonne_ET + 2).Delete
End Sub
0
oldwise Messages postés 11 Date d'inscription mardi 18 août 2015 Statut Membre Dernière intervention 8 septembre 2015
19 août 2015 à 10:54
Merci beaucoup pour ton aide.

J'ai essayé la formule, j'ai une erreur d'exe 1004 sur la ligne
w_E.Cells(4, Colonne_E).Resize(lig, 5).Copy

Merci encore
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684 > oldwise Messages postés 11 Date d'inscription mardi 18 août 2015 Statut Membre Dernière intervention 8 septembre 2015
19 août 2015 à 12:02
Bonjour,

Tu as bien une feuille "10 aout 2015" avec cette orthographe erronée ?
Sinon, il faut adapter le nom de la feuille
Set w_E = Sheets("10 aout 2015")
0
oldwise Messages postés 11 Date d'inscription mardi 18 août 2015 Statut Membre Dernière intervention 8 septembre 2015 > gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020
19 août 2015 à 13:32
Salut,

Oui j'ai vérifié les ortho c'est ok.
C'est curieux. J'ai lancé une nouvelle fois la commande et cela a fonctionné (sauf que cela me retire les trois dernières lignes dès la seconde exécution). Lorsque je refais le test à nouveau c'est soit la ligne suivante qui bloque (si je lance avec la feuille "Tableau_Synthese" active) :
w_E.Cells(4, Colonne_E).Resize(lig, 5).Copy (erreur 1004)

Soit celle-ci (si je lance avec la feuille "10 aout 2015" active) :

w_ET.Cells(2, Colonne_ET).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Message erreur : "cette opération requiert que les cellules fusionnées soient de taille identique"
(Sachant que mes lignes 1 et 2 de la feuille "10 août 2015" sont fusionnées A1:L1 et A2:L2, ce sont les lignes de titres - non utilisées dans mon second tableau)

Franchement merci pour ton aide
0
oldwise Messages postés 11 Date d'inscription mardi 18 août 2015 Statut Membre Dernière intervention 8 septembre 2015 > oldwise Messages postés 11 Date d'inscription mardi 18 août 2015 Statut Membre Dernière intervention 8 septembre 2015
19 août 2015 à 14:52
Autre précision.
J'ai testé la macro à partir d'une seconde feuille date "17 aout 2015". Au premier lancement cela supprime la colonne C et colle les entêtes à partir de la colonne B. Lorsque je la relance, la macro s'exécute niquel. Au troisième idem mais supprime les trois dernières lignes. Après c'est stable (même résultats y compris les lignes qui restent supprimées)

Bizarre....
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
19 août 2015 à 19:00
Bonjour,

En regardant un peu plus, j'ai oublié une affectation sur la ligne ci-dessous et comme tu lances de plusieurs feuilles cela crée des soucis et en corrigeant cela devrait t'éviter les bugs.
    lig = w_E.Cells(Rows.Count, Colonne_E).End(xlUp).Row - 3

"cette opération requiert que les cellules fusionnées soient de taille identique"
En VBA, comme si tu le fais manuellement, les cellules fusionnées ne peuvent être copiées qu'à l'identique : vérifies bien que ton tableau à copier E4:Ix n'a pas de cellules fusionnées.
0