Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/09/2011, 10h09   #1
Invité de passage
 
Homme joel
Technicien maintenance
Inscription : septembre 2011
Messages : 7
Détails du profil
Informations personnelles :
Nom : Homme joel
Localisation : France

Informations professionnelles :
Activité : Technicien maintenance
Secteur : Industrie

Informations forums :
Inscription : septembre 2011
Messages : 7
Points : 3
Points : 3
Par défaut copier,coller puis supprimer de feuille à feuille

Bonjour,

Le but de cette mini macro est de copier une ligne de la feuille "IN"si la valeur de la cellule "G" correspond à "Ter" , puis de la coller à la première cellule vide de la feuille "Te", puis de supprimer la ligne de la feuille "IN"

J'ai écrit cette macro avec des boucles (souvenir de BASIC)
Elle fonctionne pour une ligne, pour des lignes entrecoupées de différentes valeurs de la colonne "G".
Par contre, si deux lignes contigües ont en colonne "G" deux ou plusieurs fois la valeur "Ter", cela ne fonctionne pas bien.Je suis obligé de relancer plusieurs la macro sinon des lignes contenant "Ter"en colonne "G" reste en "IN"

Je n'arrive pas à améliorer cette macro afin que d' un seul lancement elle transfere le contenu de la ligne concernée vers l'auutre feuille, puis d' effacer la ligne de la feuille initiale.

Pouvez-vous m'aider ?
Merci par avance




Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Public Sub Passage_termine()
Dim cellulecourante As Range
 
    ScreenUpdating = False
    Call vide_presse_papier
    Sheets("IN").Select
    Worksheets("IN").AutoFilterMode = False
     For Each cellulecourante In Range("notation") ' correspond aux valeurs de la colonne "G"
    If cellulecourante.Value = "Ter" Then
    cellulecourante.EntireRow.Copy
    Sheets("Te").Select
    Worksheets("Te").AutoFilterMode = False
    Range("A1").Select
    Do While ActiveCell <> ""
    ActiveCell.Offset(1, 0).Select
    Loop
    ActiveSheet.Paste
    Sheets("IN").Select
   cellulecourante.EntireRow.Delete
   ElseIf cellulecourante.Value <> "Ter" Then
   Set cellulecourante = cellulecourante.Offset(1, 0)
   End If
   Next
   screemupdating = True
 
End Sub
Code :
1
2
3
Public Sub vide_presse_papier()
Application.CutCopyMode = False
End Sub
ploneis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2011, 11h03   #2
Expert Confirmé
 
Avatar de patricktoulon
 
patrick
Inscription : avril 2009
Messages : 1 829
Détails du profil
Informations personnelles :
Nom : patrick
Âge : 42
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Secteur : Bâtiment

Informations forums :
Inscription : avril 2009
Messages : 1 829
Points : 2 857
Points : 2 857
Envoyer un message via MSN à patricktoulon
Par défaut heu...!!!

bonjour

ou!!!lala toi te casser beaucoup la tète pour pas grand chose

utilise plutôt la function find et find next tu verra sa marchera mieux

d'autant plus que dans ton exemple tu boucle sur la même cellule indéfiniment


au plaisir
__________________
mes fichiers dans les contributions:
mon formulaire mail avec CDO en vba et mon formulaire mail avec CDO en vbs dans un HTA
mon nouveau mouse in out pour les boutons dans un userform
mon addin pour prendre un cliché de selection de cellules

si ton problème est résolu n'oublie pas de pointer :résolu:ça peut servir aux autres
et n'oublie pas de voter
patricktoulon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2011, 11h24   #3
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
Bonjour,

J'ai remanié un peu ton code, mais je ne l'ai pas testé. Quand on supprime des lignes, on le fait en parcourant la plage du bas vers le haut, justement pour éviter les problèmes que tu as rencontrés.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Public Sub Passage_termine()
Dim cellulecourante As Range, DerLig As Long, PremLig As Long
 
ScreenUpdating = False
Call vide_presse_papier
Sheets("IN").Select
Worksheets("IN").AutoFilterMode = False
With Range("notation")
    DerLig = .Row + .Rows.Count - 1
    PremLig = .Row
