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 08/10/2011, 01h40   #1
Invité régulier
 
Inscription : août 2011
Messages : 41
Détails du profil
Informations forums :
Inscription : août 2011
Messages : 41
Points : 6
Points : 6
Par défaut Déplacer une ligne dans une autre feuille en fonction d'un critère

* Bonjour *

Comment je peux coder ceci? Si une cellule de la colonne A dans la feuil1 contient le caractère "x", alors coupe toute la ligne (qui contient le "x") dans la prochaine ligne non vide de la feuil2, et supprime l’ancienne ligne.
je sais que ce que je veux ressemble à ce code, mais j'ai un peu de difficulté.
Merci


Citation:
Envoyé par SilkyRoad Voir le message
bonsoir


Tu peux essayer d'adapter cette macro:
(j'ai interprété que tu souhaites copier à la suite de la derniere ligne non vide dans le classeur de destination)

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Dim WBSource As Workbook, WBDest As Workbook
Dim i As Integer
 
Set WBSource = Workbooks("Classeur1")
Set WBDest = Workbooks("Classeur2")
 
'cherche la ligne vide dans le classeur de destination
i = WBDest.Worksheets(1).Range("A65536").End(xlUp).Row + 1
 
'Copie la 2eme ligne de la premiere feuille dans le classeur source.
'Colle la ligne à la suite de la derniere ligne non vide dans le classeur de
'destination.
WBSource.Worksheets(1).Rows(2).Copy _
    Destination:=WBDest.Worksheets(1).Cells(i, 1)
 
'Suppression de la ligne dans le classeur source
WBSource.Worksheets(1).Rows(2).Delete
 
'Désactive le mode Couper/Copier
Application.CutCopyMode = False

michel
moi244 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/10/2011, 11h18   #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

dans l' exemple que tu a donné tu travaille sur 2 classeurs est ce bien le cas pour toi ?

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 08/10/2011, 14h45   #3
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
Bonjour
Ce passage n'est pas clair
Citation:
alors coupe toute la ligne (qui contient le "x") dans la prochaine ligne non vide de la feuil2, et supprime l’ancienne ligne.
Néanmoins, si tu as plusieurs lignes contenant x en colonne A de Feuil1 que tu veux transférer vers la première ligne vide de Feuil2, il serait plus utile d'utiliser un filtre automatique
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
27
28
29
30
31
32
33
Sub Transfert()
Dim LastLig As Long
Dim cDest As Range
 
Application.ScreenUpdating = False
With ThisWorkbook
    'cDest: La celllule de destination: première cellule vide de la colonne A de Feuil2
    With .Worksheets("Feuil2")
        Set cDest = .Cells(.Rows.Count, "A").End(xlUp)(2)
    End With
    With .Worksheets("Feuil1")
        'Enlève l'éventuel filtre automatique
        .AutoFilterMode = False
        'LastLig, ligne de la dernière cellule remplie de colonne A de Feuil1
        LastLig = .Cells(.Rows.Count, "A").End(xlUp).Row
        'On fait un filtre automatique sur la colonne A de Feuil1 avec comme critère "x"
        .Range("A1:A" & LastLig).AutoFilter field:=1, Criteria1:="x"
        'Si au moins une ligne résultat du filtre (en plus de la ligne 1 des titres)
        If .Range("A1:A" & LastLig).SpecialCells(xlCellTypeVisible).Count > 1 Then
            With .Range("A2:A" & LastLig).SpecialCells(xlCellTypeVisible).EntireRow
                'On copie toutes les lignes visibles vers cDest (sauf la ligne des titres)
                .Copy cDest
                'on supprime toutes les lignes visibles (sauf la ligne des titres)
                .Delete
            End With
        End If
        'on vide notre variable cDest
        Set cDest = Nothing
        'On enlève le filtre automatique
        .AutoFilterMode = False
    End With
End With
End Sub
Si tu as seulement une seul et unique cellule contenant x en colonne A de Feuil1 et que tu veux transférer cette ligne vers la première cellule vide de colonne A de Feuil2, on passera pas la méthode Find. Exemple:
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
Sub Transfert2()
Dim c As Range, cDest As Range
 
Application.ScreenUpdating = False
With ThisWorkbook
    'cDest: La celllule de destination: première cellule vide de la colonne A de Feuil2
    With .Worksheets("Feuil2")
        Set cDest = .Cells(.Rows.Count, "A").End(xlUp)(2)
    End With
    With .Worksheets("Feuil1")
    'on cherche LA CELLULE contenant x en colonne A de Feuil1
        Set c = .Range("A:A").Find("x", LookIn:=xlValues, lookat:=xlWhole)
        If Not c Is Nothing Then
            With c.EntireRow
                'On copie toute la ligne trouvée vers cDest
                .Copy cDest
                'on supprime la ligne trouvée de Feuil1
                .Delete
            End With
            Set c = Nothing
        End If
        'on vide notre variable cDest
        Set cDest = Nothing
    End With
End With
End Sub
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 08/10/2011, 15h30   #4
Invité régulier
 
Inscription : août 2011
Messages : 41
Détails du profil
Informations forums :
Inscription : août 2011
Messages : 41
Points : 6
Points : 6
Par défaut ça marche!

Merci beaucoup!
moi244 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 19h38.


 
 
 
 
Partenaires

Hébergement Web