Problème copier/coller sous conditions et plusieurs feuilles

Résolu/Fermé
babibounette Messages postés 23 Date d'inscription lundi 5 août 2013 Statut Membre Dernière intervention 14 janvier 2014 - 5 août 2013 à 12:37
babibounette Messages postés 23 Date d'inscription lundi 5 août 2013 Statut Membre Dernière intervention 14 janvier 2014 - 6 août 2013 à 16:14
Bonjour,


Bonjour,
Je me retrouve confronter à un problème et en plus, je ne programme pas (j'ai fait du VBA il y a bien longtemps, pendant mes études... et je crois avoir tout perdu !). J'ai bien essayé de m'en sortir avec des formules mais je n'y arrive pas ?
Voilà la situation :
J'ai deux feuilles sous excel : une qui s'appelle « Tableau » et une autre « MM ».
J'aimerai copier et coller des données de la feuille « MM » dans « Tableau », mais avec des conditions.
Dans « tableau », j'ai :
Année en colonne H
Mois en colonne I
Jour en colonne J
Heure en colonne K
Minute en colonne L
Et en colonne Z, je voudrais mettre mon fameux « coller » (issu de la feuille « MM »).
Dans « MM », j'ai :
Année en colonne A
Mois en colonne B
Jour en colonne C
Heure en colonne D
Minute en colonne E
Et en colonne F, ce que je veux « copier » dans la feuille « Tableau ».

Au niveau des conditions, il faudrait vérifier la date et l'heure pour que ça corresponde entre les deux feuilles mais (forcément il y a un mais), dans « Tableau », j'ai des heures aléatoires (par exemple, 10 : 16 puis ensuite 16 : 57) mais pas dans « MM » où j'ai des données toutes les 10 minutes (10 :10, 10 :20...).

Un exemple :
Dans « Tableau », pour le 5 avril 2013, je veux remplir ma colonne Z pour 22 :17.
Je voudrais donc aller chercher dans « MM » la donnée pour cette même date mais à l'heure suivante soit 22 :20 et la copier-coller dans la colonne Z de « Tableau ».

J'espère que je suis à peu près claire... Merci de m'aider ;)

A voir également:

15 réponses

melanie1324 Messages postés 1505 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
5 août 2013 à 14:05
Bonjour,
cela peut se faire par VBA.
Mais en plus simple, ne pourrais-tu tout simplement pas cocnatener année, mois, jour, heure, année dans les deux tableaux et utiliser la fonction recherchev en focntion des concatenations?

sub copiercoller ()

nblignes = Sheets("tableau").Cells(1,8).End(xlDown).Row
nbligne = Sheets("MM").Cells(1,1).End(xlDown).Row


for lignetableau = 1 to nblignes
for lignemm = 1 to nbligne
if sheets("Tableau").cells(lignetableau,8) = sheets("MM").cells(lignemm,1) and sheets("Tableau").cells(lignetableau,9) = sheets("MM").cells(lignemm,2) and sheets("Tableau").cells(lignetableau,10) = sheets("MM").cells(lignemm,3) and sheets("Tableau").cells(lignetableau,11) = sheets("MM").cells(lignemm,4) and sheets("Tableau").cells(lignetableau,12) = sheets("MM").cells(lignemm,5) then

sheets("Tableau").cells(lignetableau,26) = sheets("MM").cells(lignemm,6)
lignemm = nbligne
end if
next lignemm
next lignetableau

end sub
0
babibounette Messages postés 23 Date d'inscription lundi 5 août 2013 Statut Membre Dernière intervention 14 janvier 2014
5 août 2013 à 14:31
merci pour ta réponse !
alors, que dois je faire ?
je mets année, mois, jour, heure et minute en concatenant dans une seule colonne.
mais après, le problème, c'est avec recherchev, j'en fais quoi :/ je suis désolée de poser cette question...
et la macro, elle vient après le fait d'avoir fait recherchev ?
et ce que j'ai pas dit c'est que j'ai 600 lignes à traiter...
0
melanie1324 Messages postés 1505 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
5 août 2013 à 16:24
soit tu utilises la fonction recherchev soit tu utilises la macro et fait ce que tu as demandé.

