Copier lignes d'1 feuille à une autre ss cond
Résolu
Pat 59
-
Pat_59 Messages postés 26 Statut Membre -
Pat_59 Messages postés 26 Statut Membre -
Bonjour,
Je suis novice en VBA et je cherche à copier coller des lignes de feuilles différentes (8 excactements) sur une autre feuille (recap en quelque sorte) lorsqu'une cellule sur une de ces lignes est différentes de 0.
Je ne sais pas si j'ai été assez clair?
Pour être un peu plus clair: j'ai un classeur qui me donne des factures en fonction des bons de livraison. Le probléme est que je peus avoir plusieurs livraisons dans un mois et je souhaite n'avoir q'une seule facture par mois.
Voila, pas facil d'expliquer clairement mon probléme, j'ai maintenant besoin de l'aide de personnes plus expérimentées que moi en VBA.
Merci d'avance
Je suis novice en VBA et je cherche à copier coller des lignes de feuilles différentes (8 excactements) sur une autre feuille (recap en quelque sorte) lorsqu'une cellule sur une de ces lignes est différentes de 0.
Je ne sais pas si j'ai été assez clair?
Pour être un peu plus clair: j'ai un classeur qui me donne des factures en fonction des bons de livraison. Le probléme est que je peus avoir plusieurs livraisons dans un mois et je souhaite n'avoir q'une seule facture par mois.
Voila, pas facil d'expliquer clairement mon probléme, j'ai maintenant besoin de l'aide de personnes plus expérimentées que moi en VBA.
Merci d'avance
A voir également:
- Copier lignes d'1 feuille à une autre ss cond
- Comment copier une vidéo youtube - Guide
- Super copier - Télécharger - Gestion de fichiers
- Comment imprimer en a5 sur une feuille a4 - Guide
- Bruler feuille de laurier - Guide
- Feuille de pointage excel - Télécharger - Tableur
55 réponses
Salut
Tu peu faire une recherche dans ta colonne mois et copier coller la ligne correspondante au mois souhaité:
Deux solution soit tu applique la méthode de comparaison de colonne décrite dans la discussion suivante
https://forums.commentcamarche.net/forum/affich-13501092-vba-excel-2k-comparaison#8#dernier
Sinon je te donne ma méthode perso
Dim NumMois As Integer
'NumMois est la variable qui correspond à ton mois. si il est écrit en texte change integer par string
For j = 1 to 8
For i = x to y
'x = numéro de la première ligne (en générale 2 si tu à des titres à tes colonne)
'y le numéro de la dernière
Val=2
if sheeets(j).cells(i,N)=NumMois then 'N doit être remplacé par le numéro de la colonne qui contient le mois de la facture (A=1, B=2...)
Sheets(j).rows(i).copy
Sheets("recap").select
Shetts("recap").rows(Val).select
Activesheet.paste
Val=val+1
end if
next i
next j
Pour que ça fonctionne il faut que tes huit feuilles dans lesquelles tu cherche soit les huits première feuille de ton classeur, sinon change les valeurs de "for j = 1 to 8". dans tous les cas il faut que ces huits feuille se suivent.
Si tu les à renomées tu peu voir leur numéro dans la fenètre VBA
Tu peu faire une recherche dans ta colonne mois et copier coller la ligne correspondante au mois souhaité:
Deux solution soit tu applique la méthode de comparaison de colonne décrite dans la discussion suivante
https://forums.commentcamarche.net/forum/affich-13501092-vba-excel-2k-comparaison#8#dernier
Sinon je te donne ma méthode perso
Dim NumMois As Integer
'NumMois est la variable qui correspond à ton mois. si il est écrit en texte change integer par string
For j = 1 to 8
For i = x to y
'x = numéro de la première ligne (en générale 2 si tu à des titres à tes colonne)
'y le numéro de la dernière
Val=2
if sheeets(j).cells(i,N)=NumMois then 'N doit être remplacé par le numéro de la colonne qui contient le mois de la facture (A=1, B=2...)
Sheets(j).rows(i).copy
Sheets("recap").select
Shetts("recap").rows(Val).select
Activesheet.paste
Val=val+1
end if
next i
next j
Pour que ça fonctionne il faut que tes huit feuilles dans lesquelles tu cherche soit les huits première feuille de ton classeur, sinon change les valeurs de "for j = 1 to 8". dans tous les cas il faut que ces huits feuille se suivent.
Si tu les à renomées tu peu voir leur numéro dans la fenètre VBA
Merci d'avoir répondu!
Par contre, je pense ne pas avoir était clair dans mon explication.
En fait chaqu'une des huit feuilles "facture 1" à 8, reprend un des 8 bons de livraison. Dans chacune de ces factures tout le matériel est listé avec la quantité loué et donc le prix.
Ensuite ce que je cherche à faire maintenant, c'est créer une autre feuille et insérer dans celle-ci chaque lignes avec le nom du matériel et le montant de la location pour le mois. Car dans un même mois, il est possible d'emprunter le même matériel mai durant des périodes différentes.
Voici comment sont mes factures:
Désignation Px location/jours Type Quantité Nbre jours Total
J'espére que ça va t'aider à comprendre mon probléme.
Merci d'avance
Par contre, je pense ne pas avoir était clair dans mon explication.
En fait chaqu'une des huit feuilles "facture 1" à 8, reprend un des 8 bons de livraison. Dans chacune de ces factures tout le matériel est listé avec la quantité loué et donc le prix.
Ensuite ce que je cherche à faire maintenant, c'est créer une autre feuille et insérer dans celle-ci chaque lignes avec le nom du matériel et le montant de la location pour le mois. Car dans un même mois, il est possible d'emprunter le même matériel mai durant des périodes différentes.
Voici comment sont mes factures:
Désignation Px location/jours Type Quantité Nbre jours Total
J'espére que ça va t'aider à comprendre mon probléme.
Merci d'avance
J'ai réussi à faire deux trois trucs grâce à ta méthode par contre les lignes se colle les unes sur les autres au lieu de se copier à la suite les unes aprés les autre.
Pourrais tu m'aider?
Merci d'avance
Pourrais tu m'aider?
Merci d'avance
Essaye de déplacer l'instruction val=2 au dessus de For j=1 to 8
ça devrai éviter que ça se superpose
N'oublie pas le compteur d'incrémentation Val=Val+1 (à la même place que dans l'exemple)
ça devrai éviter que ça se superpose
N'oublie pas le compteur d'incrémentation Val=Val+1 (à la même place que dans l'exemple)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
C'est bon les lignes ne se superposent plus. Par contre moi je veux que seulmen les lignes ou la cellule de la colonne 10 est différente de 0 se copient. Là je c pas tp ce que ça fais parce que ça me copi des lignes vides aussi?
Voila ce que j'ai modifié à partir de ta méthode:
Dim val As Integer
val = 14
For j = 12 To 18
For i = 14 To 46
If Sheets(j).Cells(i, 10) <> 0 Then
Sheets(j).Rows(i).Copy
Sheets("FACTURE").Select
Sheets("FACTURE").Rows(val).Select
ActiveSheet.Paste
val = val + 1
End If
Next i
Next j
Et encore merci pour ton aide
Voila ce que j'ai modifié à partir de ta méthode:
Dim val As Integer
val = 14
For j = 12 To 18
For i = 14 To 46
If Sheets(j).Cells(i, 10) <> 0 Then
Sheets(j).Rows(i).Copy
Sheets("FACTURE").Select
Sheets("FACTURE").Rows(val).Select
ActiveSheet.Paste
val = val + 1
End If
Next i
Next j
Et encore merci pour ton aide
est-ce que tu as des cellules vides dans ta colonne 10
Parce que je pense qu'excel considèrent que "" (cellule vide) est différent de 0
Autre idée
est-ce que toute tes feuilles sont remplies jusqu'à la ligne 46?
Parce que je pense qu'excel considèrent que "" (cellule vide) est différent de 0
Autre idée
est-ce que toute tes feuilles sont remplies jusqu'à la ligne 46?
Salut,
Oui j'ai des cellules vides entre ligne 14 et 46, en fait j'ai même des lignes entiérement vide!!!
je dois les supprimer?
Ou mettre 0 dans ces cellules la et le mettre en blanc?
Oui j'ai des cellules vides entre ligne 14 et 46, en fait j'ai même des lignes entiérement vide!!!
je dois les supprimer?
Ou mettre 0 dans ces cellules la et le mettre en blanc?
J'ai encore une question!!
Esct-ce qu'il serait possible de copier ces lignes dans le même ordres, c-a-d copier ligne 14 de la facture 1 si cellule différente de 0, ensuite pareil L14 de la facture 2,..., puis copier L15 de la facture 1, L15 de la facture 2,...
Est-ce possible?
Si quelqu'un pouvait m'aider, ça serait vraiment bien et ça m'aiderai beaucoup!!!!
Merci d'avance
Esct-ce qu'il serait possible de copier ces lignes dans le même ordres, c-a-d copier ligne 14 de la facture 1 si cellule différente de 0, ensuite pareil L14 de la facture 2,..., puis copier L15 de la facture 1, L15 de la facture 2,...
Est-ce possible?
Si quelqu'un pouvait m'aider, ça serait vraiment bien et ça m'aiderai beaucoup!!!!
Merci d'avance
Bonjour,
je pense que ca peut t aider ;)
https://forums.commentcamarche.net/forum/affich-13543719-excel-copier-coller-macro?page=2#35
je pense que ca peut t aider ;)
https://forums.commentcamarche.net/forum/affich-13543719-excel-copier-coller-macro?page=2#35
C'est pas vraiment cque jvoudrais, en fait ça serai plutot ça:
Si j'ai:
facture 1 h1=1 h2=2 h3=3
facture 2 h1=4 h2=5 h3=6
facture 3 h1=7 h2=8 h3=9
facture 4 h1=10 h2=11 h3=12
facture 5 h1=13 h2=14 h3=15
facture 6 h1=16 h2=17 h3=18
facture 7 h1=19 h2=20 h3=21
facture 8 h1=22 h2=23 h3=24
ça donneré dans la feuille facture:
h1=1 h2=4 h3=7 h4=10 h5=13 h6=16 h7=19 h8=22
h9=2 h10=5 ... ... ... ... ... h16=23 h17=3 h18=6 ... ... ... ... ... h24=24
Si j'ai:
facture 1 h1=1 h2=2 h3=3
facture 2 h1=4 h2=5 h3=6
facture 3 h1=7 h2=8 h3=9
facture 4 h1=10 h2=11 h3=12
facture 5 h1=13 h2=14 h3=15
facture 6 h1=16 h2=17 h3=18
facture 7 h1=19 h2=20 h3=21
facture 8 h1=22 h2=23 h3=24
ça donneré dans la feuille facture:
h1=1 h2=4 h3=7 h4=10 h5=13 h6=16 h7=19 h8=22
h9=2 h10=5 ... ... ... ... ... h16=23 h17=3 h18=6 ... ... ... ... ... h24=24
ben si c'est du meme style, sauf qu au lieu de travailler avec la colonne a (cells(x,1) tu travaille sur la colonne h qui vaut 8
salut
je sais pas si ce que t'as montré jjsteing t'as montré a pu résoudre ton problème
Sinon je répond à tes question
pour le problème des lignes vides tu n'as qu'à mettre
If Sheets(j).Cells(i, 10) <> 0 OR Sheets(j).Cells(i, 10) <> "" Then ...
Si tu veux que la ligne 14 feuil2 se copie juste après la ligne 14 Feuil 1 il faut inverser les boucles i et j
c'ast à dire:
Dim val As Integer
val = 14
For i = 14 To 46 inversion
For j = 12 To 18
If Sheets(j).Cells(i, 10) <> 0 Then
Sheets(j).Rows(i).Copy
Sheets("FACTURE").Select
Sheets("FACTURE").Rows(val).Select
ActiveSheet.Paste
val = val + 1
End If
Next j
Next i inversion
je sais pas si ce que t'as montré jjsteing t'as montré a pu résoudre ton problème
Sinon je répond à tes question
pour le problème des lignes vides tu n'as qu'à mettre
If Sheets(j).Cells(i, 10) <> 0 OR Sheets(j).Cells(i, 10) <> "" Then ...
Si tu veux que la ligne 14 feuil2 se copie juste après la ligne 14 Feuil 1 il faut inverser les boucles i et j
c'ast à dire:
Dim val As Integer
val = 14
For i = 14 To 46 inversion
For j = 12 To 18
If Sheets(j).Cells(i, 10) <> 0 Then
Sheets(j).Rows(i).Copy
Sheets("FACTURE").Select
Sheets("FACTURE").Rows(val).Select
ActiveSheet.Paste
val = val + 1
End If
Next j
Next i inversion
Salut,
Tout d'abord merci de ton aide, ça fonctionne bien.
Le probléme maintenant est que en recopiant les lignes sur ma nouvelle feuille les numéros de lignes dans mes fonctions change. Est-ce que l'on ne pourrait pas bloquer avec $ mais sans le faire cellule par cellule ou alors recopier seulement les valeurs et non les formules dans les cellules?
Merci d'avance
Tout d'abord merci de ton aide, ça fonctionne bien.
Le probléme maintenant est que en recopiant les lignes sur ma nouvelle feuille les numéros de lignes dans mes fonctions change. Est-ce que l'on ne pourrait pas bloquer avec $ mais sans le faire cellule par cellule ou alors recopier seulement les valeurs et non les formules dans les cellules?
Merci d'avance
Effectivement si tu as des formules dans tes cellules, elles vont changer...
Pour coller seulement les valeurs dans ta feuille Facture, remplace la ligne
"Activesheet.Paste"
Par
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Pour coller seulement les valeurs dans ta feuille Facture, remplace la ligne
"Activesheet.Paste"
Par
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Super ça fonctionne.
Par contre mes lignes vides se recopient toujours! En fait la j'ai l'impression que l'instruction: If Sheets(j).Cells(i, 10) <> 0 OR Sheets(j).Cells(i, 10) <> "" Then ne fonctionne pas bien car le programme copie toute les lignes.
Tu vois quelque chose qui ne va pas dans ce qui est écrit?
Par contre mes lignes vides se recopient toujours! En fait la j'ai l'impression que l'instruction: If Sheets(j).Cells(i, 10) <> 0 OR Sheets(j).Cells(i, 10) <> "" Then ne fonctionne pas bien car le programme copie toute les lignes.
Tu vois quelque chose qui ne va pas dans ce qui est écrit?
Oui en fait c'est normale
c'est l'opérateur OR qui ne va pas dans ce cas...
essaye avec ça peut être remplace OR par XOR et le <>"" par =""
Sheets(j).Cells(i, 10) <> 0 XOR Sheets(j).Cells(i, 10) = "" Then
Je ne suis pas sur>>> mais si ça marche dit le moi
c'est l'opérateur OR qui ne va pas dans ce cas...
essaye avec ça peut être remplace OR par XOR et le <>"" par =""
Sheets(j).Cells(i, 10) <> 0 XOR Sheets(j).Cells(i, 10) = "" Then
Je ne suis pas sur>>> mais si ça marche dit le moi
Impecable!!!
Merci beaucoup.
Juste histoire d'améliorer mon projet, est-ce qu'il est possible de copier les lignes avec leur mise en forme, c-a-d couleur du texte, couleur de remplissage des cellules,...
Encore merci et désolé de t'innonder de questions!!!!
Merci beaucoup.
Juste histoire d'améliorer mon projet, est-ce qu'il est possible de copier les lignes avec leur mise en forme, c-a-d couleur du texte, couleur de remplissage des cellules,...
Encore merci et désolé de t'innonder de questions!!!!
Voilà, avec ça ça devrait marcher
Tu insères les deux première ligne avant les deux dernière qui existe déjà dans ton code
9a permet de coller le format de tes cellules avant d'y coller les valeurs...
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteValues, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
Tu insères les deux première ligne avant les deux dernière qui existe déjà dans ton code
9a permet de coller le format de tes cellules avant d'y coller les valeurs...
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteValues, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
C super!!
J'ai un dernier probléme à résoudre mais ne t'inquiéte pas jcomprendrais que tu ne veuille pas répondre aprés tous ce que je t'ai déjà demandé!!!
Dans mon classeur j'utilise plusieurs fois la même fonctions comme je te le montre à la suite.Je fais ça car entre les 2 fonctions j'aimerais avoir une cellule à la ligne suivante après ma première fct qui me fasse la somme des valeurs de la colonne 10 à partir de la ligne 14.
Ensuite la même chose après chaque fonction, cela me donne des sous total et à la fin après toutes mes fonctions je voudrais avoir une cellule qui me donne la somme de tout les sous total ou la somme de toute ma colonne à partir de ligne 14 sans prendre en compte les sous total biensur.
Si tu pouvais m'aider ça serai vraiment génial mais dans le cas contraire je comprendrais.
Un grand merci déjà pour toute ton aide
Dim val As Integer
val = 14
For i = 14 To 46
For j = 10 To 17
If Sheets(j).Cells(i, 9) <> 0 Xor Sheets(j).Cells(i, 9) = " " Then
Sheets(j).Rows(i).Copy
Sheets("FACTURE").Select
Sheets("FACTURE").Rows(val).Select
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteValues, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
val = val + 1
End If
Next j
Next i
For i = 48 To 61
For j = 10 To 17
If Sheets(j).Cells(i, 9) <> 0 Xor Sheets(j).Cells(i, 9) = " " Then
Sheets(j).Rows(i).Copy
Sheets("FACTURE").Select
Sheets("FACTURE").Rows(val).Select
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteValues, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
val = val + 1
End If
Next j
Next i
J'ai un dernier probléme à résoudre mais ne t'inquiéte pas jcomprendrais que tu ne veuille pas répondre aprés tous ce que je t'ai déjà demandé!!!
Dans mon classeur j'utilise plusieurs fois la même fonctions comme je te le montre à la suite.Je fais ça car entre les 2 fonctions j'aimerais avoir une cellule à la ligne suivante après ma première fct qui me fasse la somme des valeurs de la colonne 10 à partir de la ligne 14.
Ensuite la même chose après chaque fonction, cela me donne des sous total et à la fin après toutes mes fonctions je voudrais avoir une cellule qui me donne la somme de tout les sous total ou la somme de toute ma colonne à partir de ligne 14 sans prendre en compte les sous total biensur.
Si tu pouvais m'aider ça serai vraiment génial mais dans le cas contraire je comprendrais.
Un grand merci déjà pour toute ton aide
Dim val As Integer
val = 14
For i = 14 To 46
For j = 10 To 17
If Sheets(j).Cells(i, 9) <> 0 Xor Sheets(j).Cells(i, 9) = " " Then
Sheets(j).Rows(i).Copy
Sheets("FACTURE").Select
Sheets("FACTURE").Rows(val).Select
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteValues, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
val = val + 1
End If
Next j
Next i
For i = 48 To 61
For j = 10 To 17
If Sheets(j).Cells(i, 9) <> 0 Xor Sheets(j).Cells(i, 9) = " " Then
Sheets(j).Rows(i).Copy
Sheets("FACTURE").Select
Sheets("FACTURE").Rows(val).Select
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteValues, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
val = val + 1
End If
Next j
Next i