End With
For i = .Row + .Rows.Count - 1 To .Row Step -1
    If Cells(i, 7).Value = "Ter" Then
        Cells(i, 7).EntireRow.Copy
        With Sheets("Te")
            .AutoFilterMode = False
            .Cells(.Cells.Rows.Count, 1).End(xlUp).Offset(1).Paste
        End With
        Cells(i, 7).EntireRow.Delete
    End If
Next i
ScreenUpdating = True
 
End Sub
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2011, 19h34   #4
Invité de passage
 
Homme joel
Technicien maintenance
Inscription : septembre 2011
Messages : 7
Détails du profil
Informations personnelles :
Nom : Homme joel
Localisation : France

Informations professionnelles :
Activité : Technicien maintenance
Secteur : Industrie

Informations forums :
Inscription : septembre 2011
Messages : 7
Points : 3
Points : 3
Par défaut Suite à la réponse de Daniel

Code :
.Cells(.Cells.Rows.Count, 1).End(xlUp).Offset(1).Paste
Lors de l'essai le message 438 apparait propriété non gérée par cet objet.
En épluchant le code je ne vois aucune raison, pouvez vous m'aider ?
Je vous en remercie
ploneis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2011, 20h48   #5
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
Essaie :

Code :
.Cells(.Cells.Rows.Count, 1).End(xlUp).Offset(1).PasteSpecial xlPasteValues
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2011, 14h59   #6
Invité de passage
 
Homme joel
Technicien maintenance
Inscription : septembre 2011
Messages : 7
Détails du profil
Informations personnelles :
Nom : Homme joel
Localisation : France

Informations professionnelles :
Activité : Technicien maintenance
Secteur : Industrie

Informations forums :
Inscription : septembre 2011
Messages : 7
Points : 3
Points : 3
Bonjour Daniel et PatrickToulon,

Malgré la proposition de Daniel, la macro "se plante " à :.Cells(Cells.Rows.Count, 1).End(xlUp).Offset(1).PasteSpecial xlPasteValues

J'ai essayé en décomposant, en incluant select, sans amélioration.

Je me demande si les trois boucles (for,if, et with) ne créent pas une interaction
inopportune......

Cordialement

----------------------------------------------------------------------------Ne crains pas d'avancer lentement, seulement de t'arrêter .
ploneis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2011, 16h58   #7
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
Il y avait bien une erreur de compilation qui empêchait le code de s'exécuter. J'ai testé celui-ci en reconstituant ton environnement. Il suppose que la colonne A est remplie, faute de quoi, il faudra (encore) la modifier :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Public Sub Passage_termine()
Dim cellulecourante As Range, DerLig As Long, PremLig As Long
 
ScreenUpdating = False
'Call vide_presse_papier
Sheets("IN").Select
Worksheets("IN").AutoFilterMode = False
With Range("notation")
    DerLig = .Row + .Rows.Count - 1
    PremLig = .Row
End With
For i = DerLig To PremLig Step -1
    If Cells(i, 7).Value = "Ter" Then
        Cells(i, 7).EntireRow.Copy
        With Sheets("Te")
            .AutoFilterMode = False
            .Cells(.Cells.Rows.Count, 1).End(xlUp).Offset(1).PasteSpecial xlPasteValues
        End With
        Cells(i, 7).EntireRow.Delete
    End If
Next i
ScreenUpdating = True
 
End Sub
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2011, 19h11   #8
Invité de passage
 
Homme joel
Technicien maintenance
Inscription : septembre 2011
Messages : 7
Détails du profil
Informations personnelles :
Nom : Homme joel
Localisation : France

Informations professionnelles :
Activité : Technicien maintenance
Secteur : Industrie

Informations forums :
Inscription : septembre 2011
Messages : 7
Points : 3
Points : 3
Bonjour Daniel,

C'est parfait, ça boucle bien.



ploneis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2011, 19h49   #9
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
Merci du retour; pense à marquer la question comme résolue.
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h05.


 
 
 
 
Partenaires

Hébergement Web