Excel macro copier ligne
Fermé
outch
-
16 févr. 2009 à 22:19
gbinforme Messages postés 14939 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 - 18 févr. 2009 à 08:22
gbinforme Messages postés 14939 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 - 18 févr. 2009 à 08:22
A voir également:
- Excel macro copier ligne
- Liste déroulante excel - Guide
- Formule excel - Guide
- Aller à la ligne excel - Guide
- Figer une ligne excel - Guide
- Apparaitre hors ligne whatsapp - Guide
8 réponses
guy2mars
Messages postés
204
Date d'inscription
dimanche 18 février 2007
Statut
Membre
Dernière intervention
24 janvier 2013
71
16 févr. 2009 à 22:52
16 févr. 2009 à 22:52
.Cells(Lig, Col).EntireRow.Cut
tu peux remplacer cut par copy
tu peux remplacer cut par copy
gbinforme
Messages postés
14939
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 657
16 févr. 2009 à 22:52
16 févr. 2009 à 22:52
bonjour
Si tu commences ta boucle à 2 tu résous ton titre :
Si tu rajoutes cette ligne après la copie tu ne devrais plus avoir tes lignes vides
Si tu commences ta boucle à 2 tu résous ton titre :
For Lig = 2 To NbrLig
Si tu rajoutes cette ligne après la copie tu ne devrais plus avoir tes lignes vides
.Cells(Lig, Col).EntireRow.delete
guy2mars
Messages postés
204
Date d'inscription
dimanche 18 février 2007
Statut
Membre
Dernière intervention
24 janvier 2013
71
16 févr. 2009 à 22:54
16 févr. 2009 à 22:54
excuses, j avais mal lu le pb, je pensais que tu ralais parce que c'etait coupé.
...
gbinforme t a repondu
...
gbinforme t a repondu
Ok merci,
J'ai réussi à gérer le problème du titre, mais pour la suppression des lignes vides j'ai un souci
voici le code
Le souci c'est que ça ne colle que la moitié de mes lignes et quand je relance la macro ça me supprime une ligne dans l'onglet des réceptions, enfin ça me coupe ma ligne sans la coller dans la partie archive quoi...
Une aide ?
Merci d'avance
J'ai réussi à gérer le problème du titre, mais pour la suppression des lignes vides j'ai un souci
voici le code
Sub FiltreOutch()
Dim Lig As Long
Dim Col As String
Dim NbrLig As Long
Dim NumLig As Long
Sheets("Archives").Activate ' feuille de destination
Col = "J" ' colonne de la donnée non vide à tester
NumLig = 0
With Sheets("Receptions") ' feuille source
NbrLig = .Cells(65536, Col).End(xlUp).Row
For Lig = 2 To NbrLig ' commence boucle à 2
If .Cells(Lig, Col).Value <> "" Then
.Cells(Lig, Col).EntireRow.Cut
NumLig = NumLig + 1
Cells(NumLig, 1).Select
ActiveSheet.Paste
.Cells(Lig, Col).EntireRow.Delete
End If
Next
End With
End Sub
Le souci c'est que ça ne colle que la moitié de mes lignes et quand je relance la macro ça me supprime une ligne dans l'onglet des réceptions, enfin ça me coupe ma ligne sans la coller dans la partie archive quoi...
Une aide ?
Merci d'avance
guy2mars
Messages postés
204
Date d'inscription
dimanche 18 février 2007
Statut
Membre
Dernière intervention
24 janvier 2013
71
16 févr. 2009 à 23:50
16 févr. 2009 à 23:50
re
pour repondre a ton pb, je ferais un truc comme ca
Dim i As Integer, valeur As String
i = 1
Do While i < 56000
valeur = Range("J" & i).Value
If valeur = "" Then
Rows(i & ":" & i).Delete
i=i-1 '(pour relire la ligne si y'en a 2 consecutives vides)
End If
i = i + 1
Loop
End Sub
pour repondre a ton pb, je ferais un truc comme ca
Dim i As Integer, valeur As String
i = 1
Do While i < 56000
valeur = Range("J" & i).Value
If valeur = "" Then
Rows(i & ":" & i).Delete
i=i-1 '(pour relire la ligne si y'en a 2 consecutives vides)
End If
i = i + 1
Loop
End Sub
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
gbinforme
Messages postés
14939
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 657
17 févr. 2009 à 08:34
17 févr. 2009 à 08:34
bonjour
Le souci c'est que ça ne colle que la moitié de mes lignes
Lorsque tu supprime des lignes, il faut commencer en bas :
Le souci c'est que ça ne colle que la moitié de mes lignes
Lorsque tu supprime des lignes, il faut commencer en bas :
For Lig = NbrLig To 2 step -1 ' termine boucle à 2
Merci gbinform j'ai pris ta solution.
En revanche tu pourrais m'aider à coller la ligne à la suite des lignes de la partie archive. Avec ce script ellles se collent à la place de la première ligne
mon code
Encore merci
En revanche tu pourrais m'aider à coller la ligne à la suite des lignes de la partie archive. Avec ce script ellles se collent à la place de la première ligne
mon code
Sub FiltreOutch()
Dim Lig As Long
Dim Col As String
Dim NbrLig As Long
Dim NumLig As Long
Sheets("Archives").Activate ' feuille de destination
Col = "J" ' colonne de la donnée non vide à tester
NumLig = 0
With Sheets("Receptions") ' feuille source
NbrLig = .Cells(65536, Col).End(xlUp).Row
For Lig = NbrLig To 2 Step -1 ' termine boucle à 2
If .Cells(Lig, Col).Value <> "" Then
.Cells(Lig, Col).EntireRow.Cut
NumLig = NumLig + 1
Cells(NumLig, 1).Select
ActiveSheet.Paste
.Cells(Lig, Col).EntireRow.Delete
End If
Next
End With
End Sub
Encore merci
gbinforme
Messages postés
14939
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 657
17 févr. 2009 à 21:30
17 févr. 2009 à 21:30
bonjour
Tu peux le faire ainsi en utilisant la fonction de dernière ligne utilisée par une cellule documentée :
Tu peux le faire ainsi en utilisant la fonction de dernière ligne utilisée par une cellule documentée :
Sub FiltreOutch()
Dim Lig As Long
Dim Col As String
Dim NbrLig As Long
Sheets("Archives").Activate ' feuille de destination
Col = "J" ' colonne de la donnée non vide à tester
With Sheets("Receptions") ' feuille source
NbrLig = .Cells(65536, Col).End(xlUp).Row
For Lig = NbrLig To 2 Step -1 ' termine boucle à 2
If .Cells(Lig, Col).Value <> "" Then
.Cells(Lig, Col).EntireRow.Cut _
Destination:=Cells(Cells.SpecialCells(xlCellTypeLastCell).Row + 1, 1)
.Cells(Lig, Col).EntireRow.Delete
End If
Next
End With
End Sub
Bonjour à tous,
Je me suis aussi heurté à ce genre de situation, alors je vous fais part d'une observation
qui m'apparait importante.
Cette instruction :
NbrLig = .Cells(65536, Col).End(xlUp).Row
informe sur le nombre de ligne !
Et cette instruction diminue le nombre de ligne
.Cells(Lig, Col).EntireRow.Delete
donc NbrLig devrait être décrémenté en plus de la décrémentation automatique de la boucle !
NbrLig = (NbrLig - 1)
Est-ce que je me fais comprendre ?
Lupin
p.s. gbinforme, nous avons du temps relativement doux dans mon coin de pays, j'espère
que Dame nature est aussi clémente pour vous :-)
Je me suis aussi heurté à ce genre de situation, alors je vous fais part d'une observation
qui m'apparait importante.
Cette instruction :
NbrLig = .Cells(65536, Col).End(xlUp).Row
informe sur le nombre de ligne !
Et cette instruction diminue le nombre de ligne
.Cells(Lig, Col).EntireRow.Delete
donc NbrLig devrait être décrémenté en plus de la décrémentation automatique de la boucle !
NbrLig = (NbrLig - 1)
Est-ce que je me fais comprendre ?
Lupin
p.s. gbinforme, nous avons du temps relativement doux dans mon coin de pays, j'espère
que Dame nature est aussi clémente pour vous :-)
gbinforme
Messages postés
14939
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 657
18 févr. 2009 à 08:22
18 févr. 2009 à 08:22
bonjour Lupin.A,
Effectivement je vois que le climat du nouveau monde n'est pas fidèle à sa réputation et en France nous sommes loin du réchauffement climatique avec un hiver comme dans les cartes postales.
donc NbrLig devrait être décrémenté en plus de la décrémentation automatique de la boucle !
NbrLig = (NbrLig - 1)
Décrémenter ne va servir à rien car la variable n'est utilisée que comme point de départ et on aurait pu s'en passer en écrivant :
Effectivement, lorsque l'on fait une boucle de suppression, il vaut mieux commencer par le bas car sinon il faut à la fois faire varier la borne et l'indice utilisé dans la boucle ce qui n'est jamais simple à maitriser.
Effectivement je vois que le climat du nouveau monde n'est pas fidèle à sa réputation et en France nous sommes loin du réchauffement climatique avec un hiver comme dans les cartes postales.
donc NbrLig devrait être décrémenté en plus de la décrémentation automatique de la boucle !
NbrLig = (NbrLig - 1)
Décrémenter ne va servir à rien car la variable n'est utilisée que comme point de départ et on aurait pu s'en passer en écrivant :
For Lig = .Cells(65536, Col).End(xlUp).Row To 2 Step -1 ' termine boucle à 2
Effectivement, lorsque l'on fait une boucle de suppression, il vaut mieux commencer par le bas car sinon il faut à la fois faire varier la borne et l'indice utilisé dans la boucle ce qui n'est jamais simple à maitriser.