Archiver des lignes d'un onglet à l'autre
Résolu
delouxange
Messages postés
10
Date d'inscription
Statut
Membre
Dernière intervention
-
delouxange Messages postés 10 Date d'inscription Statut Membre Dernière intervention -
delouxange Messages postés 10 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai une macro qui est censée archiver des lignes de l'onglet "opportunities july 2012" à l'onglet "opportunities archives" et qui me retourne sans arrêt "script out of range".
Quelqu'un peut-il m'aider ?
Sub Archiver()
Sheets("Opportunities archives").Activate
j1 = Range("C21").CurrentRegion.Rows.Count
Sheets("Opportunities july 2012").Activate
colStatus = Range("Status").Column
colUpdate = Range("Update").Column
colAmount = Range("Opportunity_amount").Column
ligne = Range("Icidepart").Row
i = 1
k1 = 0
k2 = 0
k3 = 0
Do
'Archivage opportunities
If Month(Cells(ligne + i, colUpdate)) < Date And Cells(ligne + i, colStatus) = "Vente" Or Cells(ligne + i, colStatus) = "Abandon" Or Cells(ligne + i, colStatus) = "Perdu" Then
Sheets("Opportunities july 2012").Rows(ligne + i).Column("A:AL").Copy _
Destination:=Worksheets("Opportunities archives").Cells(j1 + k1 + 21, 1)
k1 = k1 + 1
Sheets("Opportunities july 2012").Rows(i + ligne).Delete
Else
i = i + 1
End If
Sheets("Opportunities july 2012").Activate
Loop While Not IsEmpty(Cells(ligne + i, colUpdate))
End Sub
J'ai une macro qui est censée archiver des lignes de l'onglet "opportunities july 2012" à l'onglet "opportunities archives" et qui me retourne sans arrêt "script out of range".
Quelqu'un peut-il m'aider ?
Sub Archiver()
Sheets("Opportunities archives").Activate
j1 = Range("C21").CurrentRegion.Rows.Count
Sheets("Opportunities july 2012").Activate
colStatus = Range("Status").Column
colUpdate = Range("Update").Column
colAmount = Range("Opportunity_amount").Column
ligne = Range("Icidepart").Row
i = 1
k1 = 0
k2 = 0
k3 = 0
Do
'Archivage opportunities
If Month(Cells(ligne + i, colUpdate)) < Date And Cells(ligne + i, colStatus) = "Vente" Or Cells(ligne + i, colStatus) = "Abandon" Or Cells(ligne + i, colStatus) = "Perdu" Then
Sheets("Opportunities july 2012").Rows(ligne + i).Column("A:AL").Copy _
Destination:=Worksheets("Opportunities archives").Cells(j1 + k1 + 21, 1)
k1 = k1 + 1
Sheets("Opportunities july 2012").Rows(i + ligne).Delete
Else
i = i + 1
End If
Sheets("Opportunities july 2012").Activate
Loop While Not IsEmpty(Cells(ligne + i, colUpdate))
End Sub
A voir également:
- Archiver des lignes d'un onglet à l'autre
- Rouvrir un onglet fermé - Guide
- Partager des photos en ligne - Guide
- Archiver story instagram - Guide
- Comment cacher une conversation whatsapp sans archiver - Guide
- Aller à la ligne excel - Guide
12 réponses
Bonjour,
script out of range
Ca sent la boucle infinie à plein nez.
Cependant, juste avec ton code, difficile de se rendre compte.
Pourrais tu, stp, nous communiquer un classeur exemple avec tes données non confidentielles?
Pour cela, utilises https://www.cjoint.com/
script out of range
Ca sent la boucle infinie à plein nez.
Cependant, juste avec ton code, difficile de se rendre compte.
Pourrais tu, stp, nous communiquer un classeur exemple avec tes données non confidentielles?
Pour cela, utilises https://www.cjoint.com/
Bonjour,
merci pour la réponse
ci-dessous le lien vers le fichier : https://www.cjoint.com/?3GuqKU4sSQB
merci pour la réponse
ci-dessous le lien vers le fichier : https://www.cjoint.com/?3GuqKU4sSQB
Bon...
Les noms de ta feuille "Opportunitties july 2012" dans ton code ne correspondent pas au nom de ta feuille. Le nom de ta feuille comporte un espace au bout.....
Ensuite, la méthode de Copy ne fonctionne pas comme cela.
Ne change pas les noms de tes feuilles et essaie ce code :
Les noms de ta feuille "Opportunitties july 2012" dans ton code ne correspondent pas au nom de ta feuille. Le nom de ta feuille comporte un espace au bout.....
Ensuite, la méthode de Copy ne fonctionne pas comme cela.
Ne change pas les noms de tes feuilles et essaie ce code :
Sub Archiver() Sheets("Opportunities archives").Activate j1 = Range("C21").CurrentRegion.Rows.Count Sheets("Opportunities july 2012 ").Activate colStatus = Range("Status").Column colUpdate = Range("Update").Column colAmount = Range("Opportunity_amount").Column ligne = Range("Icidepart").Row i = 1 k1 = 0 k2 = 0 k3 = 0 Do 'Archivage opportunities If Month(Cells(ligne + i, colUpdate)) < Date And Cells(ligne + i, colStatus) = "Vente" Or Cells(ligne + i, colStatus) = "Abandon" Or Cells(ligne + i, colStatus) = "Perdu" Then Sheets("Opportunities july 2012 ").Range("A" & ligne + i & ":AL" & ligne + i).Copy _ Destination:=Worksheets("Opportunities archives").Cells(j1 + k1 + 21, 1) k1 = k1 + 1 Sheets("Opportunities july 2012 ").Rows(i + ligne).Delete Else i = i + 1 End If Sheets("Opportunities july 2012 ").Activate Loop While Not IsEmpty(Cells(ligne + i, colUpdate)) End Sub
la macro tourne, mais elle ne fait que supprimer, elle ne copie pas dans les archives !
il faudrait alors changer la ligne en gras... pour copier le bon range.
Comme ceci peut être :
Comme ceci peut être :
Sub Archiver() Sheets("Opportunities archives").Activate j1 = Range("C21").CurrentRegion.Rows.Count Sheets("Opportunities july 2012 ").Activate colStatus = Range("Status").Column colUpdate = Range("Update").Column colAmount = Range("Opportunity_amount").Column ligne = Range("Icidepart").Row i = 1 k1 = 0 k2 = 0 k3 = 0 Do 'Archivage opportunities If Month(Cells(ligne + i, colUpdate)) < Date And Cells(ligne + i, colStatus) = "Vente" Or Cells(ligne + i, colStatus) = "Abandon" Or Cells(ligne + i, colStatus) = "Perdu" Then Sheets("Opportunities july 2012 ").Rows(i + ligne).Copy _ Destination:=Worksheets("Opportunities archives").Cells(j1 + k1 + 21, 1) k1 = k1 + 1 Sheets("Opportunities july 2012 ").Rows(i + ligne).Delete Else i = i + 1 End If Sheets("Opportunities july 2012 ").Activate Loop While Not IsEmpty(Cells(ligne + i, colUpdate)) End Sub
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Pijaku,
la macro marche assez bien, merci encore. Cependant, dans la feuille Archives, elle copie toujours au même endroit, à partir de la ligne juste en dessous des entêtes... Pas moyen de lui faire copier alleurs.
J'ai essayé de faire une macro "Activate cell" toute seule pour voir comment elle marche, et c'est pareil, elle sélectionne toujours la cellule en dessous des entêtes !
Je te met le fichier au même endroit que précédemment, tu verras les 2 macros
la macro marche assez bien, merci encore. Cependant, dans la feuille Archives, elle copie toujours au même endroit, à partir de la ligne juste en dessous des entêtes... Pas moyen de lui faire copier alleurs.
J'ai essayé de faire une macro "Activate cell" toute seule pour voir comment elle marche, et c'est pareil, elle sélectionne toujours la cellule en dessous des entêtes !
Je te met le fichier au même endroit que précédemment, tu verras les 2 macros
Bon, j'ai fait des progrès par rapport à ce matin. j'ai trouvé la forme de petite macro qui fait ce que je veux. Et quand je la réutilise dans la grande, évidemment ça ne marche plus !! j'en peux plus, svp, aidez-moi !
Il me retourne une erreur 400 sur la ligne Destination...
Ci-dessous la petite macro (elle s'appelle copier ligne, ne faites pas attention) :
Sub Copier_ligne()
' Copier_ligne Macro
Sheets("Opportunities archives").Activate
Range("c7").End(xlDown).Select
j1 = ActiveCell.Row + 1
Cells(j1, 1) = "Vu"
End Sub
Et la grande, qui me retourne une erreur :
Sub Archiver()
Sheets("Opportunities archives").Activate
Range("c7").End(xlDown).Select
j1 = ActiveCell.Row + 1
Sheets("Opportunities july 2012").Activate
colStatus = Range("Status").Column
colUpdate = Range("Update").Column
colAmount = Range("Opportunity_amount").Column
ligne = Range("Icidepart").Row
i = 1
k1 = 0
Do
'Archivage opportunities
If Month(Cells(ligne + i, colUpdate)) < Date And Cells(ligne + i, colStatus) = "Vente" Or Cells(ligne + i, colStatus) = "Abandon" Or Cells(ligne + i, colStatus) = "Perdu" Then
Sheets("Opportunities july 2012").Rows(ligne + i).Copy _
Destination:=Worksheets("Opportunities archives").Rows(j1 + k1)
k1 = k1 + 1
Sheets("Opportunities july 2012").Rows(i + ligne).Delete
Else
i = i + 1
End If
Sheets("Opportunities july 2012").Activate
Loop While Not IsEmpty(Cells(ligne + i, colUpdate))
End Sub
Il me retourne une erreur 400 sur la ligne Destination...
Ci-dessous la petite macro (elle s'appelle copier ligne, ne faites pas attention) :
Sub Copier_ligne()
' Copier_ligne Macro
Sheets("Opportunities archives").Activate
Range("c7").End(xlDown).Select
j1 = ActiveCell.Row + 1
Cells(j1, 1) = "Vu"
End Sub
Et la grande, qui me retourne une erreur :
Sub Archiver()
Sheets("Opportunities archives").Activate
Range("c7").End(xlDown).Select
j1 = ActiveCell.Row + 1
Sheets("Opportunities july 2012").Activate
colStatus = Range("Status").Column
colUpdate = Range("Update").Column
colAmount = Range("Opportunity_amount").Column
ligne = Range("Icidepart").Row
i = 1
k1 = 0
Do
'Archivage opportunities
If Month(Cells(ligne + i, colUpdate)) < Date And Cells(ligne + i, colStatus) = "Vente" Or Cells(ligne + i, colStatus) = "Abandon" Or Cells(ligne + i, colStatus) = "Perdu" Then
Sheets("Opportunities july 2012").Rows(ligne + i).Copy _
Destination:=Worksheets("Opportunities archives").Rows(j1 + k1)
k1 = k1 + 1
Sheets("Opportunities july 2012").Rows(i + ligne).Delete
Else
i = i + 1
End If
Sheets("Opportunities july 2012").Activate
Loop While Not IsEmpty(Cells(ligne + i, colUpdate))
End Sub
Bonjour,
Dans ta destination, tu n'as pas besoin d'indiquer toute la ligne (Rows(machin)), mais l'adresse de la cellule en colonne A ou tu veux coller tes données :
Dans ta destination, tu n'as pas besoin d'indiquer toute la ligne (Rows(machin)), mais l'adresse de la cellule en colonne A ou tu veux coller tes données :
Destination:=Worksheets("Opportunities archives").Range("A" & j1 + k1)
est-ce que, sur ton fichier, la macro réalise ce qui est attendu ?
la mienne ne marche pas, c'est à dire que le résultat n'est pas l'attendu. En fait, j'ai l'impression que tu n'essaies pas ce que tu me conseilles
en l'occurence, elle ne se réalise pas car j'obtiens une erreur 400
la mienne ne marche pas, c'est à dire que le résultat n'est pas l'attendu. En fait, j'ai l'impression que tu n'essaies pas ce que tu me conseilles
en l'occurence, elle ne se réalise pas car j'obtiens une erreur 400
Bonjour,
1- oui la macro réalise "ce qui est attendu". En même temps, "ce qui est attendu" n'a jamais vraiment été décris dans tes messages précédents.. Si si tu peux relire!
2- la mienne ne marche pas, c'est à dire que le résultat n'est pas l'attendu
Cf 1
3- En fait, j'ai l'impression que tu n'essaies pas ce que tu me conseilles
Je te retournes le compliment. N'oublies pas que je suis bénévole et j'essaie ce que je veux. Par contre, en tant que demandeur tu peux essayer ce que je te dis... Cf ici
Mais bref laissons tomber cela et revenons à notre sujet.
4- en l'occurence, elle ne se réalise pas car j'obtiens une erreur 400
L'erreur 400 apparaît sur qu'elle ligne? Quel est exactement le message d'erreur?
Parce que moi, quand j'essaye, en modifiant ta macro avec mes conseils trouvés dans ce fil de discussion, ça marche!
Essaie ce code :
1- oui la macro réalise "ce qui est attendu". En même temps, "ce qui est attendu" n'a jamais vraiment été décris dans tes messages précédents.. Si si tu peux relire!
2- la mienne ne marche pas, c'est à dire que le résultat n'est pas l'attendu
Cf 1
3- En fait, j'ai l'impression que tu n'essaies pas ce que tu me conseilles
Je te retournes le compliment. N'oublies pas que je suis bénévole et j'essaie ce que je veux. Par contre, en tant que demandeur tu peux essayer ce que je te dis... Cf ici
Mais bref laissons tomber cela et revenons à notre sujet.
4- en l'occurence, elle ne se réalise pas car j'obtiens une erreur 400
L'erreur 400 apparaît sur qu'elle ligne? Quel est exactement le message d'erreur?
Parce que moi, quand j'essaye, en modifiant ta macro avec mes conseils trouvés dans ce fil de discussion, ça marche!
Essaie ce code :
Sub Archiver() colStatus = Range("Status").Column colUpdate = Range("Update").Column colAmount = Range("Opportunity_amount").Column ligne = Range("Icidepart").Row i = 1 Do 'Archivage opportunities If Month(Cells(ligne + i, colUpdate)) < Date And Cells(ligne + i, colStatus) = "Vente" Or Cells(ligne + i, colStatus) = "Abandon" Or Cells(ligne + i, colStatus) = "Perdu" Then Sheets("Opportunities july 2012").Rows(ligne + i).Copy Worksheets("Opportunities archives").Range("A" & Rows.Count).End(xlUp).Offset(1, 0) Sheets("Opportunities july 2012").Rows(i + ligne).Delete Else i = i + 1 End If Loop While Not IsEmpty(Cells(ligne + i, colUpdate)) End Sub
Bonjour Pijaku,
ça y est, elle fonctionne !
merci
j'ai tout à fait conscience que tu es bénévole et j'ai essayé ce que tu m'as dit. C'est parce que cela ne fonctionnait pas chez moi que je t'ai posé la question
bien contente que ça fonctionne, j'y ai passé 3h hier...
je n'ai plus qu'à la transférer dans l'autre fichier avec les données confidentielles, en espérant qu'une erreur inattendue et sournoise n'apparaisse pas...
ça y est, elle fonctionne !
merci
j'ai tout à fait conscience que tu es bénévole et j'ai essayé ce que tu m'as dit. C'est parce que cela ne fonctionnait pas chez moi que je t'ai posé la question
bien contente que ça fonctionne, j'y ai passé 3h hier...
je n'ai plus qu'à la transférer dans l'autre fichier avec les données confidentielles, en espérant qu'une erreur inattendue et sournoise n'apparaisse pas...