Pour utiliser la fonction recherchev :
Dans « tableau », j'ai :
Année en colonne H
Mois en colonne I
Jour en colonne J
Heure en colonne K
Minute en colonne L
Et en colonne Z,tu oncatènes H,I,J,K et L
en colonne AA : recherchev(colprécédente,feuilleMMcolonneF:G,2,faux)
Dans « MM », j'ai :
Année en colonne A
Mois en colonne B
Jour en colonne C
Heure en colonne D
Minute en colonne E
Et en colonne F, rejoutes une colonne ou tu cocnatènes A,B,C,D,E,F
G : tu mets ce que tu veux copier.
0
babibounette Messages postés 23 Date d'inscription lundi 5 août 2013 Statut Membre Dernière intervention 14 janvier 2014
5 août 2013 à 17:15
ah ! on s'approche on s'approche !
je viens de tester la macro. alors, ça marche pour les heures qui correspondent entre ma feuille "Tableau" et ma feuille "MM", c'est à dire par exemple 00:40, 1:10, 16:20, etc.

par contre, ça ne fonctionne pas pour les heures non rondes.
Un exemple : dans ma feuille "Tableau", j'ai 22:17, je voudrais faire correspondre la valeur de 22:20 qui provient de la feuille "MM".
En fait, dans la feuille "Tableau", entre 1:00 et 1:09, je voudrais la valeur issue de "MM" correspondant à 1:10
Dans "Tableau", pour 1:10 à 1:19, je voudrais la valeur de "MM" enregistrée à 1:20.
etc etc.
voilà, j'espère que c'est clair ;)


j'ai essayé l'autre méthode, j'y arrive pas mais je pense que j'ai un problème aussi avec ces histoires de décalage d'heures... la fonction ne retrouve pas 201304052217 car ce nombre n'existe pas dans ma feuille "MM" (j'ai 201304052210 et 201304052220)...
0
melanie1324 Messages postés 1505 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
Modifié par melanie1324 le 6/08/2013 à 09:36
J'ai modifié cette macro, à voir ce qu'elle donne mais elle suppose que ta feuille tableau est classée chronologiquement.

sub copiercoller ()

nblignes = Sheets("tableau").Cells(1,8).End(xlDown).Row
nbligne = Sheets("MM").Cells(1,1).End(xlDown).Row


for lignetableau = 1 to nblignes
for lignemm = 1 to nbligne
if sheets("Tableau").cells(lignetableau,8) = sheets("MM").cells(lignemm,1) and sheets("Tableau").cells(lignetableau,9) = sheets("MM").cells(lignemm,2) and sheets("Tableau").cells(lignetableau,10) = sheets("MM").cells(lignemm,3) and sheets("Tableau").cells(lignetableau,11) = sheets("MM").cells(lignemm,4) then
'cela suppose que tes heures dans la feuille tableau sont dans l'ordre chronologique
if lignetableau>= 1 then
if sheets("MM").cells(lignemm,5) > sheets("Tableau").cells(lignetableau -1,12) and sheets("MM").cells(lignemm,5) < sheets("Tableau").cells(lignetableau +1,12) then
sheets("Tableau").cells(lignetableau,26) = sheets("MM").cells(lignemm,6)
lignemm = nbligne
end if
else
if sheets("MM").cells(lignemm,5) > sheets("Tableau").cells(lignetableau +1,12) then
sheets("Tableau").cells(lignetableau,26) = sheets("MM").cells(lignemm,6)
lignemm = nbligne

end if
end if
next lignemm
next lignetableau

end sub
0
babibounette Messages postés 23 Date d'inscription lundi 5 août 2013 Statut Membre Dernière intervention 14 janvier 2014
6 août 2013 à 09:53
salut !

mon tableau est rangé ainsi : 1er mai de 00 à 23h59, 2 mai de 00 à 23h59...
j'ai supprimé la première macro et j'ai mis la nouvelle.
par contre, quand je compile, ça me marque "erreur de compilation: next sans for", en soulignant le "next" de "next lignemm" :/
0
melanie1324 Messages postés 1505 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
6 août 2013 à 10:10
il manque un end if, je 'lai rajouté :

sub copiercoller ()

nblignes = Sheets("tableau").Cells(1,8).End(xlDown).Row
nbligne = Sheets("MM").Cells(1,1).End(xlDown).Row


for lignetableau = 1 to nblignes
for lignemm = 1 to nbligne
if sheets("Tableau").cells(lignetableau,8) = sheets("MM").cells(lignemm,1) and sheets("Tableau").cells(lignetableau,9) = sheets("MM").cells(lignemm,2) and sheets("Tableau").cells(lignetableau,10) = sheets("MM").cells(lignemm,3) and sheets("Tableau").cells(lignetableau,11) = sheets("MM").cells(lignemm,4) then
'cela suppose que tes heures dans la feuille tableau sont dans l'ordre chronologique
if lignetableau>= 1 then
if sheets("MM").cells(lignemm,5) > sheets("Tableau").cells(lignetableau -1,12) and sheets("MM").cells(lignemm,5) < sheets("Tableau").cells(lignetableau +1,12) then
sheets("Tableau").cells(lignetableau,26) = sheets("MM").cells(lignemm,6)
lignemm = nbligne
end if
else
if sheets("MM").cells(lignemm,5) > sheets("Tableau").cells(lignetableau +1,12) then
sheets("Tableau").cells(lignetableau,26) = sheets("MM").cells(lignemm,6)
lignemm = nbligne
end if
end if
end if
next lignemm
next lignetableau

end sub
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
babibounette Messages postés 23 Date d'inscription lundi 5 août 2013 Statut Membre Dernière intervention 14 janvier 2014
6 août 2013 à 10:21
alors je viens de tester, la macro ne me remplit que 2 cases, en lignes 8 et 9, je ne comprends pas pourquoi... la première case a la bonne valeur et la seconde non.
je peux te filer le fichier pour que tu puisses y regarder ou pas ?
0
melanie1324 Messages postés 1505 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
6 août 2013 à 10:34
il faut que je vois ton fichier car 'javance à l'aveugle et onr isque de tourner en rond.
mets une xemple de ton fichier sur cjoint.com
0
babibounette Messages postés 23 Date d'inscription lundi 5 août 2013 Statut Membre Dernière intervention 14 janvier 2014
6 août 2013 à 10:42
oui je m'en doutais lol !
voilà, j'ai mis que quelques lignes, j'ai supprimé les colonnes qui ne nous intéressent pas ici comme ça, tu y verras plus clair :)

