Copier coller et effacer

Bonjour à tous,

je commence à peine les macros, j'espère que vous m'excuserez mon manque de savoir:)

voila, j'un tableau qui liste l'identifiant de plusieurs projets (une grande liste d'ident). pour chacun de ces projets j'ai de la consommation chaque mois qui varie entre zéro et 10000.

je souhaiterai pour chacun de ces projets copier et coller dans un autre tableau (qui est dans un autre onglet)la consomation mais uniquement quand elle a réellement commencer à savoir quand la conso est supérieur à zéro

Merci pour votre aide

Bonjour,

Ton tableau est trop rudimentaire

Tu n'as pas de raison d'envoyer ton fichier complet, mais tu dois en respecter la structure, le nommage et la disposition des feuilles.

Pour les données effectivement quelques lignes suffisent mais là encore, il faut être rigoureux sur l'emplacement des données.

A minima les premières lignes et colonnes doivent être identiques.

A+

merci à toi.

je viens de rajouter les données manquantes (nom des onglets, les colonnes manquantes)

est ce que c'est mieux la?

Les données source s'arrêtent à la colonne G ?

Les tableau cible ne comporte que 4 colonnes M1,M2,M3,M4,?

Toutes les valeurs de Projet de la feuille "cycle de vie" sont-elles déjà présentes dans la feuille "Tableau" ? Et dans le même ordre ?


EDIT : Une possibilité.

La macro suivante copie les données de la Feuille "Tableau" vers la feuille "cycle de vie" quel que soit le nombre de colonnes source, dans le même ordre.

Si des données sont présentes dans la feuille "cycle de vie" les données sont remplacées.

Sub Copie()
Dim WsS As Worksheet, WsC As Worksheet
Dim iLCS%, iLRS%
Dim i%, iRC%, k%
iRC = 4
Set WsS = Worksheets("Tableau")
Set WsC = Worksheets("cycle de vie")
iLCS = WsS.Range("A6").End(2).Column
iLRS = WsS.Range("A6").End(4).Row
TabloS = WsS.Range(WsS.Cells(7, 1), WsS.Cells(iLRS, iLCS))
For i = 1 To UBound(TabloS)
WsC.Cells(iRC, 1) = TabloS(i, 1)
k = 2
For ii = 4 To iLCS
  If TabloS(i, ii) > 0 Then
  WsC.Cells(iRC, k) = TabloS(i, ii)
  k = k + 1
  End If
Next
iRC = iRC + 1
Next
End Sub

A+

Les données source s'arrête à la colonne G ?

ce travail doit être fait chaque mois, donc les colonnes sources vont se rajouter au fur et a mesure de l'année

Les tableau cible ne comporte que 4 colonnes M1,M2,M3,M4,

idem que la réponse pour la question précédente

Toutes les valeurs de Projet de la feuille "cycle de vie" sont-elles déjà présentes dans la feuille "Tableau" ? Et dans le même ordre ?

pour le moment les tableaux comptent

il n'y pas les même valeur, il y aura uniquement le projet (identifiant) et les valeurs M1, M2, M3

P.S: M1= premier mois durant lequel le projet consomme

Revoir ma réponse précédente que j'ai édité en même temps que toi.

j'ai enelevé une colonne et ça pas fait comme je veux, j'ai essayé de modifier la macro mais rien y fait

je sais que tu me l'a di d'être exacte mais le tableau va probablement évoluer donc plz

est ce que tu peux me faire des commentaires par ligne pour que je comprenne à quoi sert chaque ligne et que je puisse adapter la macro si il y a des changements

thanksssssssssssssss

Bonjour,

Le code fonctionne quelque soit le nombre de lignes et de colonnes de la feuille source, donc normalement pas de changement à effectuer. Le programme copie toutes les valeurs non nulles de la source quel que soit le nombre de colonnes prévues sur la cible.

Sub Copie()
Dim WsS As Worksheet, WsC As Worksheet ' S = Source, C = Cible
Dim iLCS%, iLRS% ' iLCS = Last column Source,  iLRS = Last Row Source
Dim i%, iRC%, k% ' le symbole % indique que les variables sont de type integer
' iRC est la première ligne du Tableau Cible
iRC = 4
Set WsS = Worksheets("Tableau")
Set WsC = Worksheets("cycle de vie")
' on mémorise la dernière colonne de la feuille Source
' la ligne d'en tête étant la ligne 6
iLCS = WsS.Range("A6").End(2).Column
' on mémorise la dernière ligne de la feuille Source
iLRS = WsS.Range("A6").End(4).Row
'On mémorise toutes les données dans un tableau virtuel
'Qui va de la première ligne (7) de la feuille Source à la dernière ligne, dernière colnne
TabloS = WsS.Range(WsS.Cells(7, 1), WsS.Cells(iLRS, iLCS))
'De la première ligne du Tablo à la dernière
For i = 1 To UBound(TabloS)
'la première cellule de chaque ligne de la feuille cible = la première cellule de chaque ligne de la feuille Source
WsC.Cells(iRC, 1) = TabloS(i, 1)
' On initialise le compteur de colonne
k = 2
'On analyse les données Source à partir de la colonne 4 jusqu'à la dernière
For ii = 4 To iLCS
  If TabloS(i, ii) > 0 Then ' Si la valeur est > à zéro
  WsC.Cells(iRC, k) = TabloS(i, ii) 'alors on l'écrit sur la ligne en cours de la feuille Cible
  k = k + 1 ' Et on incrémente le compteur de colonne
  End If
Next
' La ligne est terminé : On incrémente la ligne cible
iRC = iRC + 1
Next
End Sub

A+

merci c'est génial ça marche d'enfer

au fait au cas ou pour un projet:

j'ai dans le tableau source

m1=0, m2=0 et m3=2; m4=5 m6=0 et m7=5 m8=0 m9=4

actuellement on aura dans le tableau source:

m1=2, m2=5 m3=5 m4=4

est ce qu'on peut just enlever que les zéro au début et que dès le moment qu'on a de la consommation on enlève plus rien même si il y a des zéro?

on aura donc dans le tableau cible

m1=2, m2=5 m3=0 m4=5 m5=0 m6=4

Merci merci

Modifier la macro comme suit :

Sub Copie()
Dim WsS As Worksheet, WsC As Worksheet
Dim iLCS%, iLRS%
Dim i%, iRC%, k%, Y As Boolean
iRC = 4
Set WsS = Worksheets("Tableau")
Set WsC = Worksheets("cycle de vie")
iLCS = WsS.Range("A6").End(2).Column
iLRS = WsS.Range("A6").End(4).Row
TabloS = WsS.Range(WsS.Cells(7, 1), WsS.Cells(iLRS, iLCS))
For i = 1 To UBound(TabloS)
WsC.Cells(iRC, 1) = TabloS(i, 1)
k = 2
For ii = 4 To iLCS
  If TabloS(i, ii) > 0 Or Y Then
  Y = True
  WsC.Cells(iRC, k) = TabloS(i, ii)
  k = k + 1
  End If
Next
Y = False
iRC = iRC + 1
Next
End Sub

Bonne journée.

Bonjour,

merci merci beaucoup, j'ai repris ton code et je l'ai appliqué sur le fichier ci-joint ça bug, j'ai essayé de tout modifier et rien

peux tu jeter un oeil sur le fichier plzzzzzzzzzzzzzzzzzzzzzzz


fichier ci-joint

bonsoir,

OUAI... Ben déjà les feuilles sources et cibles sont inversées par rapport au fichier initial et en plus YA des colonnes parasites... Au lieu de partir de la colonne 4 tu part de la 17... En plus les premières lignes de chaque tableau ont changées... POUAH ! Et en plus tu n'en tiens même pas compte dans tes modifs : ça sert à quoi que je te commente le code ?

Tu corriges TOUSSA, tu inverses les noms de WsS et WsC et tu croises les doigts...

Ecoute, je verrai ça à tête reposée peut-être ce soir, peut-être demain. Car présentement je sors d'une petite semaine à l'hosto et mes priorités sont un peu instables... Mais si après tu me ressorts une autre présentation de derrière les fagots, je déclarerai forfait. Une macro est une pièce d'horlogerie, pas un essuie tout... Si on vous demande des classeurs démos, c'est pas pour le plaisir de recommencer le boulot tous les huit jours...

A+

Bonjour,

j'espere que y a rien grave, j'ai réussi à trouver par moi même.

désolé de t'avoir déranger , j'ai réinversé les onglets merci pour touttttttttttt

Sub test_plz1()

Dim WsS As Worksheet, WsC As Worksheet

Dim iLCS%, iLRS%

Dim i%, iRC%, k%, Y As Boolean

iRC = 4

Set WsS = Worksheets("Tableau")

Set WsC = Worksheets("cycle de vie")

iLCS = WsS.Range("A6").End(2).Column

iLRS = WsS.Range("A6").End(4).Row

TabloS = WsS.Range(WsS.Cells(1, 1), WsS.Cells(iLRS, iLCS))

For i = 1 To UBound(TabloS)

WsC.Cells(iRC, 1) = TabloS(i, 1)

k = 2

For ii = 17 To iLCS

If TabloS(i, ii) > 0 Or Y Then

Y = True

WsC.Cells(iRC, k) = TabloS(i, ii)

k = k + 1

End If

Next

Y = False

iRC = iRC + 1

Next

'cette macro permet de supprimer les lignes dans l'onglet "cycle de vie" et de rajouter les colonnes de "tableau" jusqu'à la colonne P'

Rows("1:3").Select

Selection.Delete Shift:=xlUp

Columns("B:P").Select

Selection.Insert Shift:=xlToRight

Sheets("Tableau").Select

Selection.Copy

Sheets("cycle de vie").Select

ActiveSheet.Paste

Range("L14").Select

Range("B1").Select

Application.CutCopyMode = False

Selection.Copy

Range("A1").Select

Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _

SkipBlanks:=False, Transpose:=False

Application.CutCopyMode = False

End Sub

Rechercher des sujets similaires à "copier coller effacer"