https://www.cjoint.com/?3HgkPubgkYF
0
melanie1324 Messages postés 1505 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
6 août 2013 à 11:19
0
babibounette Messages postés 23 Date d'inscription lundi 5 août 2013 Statut Membre Dernière intervention 14 janvier 2014
6 août 2013 à 11:47
alors, ça a l'air de fonctionner !!!!! faut que je teste sur plus de lignes au cas où...
par contre, à la fin du programme, ça me marque "erreur d'exécution 1004 désolée, nous ne trouvons pas "C users utilisateur documents synthèse globale essai macro.xlsm. peut être l'avez vous déplacé, renommé ou supprimé ?"

et une autre question, si je veux copier d'autres colonnes de ma feuille MM, avec les mêmes conditions (donc en fait copier les valeurs des colonnes F, G, H et I) dans ma feuille "tableau", je dois rajouter quoi dans cette macro ? ou bien je dois en recréer une autre en modifiant certains paramètres ?

en tout cas déjà, je te remercie pour ton ce boulot !
0
babibounette Messages postés 23 Date d'inscription lundi 5 août 2013 Statut Membre Dernière intervention 14 janvier 2014
6 août 2013 à 12:11
donc je viens de faire un test avec toutes mes valeurs. il y a un petit souci.
le copier coller ne fonctionne pas pour les minutes comprises entre 50 et 59. ça me met une cellule non remplie et ensuite ça passe à une autre ligne.
dans le fichier que je t'ai passé, change les minutes de la dernière ligne (en L10), mets 54 à la place de 39 et tu vas voir...
sinon le reste est ok !
0
melanie1324 Messages postés 1505 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
6 août 2013 à 13:20
coucou,

j'ai enlevé une condition, à toi de me dire :

https://www.cjoint.com/c/CHgntZEmaxn
0
babibounette Messages postés 23 Date d'inscription lundi 5 août 2013 Statut Membre Dernière intervention 14 janvier 2014
6 août 2013 à 14:38
ça marche moins bien :(
là, pour 22h17 dans "Tableau", ça me donne la valeur de 22h10 de "MM" alors que je voudrais la valeur de 22h20 et les 2 dernières lignes ne donnent pas les bons résultats :/
0
melanie1324 Messages postés 1505 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
6 août 2013 à 14:49
0
babibounette Messages postés 23 Date d'inscription lundi 5 août 2013 Statut Membre Dernière intervention 14 janvier 2014
6 août 2013 à 14:58
à 22h54, ça me donne la valeur de 23h10 alors qu'il faudrait la valeur de 23h00. ça ne doit pas plaire à excel et aux macros les heures piles :(
on s'approche mais c'est pas tout à fait ça...
0
melanie1324 Messages postés 1505 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
6 août 2013 à 15:04
0
babibounette Messages postés 23 Date d'inscription lundi 5 août 2013 Statut Membre Dernière intervention 14 janvier 2014
6 août 2013 à 15:06
non toujours pareil, ça donne la valeur de 23h10 et non 23h...
0
babibounette Messages postés 23 Date d'inscription lundi 5 août 2013 Statut Membre Dernière intervention 14 janvier 2014
6 août 2013 à 15:09
y aurait pas un problème de format dans mon tableau ? je sais pas, j'essaie de t'aider ^^'
vu que les minutes sont à deux chiffres et pas le 0 ? ça devrait pas être "00" ?
0
melanie1324 Messages postés 1505 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
6 août 2013 à 15:14
joue la macro et appuies sur F8, elle se fera étape par étape et essaie de voir.
Car là je vois pas comment adapter la macro en fonction.
0
babibounette Messages postés 23 Date d'inscription lundi 5 août 2013 Statut Membre Dernière intervention 14 janvier 2014
6 août 2013 à 15:28
j'ai lancé la macro et fait F8, j'ai le pas à pas détaillé de la macro mais ça ne m'avance pas, ça me surligne en jaune des bouts d'instructions... en écrivant les résultats dans ma colonne Z de "Tableau"

bon je trouve que tu as déjà fait du bon boulot ! je te re-remercie !
on peut peut être laisser comme ça pour ça, si quelqu'un d'autre a une idée...

mais sinon, dernière question et après je t'embête plus, si je veux copier d'autres colonnes de ma feuille MM, avec les mêmes conditions (donc en fait copier les valeurs des colonnes F (ça c'est bon), G, H et I) dans ma feuille "tableau", je dois rajouter quoi dans cette macro ?
0
babibounette Messages postés 23 Date d'inscription lundi 5 août 2013 Statut Membre Dernière intervention 14 janvier 2014
6 août 2013 à 15:31
ah non y a un souci, ça donne pas la bonne valeur :
en fait, pour 21h54, ça donne la valeur de 23h10 maintenant !
0
melanie1324 Messages postés 1505 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
6 août 2013 à 15:38
reprend le 2ème ou 3ème fichier qui te semblait presque bon, ouvre un autre sujet ici en disant que tu as cette macro mais qu'il y a un souci et quelqu'un d'autre t'aidera.

Pour la copie des autres colonnes, là ou tu as :
sheets("Tableau").cells(lignetableau,26) = sheets("MM").cells(lignemm,6)

Tu copies et colles la ligne en dessous et tu décales comme ceci :
'pour remplir en AA, tur emplaces 26 par 27 de la feuille tableau
'pour copier la colonne, tu remplaces 6 par 7 et ca te donnes :
sheets("Tableau").cells(lignetableau,26) = sheets("MM").cells(lignemm,6)
sheets("Tableau").cells(lignetableau,27) = sheets("MM").cells(lignemm,7)
0
babibounette Messages postés 23 Date d'inscription lundi 5 août 2013 Statut Membre Dernière intervention 14 janvier 2014
6 août 2013 à 15:57
alors, je viens de faire ce que tu as dit pour la copie des autres colonnes, ça fonctionne nickel !
je vais donc ouvrir un autre post pour finaliser cette macro alors ! j'espère que quelqu'un va trouver la solution ;)
encore merci pour ton aide !!!!!!!!!!!!!!
0
melanie1324 Messages postés 1505 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
6 août 2013 à 16:13
de rien mais j'y arrive plus, je crois que 'jai trop le nez dedans pour trouver.
0
babibounette Messages postés 23 Date d'inscription lundi 5 août 2013 Statut Membre Dernière intervention 14 janvier 2014
6 août 2013 à 16:14
ça y est, j'ai posté une autre demande, on verra bien !
encore merci ;)
0