Note: The other languages of the website are Google-translated. Back to English

Comment déplacer une ligne entière vers une autre feuille en fonction de la valeur de la cellule dans Excel?

Pour déplacer une ligne entière vers une autre feuille en fonction de la valeur de la cellule, cet article vous aidera.

Déplacer la ligne entière vers une autre feuille en fonction de la valeur de la cellule avec le code VBA
Déplacer la ligne entière vers une autre feuille en fonction de la valeur de la cellule avec Kutools for Excel


Déplacer la ligne entière vers une autre feuille en fonction de la valeur de la cellule avec le code VBA

Comme illustré ci-dessous, vous devez déplacer la ligne entière de Sheet1 à Sheet2 si un mot spécifique «Done» existe dans la colonne C. Vous pouvez essayer le code VBA suivant.

1. presse autre+ F11 touches simultanément pour ouvrir le Microsoft Visual Basic pour applications fenêtre.

2. Dans la fenêtre Microsoft Visual Basic pour Applications, cliquez sur insérer > Module. Ensuite, copiez et collez le code VBA ci-dessous dans la fenêtre.

VBA code 1: Move entire row to another sheet based on cell value

Sub Cheezy()
'Updated by Kutools for Excel 2017/8/28
    Dim xRg As Range
    Dim xCell As Range
    Dim I As Long
    Dim J As Long
    Dim K As Long
    I = Worksheets("Sheet1").UsedRange.Rows.Count
    J = Worksheets("Sheet2").UsedRange.Rows.Count
    If J = 1 Then
       If Application.WorksheetFunction.CountA(Worksheets("Sheet2").UsedRange) = 0 Then J = 0
    End If
    Set xRg = Worksheets("Sheet1").Range("C1:C" & I)
    On Error Resume Next
    Application.ScreenUpdating = False
    For K = 1 To xRg.Count
        If CStr(xRg(K).Value) = "Done" Then
            xRg(K).EntireRow.Copy Destination:=Worksheets("Sheet2").Range("A" & J + 1)
            xRg(K).EntireRow.Delete
            If CStr(xRg(K).Value) = "Done" Then
                K = K - 1
            End If
            J = J + 1
        End If
    Next
    Application.ScreenUpdating = True
End Sub

Notes: Dans le code, Sheet1 est la feuille de calcul contient la ligne que vous souhaitez déplacer. Et Sheet2 est la feuille de calcul de destination dans laquelle vous allez localiser la ligne. "C: C"Est la colonne contient la certaine valeur, et le mot"OK»Est la certaine valeur sur laquelle vous déplacerez la ligne. Veuillez les modifier en fonction de vos besoins.

3. appuie sur le F5 pour exécuter le code, la ligne qui répond aux critères de la feuille Sheet1 sera immédiatement déplacée vers la feuille Sheet2.

Notes: Le code VBA ci-dessus supprimera les lignes des données d'origine après le déplacement vers une feuille de calcul spécifiée. Si vous souhaitez uniquement copier des lignes en fonction de la valeur de la cellule au lieu de les supprimer. Veuillez appliquer le code VBA ci-dessous 2.

VBA code 2: Copy entire row to another sheet based on cell value

Sub MoveRowBasedOnCellValue()
'Updated by Extendoffice 2017/11/10
    Dim xRg As Range
    Dim xCell As Range
    Dim I As Long
    Dim J As Long
    Dim K As Long
    I = Worksheets("Sheet1").UsedRange.Rows.Count
    J = Worksheets("Sheet2").UsedRange.Rows.Count
    If J = 1 Then
    If Application.WorksheetFunction.CountA(Worksheets("Sheet2").UsedRange) = 0 Then J = 0
    End If
    Set xRg = Worksheets("Sheet1").Range("C1:C" & I)
    On Error Resume Next
    Application.ScreenUpdating = False
    For K = 1 To xRg.Count
        If CStr(xRg(K).Value) = "Done" Then
            xRg(K).EntireRow.Copy Destination:=Worksheets("Sheet2").Range("A" & J + 1)
            J = J + 1
        End If
    Next
    Application.ScreenUpdating = True
End Sub

Déplacer la ligne entière vers une autre feuille en fonction de la valeur de la cellule avec Kutools for Excel

Si vous êtes novice en code VBA. Ici, je présente le Sélectionnez des cellules spécifiques utilité de Kutools pour Excel. Avec cet utilitaire, vous pouvez facilement sélectionner toutes les lignes en fonction d'une certaine valeur de cellule ou de différentes valeurs de cellule dans une feuille de calcul, et copier les lignes sélectionnées dans la feuille de calcul de destination selon vos besoins. Veuillez faire comme suit.

Avant d'appliquer Kutools pour Excel, S'il vous plaît téléchargez et installez-le d'abord.

1. Sélectionnez la liste de colonnes contenant la valeur de cellule sur laquelle vous déplacerez les lignes, puis cliquez sur Kutools > Sélectionnez > Sélectionnez des cellules spécifiques. Voir la capture d'écran:

2. Dans l'ouverture Sélectionnez des cellules spécifiques boîte de dialogue, choisissez Ligne entière dans le Type de sélection section, sélectionnez Équivaut à dans le Type spécifique liste déroulante, entrez la valeur de la cellule dans la zone de texte, puis cliquez sur le bouton OK .

Une autre Sélectionnez des cellules spécifiques boîte de dialogue apparaît pour vous montrer le nombre de lignes sélectionnées, et pendant ce temps, toutes les lignes contiennent la valeur spécifiée dans la colonne sélectionnée ont été sélectionnées. Voir la capture d'écran:

3. appuie sur le Ctrl + C clés pour copier les lignes sélectionnées, puis collez-les dans la feuille de calcul de destination dont vous avez besoin.

Notes: Si vous souhaitez déplacer des lignes vers une autre feuille de calcul en fonction de deux valeurs de cellule différentes. Par exemple, pour déplacer les lignes en fonction des valeurs de cellule "Terminé" ou "Traitement", vous pouvez activer Or état dans le Sélectionnez des cellules spécifiques boîte de dialogue comme ci-dessous capture d'écran montrée:

  Si vous souhaitez bénéficier d'un essai gratuit (30-jour) de cet utilitaire, veuillez cliquer pour le télécharger, puis passez à appliquer l'opération selon les étapes ci-dessus.


Articles connexes:


Les meilleurs outils de productivité de bureau

Kutools for Excel résout la plupart de vos problèmes et augmente votre productivité de 80%

  • Réutilisation: Insérer rapidement formules complexes, graphiques et tout ce que vous avez utilisé auparavant; Crypter les cellules avec mot de passe; Créer une liste de diffusion et envoyer des e-mails ...
  • Barre Super Formula (modifiez facilement plusieurs lignes de texte et de formule); Disposition de lecture (lire et modifier facilement un grand nombre de cellules); Coller dans la plage filtréeplus
  • Fusionner les cellules / lignes / colonnes sans perdre de données; Contenu des cellules divisées; Combiner des lignes / colonnes en double... Empêcher les cellules en double; Comparer les gammesplus
  • Sélectionnez Dupliquer ou Unique Lignes; Sélectionnez les lignes vides (toutes les cellules sont vides); Super Find et Fuzzy Find dans de nombreux classeurs; Sélection aléatoire ...
  • Copie exacte Plusieurs cellules sans changer la référence de formule; Créer automatiquement des références à plusieurs feuilles; Insérer des puces, Cases à cocher et plus encore ...
  • Extrait du texte, Ajouter du texte, Supprimer par position, Supprimer l'espace; Créer et imprimer des sous-totaux de pagination; Conversion entre le contenu et les commentaires des cellulesplus
  • Super filtre (enregistrer et appliquer des schémas de filtrage à d'autres feuilles); Tri avancé par mois / semaine / jour, fréquence et plus; Filtre spécial par gras, italique ...
  • Combiner des classeurs et des feuilles de travail; Fusionner les tableaux en fonction des colonnes clés; Diviser les données en plusieurs feuilles; Conversion par lots xls, xlsx et PDFplus
  • Plus de 300 fonctionnalités puissantes. Prend en charge Office / Excel 2007-2021 et 365. Prend en charge toutes les langues. Déploiement facile dans votre entreprise ou organisation. Fonctionnalités complètes Essai gratuit de 30 jours. Garantie de remboursement de 60 jours.
onglet kte 201905

Office Tab apporte une interface à onglets à Office et simplifie considérablement votre travail

  • Activer l'édition et la lecture par onglets dans Word, Excel, PowerPoint, Publisher, Access, Visio et Project.
  • Ouvrez et créez plusieurs documents dans de nouveaux onglets de la même fenêtre, plutôt que dans de nouvelles fenêtres.
  • Augmente votre productivité de 50% et réduit des centaines de clics de souris chaque jour!
bas de cabine
Commentaires (299)
Pas encore de notes. Soyez le premier à évaluer!
Ce commentaire a été minimisé par le modérateur sur le site
Bonjour, j'ai trouvé ce guide particulier vraiment utile par rapport à d'autres que j'ai vus. Merci! Le problème que j'ai est que si je change la valeur souhaitée en "Fermé", je dois exécuter F5 pour déplacer la ligne. J'aimerais qu'il se déplace automatiquement. Je suis nouveau sur Excel donc votre aide est grandement appréciée. Sub Cheezy() Dim xRg As Range Dim xCell As Range Dim I As Long Dim J As Long I = Worksheets("ECR Incident Tracker").UsedRange.Rows.Count J = Worksheets("Resolved Issues").UsedRange.Rows. Count If J = 1 Then If Application.WorksheetFunction.CountA(Worksheets("Resolved Issues").UsedRange) = 0 Then J = 0 End If Set xRg = Worksheets("ECR Incident Tracker").Range("B1:B" & I) En cas d'erreur, reprendre l'application suivante.ScreenUpdating = False pour chaque xCell dans xRg If CStr(xCell.Value) = "Closed" Then xCell.EntireRow.Copy Destination:=Worksheets("Resolved Issues").Range("A" & J + 1) xCell.EntireRow.Delete J = J + 1 End If Next Application.ScreenUpdating = True End Sub
Ce commentaire a été minimisé par le modérateur sur le site
Bonjour, j'essaie d'automatiser le déplacement des cellules sans avoir à ouvrir le module et à appuyer également sur F5. Avez-vous déjà résolu cette question ? Merci d'avance!
Ce commentaire a été minimisé par le modérateur sur le site
Crystal a fourni des informations sur la façon de le faire aujourd'hui - jetez un œil à la première page de ce fil pour voir sa réponse. Il déplace automatiquement la ligne avec la date du jour dans une colonne (L dans mon cas) vers une autre feuille de calcul.
Ce commentaire a été minimisé par le modérateur sur le site
J'exécute ce code et j'essaie de déplacer une ligne en fonction de la date d'aujourd'hui apparaissant dans la colonne I - J'ai changé Range("B1:B" & I) pour lire Range(I1:I" & I). J'ai changé " Terminé" dans votre exemple à Date. Cependant, lorsque la date d'aujourd'hui apparaît n'importe où dans la ligne, pas seulement dans la colonne I comme requis, la ligne passe à la feuille de calcul alternative. Toute idée de la raison pour laquelle cela se produit et comment je peux déplacer la ligne uniquement lorsque la date d'aujourd'hui figure dans la colonne I, que la date d'aujourd'hui apparaisse ou non dans d'autres colonnes ?
Ce commentaire a été minimisé par le modérateur sur le site
Si je voulais avoir de nombreuses valeurs et de nombreuses feuilles vers lesquelles déplacer ma ligne, je devrais réécrire tout le code avec une valeur différente pour cette cellule ? Cela signifie que si je mets NA dans une cellule, cela va à la feuille Na, et si je mets W #, cela ira à la mauvaise feuille de numéro, etc.
Ce commentaire a été minimisé par le modérateur sur le site
salut, c'était très utile. Existe-t-il un moyen de le faire sans déplacer la ligne de données vers la deuxième feuille, mais plutôt de la copier ? Donc, les données resteraient sur les deux feuilles ?
Ce commentaire a été minimisé par le modérateur sur le site
Bonjour, le code a été très utile, mais au lieu de copier la ligne entière, j'ai besoin qu'une certaine sélection de lignes soit déplacée vers la feuille suivante. comment puis-je définir une plage au lieu d'une ligne entière Sub Cheezy() Dim xRg As Range Dim xCell As Range Dim I As Long Dim J As Long I = Worksheets("Sheet1").UsedRange.Rows.Count J = Worksheets(" Sheet2").UsedRange.Rows.Count Si J = 1 Alors si Application.WorksheetFunction.CountA(Worksheets("Sheet2").UsedRange) = 0 Alors J = 0 End If Set xRg = Worksheets("Sheet1").Range( "C1:C" & I) En cas d'erreur, reprendre l'application suivante.ScreenUpdating = False pour chaque xCell dans xRg If CStr(xCell.Value) = "Done" Then xCell.Ligne entière.Copy Destination:=Worksheets("Sheet2").Range("A" & J + 1) J = J + 1 End If Next Application.ScreenUpdating = True End Sub
Ce commentaire a été minimisé par le modérateur sur le site
quel serait le code si je voulais copier des lignes (cellules spécifiques) dans une autre feuille vers des cellules spécifiques ? MAIS également basé sur une valeur Exemple : chaîne d'images de produits en couleur white blender 2 whiteblender2 black juicer 3 blackjuicer3 red tv 1 redtv1 green iron 4 greeniron4 Je voudrais que la chaîne soit copiée sur une autre feuille mais le nombre dans la colonne des images indique combien de fois elle doit être copiée (donc, dans ce cas, la chaîne du mélangeur doit être copié sur 2 lignes
Ce commentaire a été minimisé par le modérateur sur le site
Salut, Très beau morceau de code, fonctionne très bien. Comment changer ce code pour déplacer des lignes d'une table à une autre table, au lieu d'une feuille à une autre feuille ? Merci beaucoup !
Ce commentaire a été minimisé par le modérateur sur le site
Salut, j'essaie d'utiliser le code mais je reçois une erreur de syntaxe sur Dim xCell As Range. Pouvez-vous aider s'il vous plaît ?
Ce commentaire a été minimisé par le modérateur sur le site
Sub Cheezy() Dim xRg As Range Dim xCell As Range Dim I As Long Dim J As Long I = Worksheets("Sheet1").UsedRange.Rows.Count J = Worksheets("Sheet2").UsedRange.Rows.Count If J = 1 Then If Application.WorksheetFunction.CountA(Worksheets("Sheet2").UsedRange) = 0 Then J = 0 End If Set xRg = Worksheets("Sheet1").Range("C1:C" & I) On Error Resume Next Application.ScreenUpdating = False For Each xCell In xRg If CStr(xCell.Value) = "Done" Then xCell.EntireRow.Copy Destination:=Worksheets("Sheet2").Range("A" & J + 1) xCell. EntireRow.Delete J = J + 1 End If Next Application.ScreenUpdating = True End Sub comment ajouter une deuxième feuille de calcul pour déplacer les lignes vers la feuille 2 ?
Ce commentaire a été minimisé par le modérateur sur le site
Que dois-je saisir si je veux inclure une date comme valeur ? Ainsi, la ligne reste sur la feuille 1 si elle n'a pas de date et passe à la feuille 2 si c'est le cas ?
Ce commentaire a été minimisé par le modérateur sur le site
[quote] salut, cela m'a été très utile. Existe-t-il un moyen de le faire sans déplacer la ligne de données vers la deuxième feuille, mais plutôt de la copier ? Donc, les données resteraient sur les deux feuilles ?Par Maddie[/quote] quelqu'un a-t-il résolu ce problème
Ce commentaire a été minimisé par le modérateur sur le site
Supprimez ce "xCell.EntireRow.Delete" du code
Ce commentaire a été minimisé par le modérateur sur le site
Lorsque je supprime cette ligne de code et exécute à nouveau la macro, Excel se fige. Pourquoi et comment y remédier ?? Je veux que les données soient sur les deux feuilles de calcul et ne soient pas supprimées de l'original. AIT
Ce commentaire a été minimisé par le modérateur sur le site
y a-t-il une réponse à cela? Le mien se fige aussi je voudrais copier mais pas supprimer la ligne
Ce commentaire a été minimisé par le modérateur sur le site
Good Day,
Le code VBA ci-dessous peut vous aider à copier uniquement les lignes au lieu de les supprimer.

Sous Cheezy()
Dim xRg As Range
Dim xCell As Range
Dim I As Long
Dim J aussi longtemps
Dim K aussi longtemps
I = Worksheets("Sheet1").UsedRange.Rows.Count
J = Worksheets("Sheet2").UsedRange.Rows.Count
Si J = 1 Alors
Si Application.WorksheetFunction.CountA(Worksheets("Sheet2").UsedRange) = 0 Alors J = 0
Si fin
Set xRg = Worksheets("Sheet1").Range("C1:C" & I)
On Error Resume Next
Application.ScreenUpdating = Faux
Pour K = 1 à xRg.Compte
Si CStr(xRg(K).Valeur) = "Terminé" Alors
xRg(K).EntireRow.Copy Destination:=Worksheets("Sheet2").Range("A" & J + 1)
J = J + 1
Si fin
Suivant
Application.ScreenUpdating = True
End Sub
Ce commentaire a été minimisé par le modérateur sur le site
Bonjour, je recherche une variante. J'ai besoin que le script s'exécute en continu ou, à défaut, chaque fois que la valeur de ce champ spécifique change. Le code lui-même fonctionne mais doit être exécuté indépendamment. J'aimerais que ce soit automatisé. Quelqu'un peut-il aider?

Soit dit en passant, si je veux seulement qu'il copie sur des cellules spécifiques de la plage, comment cela se fait-il?
Ce commentaire a été minimisé par le modérateur sur le site
Cher Rob,

Si vous avez besoin que le script s'exécute automatiquement lorsque les cellules de ce champ changent, le code VBA ci-dessous peut vous aider. Veuillez cliquer avec le bouton droit sur l'onglet de la feuille actuelle (la feuille avec les lignes que vous déplacerez automatiquement), puis sélectionnez Afficher le code dans le menu contextuel. Ensuite, copiez et collez le script VBA ci-dessous dans la fenêtre Code.

Private Sub Worksheet_Change (Cible ByVal en tant que plage)

Dim xCell As Range

Dim I As Long
On Error Resume Next

Application.ScreenUpdating = Faux

Définir xCell = Cible(1)
Si xCell.Value = "Terminé" Alors
I = Worksheets("Sheet2").UsedRange.Rows.Count
Si je = 1 Alors

Si Application.WorksheetFunction.CountA(Worksheets("Sheet2").UsedRange) = 0 Alors I = 0

Si fin

xCell.EntireRow.Copy Worksheets("Sheet2").Range("A" & I + 1)

xCell.EntireRow.Delete
Si fin

Application.ScreenUpdating = True

End Sub


Pour votre deuxième question, voulez-vous dire simplement copier plusieurs cellules au lieu de toute la ligne ? Ou pourriez-vous fournir une capture d'écran de votre question ? Merci!

Cordialement, Cristal
Ce commentaire a été minimisé par le modérateur sur le site
Cristal,


Votre aide est plus que nécessaire :)



Comment pouvons-nous ajouter un autre critère ici, par exemple, je voudrais transférer Terminé à côté de Terminé :


Private Sub Worksheet_Change (Cible ByVal en tant que plage)

Dim xCell As Range

Dim I As Long
On Error Resume Next

Application.ScreenUpdating = Faux

Définir xCell = Cible(1)
Si xCell.Value = "Terminé" Alors
I = Worksheets("Sheet2").UsedRange.Rows.Count
Si je = 1 Alors

Si Application.WorksheetFunction.CountA(Worksheets("Sheet2").UsedRange) = 0 Alors I = 0

Si fin

xCell.EntireRow.Copy Worksheets("Sheet2").Range("A" & I + 1)

xCell.EntireRow.Delete
Si fin

Application.ScreenUpdating = True

End Sub
Ce commentaire a été minimisé par le modérateur sur le site
Salut cristal
C'est l'information la plus utile que j'ai trouvée sur le Web et cette macro fait ce que je veux. Mais je déplace les lignes d'une table à une autre - et avec cette macro, les informations se déplacent de la première ligne libre à l'extérieur de la table, pas de la prochaine ligne libre dans la table ? Pouvez-vous aider ?
Ce commentaire a été minimisé par le modérateur sur le site
J'exécute ce code et j'essaie de déplacer une ligne en fonction de la date d'aujourd'hui apparaissant dans la colonne I - J'ai changé Range("B1:B" & I) pour lire Range(I1:I" & I). J'ai changé " Terminé" dans votre exemple à Date. Cependant, lorsque la date d'aujourd'hui apparaît n'importe où dans la ligne, pas seulement dans la colonne I comme requis, la ligne passe à la feuille de calcul alternative. Toute idée de la raison pour laquelle cela se produit et comment je peux déplacer la ligne uniquement lorsque la date d'aujourd'hui figure dans la colonne I, que la date d'aujourd'hui apparaisse ou non dans d'autres colonnes ?
Ce commentaire a été minimisé par le modérateur sur le site
Cher David,

Le code fonctionne bien pour moi après avoir changé la plage et la valeur variable à ce jour. Le format de date dans votre code doit correspondre au format de date que vous avez utilisé dans la feuille de calcul. Ou est-il pratique pour vous de joindre votre feuille de calcul ?
Ce commentaire a été minimisé par le modérateur sur le site
Salut Crystal,


Je ne comprends pas ce que vous voulez dire lorsque vous dites que les formats de date du code et de la feuille de calcul doivent correspondre - je ne suis pas un expert VB, mais plutôt un niveau novice. Dans ma feuille de calcul, j'entre la date d'aujourd'hui dans la colonne F comme date d'entrée de la ligne, au format ctrl + :. Je saisis la date d'expiration dans la colonne "I" au format mm/jj/aaaa. Cependant, cela pose des problèmes lors de la création d'une nouvelle entrée de ligne et de la saisie de la date du jour dans la colonne F car, dès qu'elle est saisie, la ligne est déplacée vers la nouvelle feuille de calcul. De plus, le code supplémentaire à exécuter chaque fois que le classeur est ouvert n'apparaît pas courir sans que je le force à le faire. Désolé pour ce qui pourrait être pour vous des problèmes très insignifiants, mais je ne peux tout simplement pas entendre parler de ces problèmes. Toute aide serait appréciée.
Ce commentaire a été minimisé par le modérateur sur le site
Cher David,

J'ai essayé exactement ce que vous avez mentionné ci-dessus, mais le problème n'apparaît pas dans mon cas. Pouvez-vous fournir votre version Excel ? J'ai besoin de plus d'informations pour aider à résoudre ce problème. Désolé de vous déranger à nouveau.

Cordialement, Cristal
Ce commentaire a été minimisé par le modérateur sur le site
Crystal, ce sont les fiches concernées. Vous verrez dans le code copié que je recherche "jusqu'à" la date d'aujourd'hui dans la colonne L et si "jusqu'à" et y compris la date d'aujourd'hui se trouve dans cette colonne, je souhaite déplacer la ligne contenant cette date vers une nouvelle feuille de calcul. Actuellement, lorsque j'entre la date d'aujourd'hui n'importe où dans la ligne (par exemple, la colonne F si une sollicitation est émise aujourd'hui), la ligne entière est automatiquement déplacée vers la feuille de calcul archivée. J'entre généralement la date d'aujourd'hui en utilisant la combinaison ctrl + :, généralement dans la colonne F.
De plus, j'aimerais que ce mouvement se produise lorsque j'ouvre le classeur. Actuellement, je dois aller afficher le code, puis appuyer sur F5. Tout conseil sur la façon de le faire serait le bienvenu.
Ce commentaire a été minimisé par le modérateur sur le site
Malheureusement, mon classeur activé par macro ne sera pas téléchargé car il indique que le format n'est pas pris en charge. Ce sont dans Excel 2016
Ce commentaire a été minimisé par le modérateur sur le site
Cher David,

Le code VBA suivant peut vous aider à y parvenir.

Sous-carnet de travail privé_Open ()
Dim xRg As Range
Dim xCell As Range
Dim I As Long
Dim J aussi longtemps
I = Worksheets("OPPORTUNITÉS OASIS ACTUELLES").UsedRange.Rows.Count
J = Worksheets("OPPORTUNITÉS OASIS ARCHIVÉES").UsedRange.Rows.Count
Si J = 1 Alors
Si Application.WorksheetFunction.CountA(Worksheets("ARCHIVED OASIS OPPORTUNITIES").UsedRange) = 0 Alors J = 0
Si fin
Set xRg = Worksheets("OPPORTUNITÉS OASIS ACTUELLES").Range("L1:L" & I)
On Error Resume Next
Application.ScreenUpdating = Faux
Pour chaque xCell dans xRg
Si CStr(xCell.Value) = Date Alors
xCell.EntireRow.Copy Destination :=Feuilles de calcul("OPPORTUNITÉS OASIS ARCHIVÉES").Range("A" & J + 1)
xCell.EntireRow.Delete
J = J + 1
Si fin
Suivant
End Sub

Notes:
1. Vous devez placer le script VBA dans la fenêtre de code ThisWorkbook ;
2. Votre classeur doit être enregistré en tant que classeur Excel prenant en charge les macros.

Après l'opération ci-dessus, chaque fois que vous ouvrez le classeur, une ligne entière sera déplacée vers la feuille de calcul ARCHIVÉE si la cellule de la colonne L atteint la date du jour.

Cordialement, Crystal
Ce commentaire a été minimisé par le modérateur sur le site
Merci Cristal,
Cela fonctionne très bien si la date d'aujourd'hui est atteinte dans la colonne L. Existe-t-il un moyen d'inclure jusqu'à la date d'aujourd'hui dans la colonne L également, de sorte que si je ne vérifie pas le classeur pendant un certain nombre de jours, il inclura automatiquement les dates antérieures à celle d'aujourd'hui ? Merci beaucoup pour votre aide.
Ce commentaire a été minimisé par le modérateur sur le site
Cher David,

Désolé, je ne suis pas sûr d'avoir compris votre question. Si tel est le cas, toutes les lignes seront déplacées tant que des dates antérieures apparaîtront dans la colonne L ?
Ce commentaire a été minimisé par le modérateur sur le site
Salut Crystal,

Si je n'ouvre pas ma feuille de calcul pendant quelques jours et que la date saisie dans la colonne L est maintenant passée, c'est-à-dire que la date dans une cellule de la colonne L est le 11 septembre 2017 mais que je n'ouvre pas ma feuille de calcul avant le 13 septembre, je le ferais comme toutes les entrées de la colonne L à vérifier pour chaque date jusqu'à la date d'aujourd'hui puis déplacer les lignes correspondantes vers la nouvelle feuille. Actuellement, avec le code que vous avez gracieusement fourni, seules les lignes avec la date actuelle dans la colonne L sont déplacées vers la nouvelle feuille, laissant derrière celles avec une date antérieure dans la colonne L, que je déplace actuellement manuellement vers la nouvelle feuille. Merci de votre aide.
Ce commentaire a été minimisé par le modérateur sur le site
Cher David,



Je comprends ton point de vue. Veuillez essayer le script VBA ci-dessous. Lorsque vous ouvrez le classeur, toutes les lignes avec des dates jusqu'à la date d'aujourd'hui dans la colonne L seront déplacées vers la nouvelle feuille spécifiée.



Sous-carnet de travail privé_Open ()
Dim xRg As Range
Dim xRgRtn As Range
Dim xCell As Range
Dim xLastRow As Long
Dim I As Long
Dim J aussi longtemps
On Error Resume Next
xLastRow = Worksheets("OPPORTUNITÉS OASIS ACTUELLES").UsedRange.Rows.Count
Si xLastRow < 1 alors quitter le sous-marin
J = Worksheets("OPPORTUNITÉS OASIS ARCHIVÉES").UsedRange.Rows.Count
Si J = 1 Alors
Si Application.WorksheetFunction.CountA(Worksheets("ARCHIVED OASIS OPPORTUNITIES").UsedRange) = 0 Alors J = 0
Si fin
Set xRg = Worksheets("OPPORTUNITÉS OASIS ACTUELLES").Range("L1:L" & xLastRow)
Pour I = 2 à xLastRow
Si xRg(I).Value > Date Alors Quitter Sub
Si xRg(I).Valeur <= Date Alors
xRg(I).EntireRow.Copy Destination:=Worksheets("OPPORTUNITES OASIS ARCHIVEES").Range("A" & J + 1)
xRg(I).EntireRow.Delete
J = J + 1
je = je - 1
Si fin
Suivant
End Sub

Vous devez placer le script VBA dans la fenêtre de code ThisWorkbook et enregistrer le classeur en tant que classeur Excel prenant en charge les macros.
Ce commentaire a été minimisé par le modérateur sur le site
Merci Crystal, ça marche très bien.
Ce commentaire a été minimisé par le modérateur sur le site
Crystal, j'ai été un peu hâtif de répondre que le code fonctionnait. J'ai ouvert mon classeur aujourd'hui et les lignes contenant des entrées de date antérieure dans la cellule de la colonne L sont toujours dans la "feuille de calcul des opportunités oasis actuelles" et n'ont pas été déplacées vers la "feuille de calcul oasis archivée" comme prévu. Des idées pourquoi ce serait le cas?
Ce commentaire a été minimisé par le modérateur sur le site
Les cellules en surbrillance sont dans la colonne L en ce qui concerne la question ci-dessus et sont les critères (jusqu'à la date d'aujourd'hui) pour déplacer la ligne vers la nouvelle feuille de calcul. J'espère que cette image vous aidera.
Ce commentaire a été minimisé par le modérateur sur le site
Il s'agit également d'une copie de la fenêtre VBA liée à ce qui précède.
Ce commentaire a été minimisé par le modérateur sur le site
Crystal, j'ai été un peu hâtif de répondre que le code fonctionnait. J'ai ouvert mon classeur aujourd'hui et les lignes contenant des entrées de date antérieure dans la cellule de la colonne L sont toujours dans la "feuille de calcul des opportunités oasis actuelles" et n'ont pas été déplacées vers la "feuille de calcul oasis archivée" comme prévu. Des idées pourquoi ce serait le cas?
Ce commentaire a été minimisé par le modérateur sur le site
Cristal,

Comme je ne peux pas télécharger mon classeur, je vais reproduire les lignes et les colonnes ici

ABCDEFGHIJKL
# Type Demande de réservation Modification # Date d'émission Questions Client Lieu de livraison Proposition de projet due

1 SS SB 1234567 1 09/6/17 Non Armée Nom Lieu Drive Tank 09/10/17

En utilisant le code ci-dessous, je veux qu'il déplace une ligne entière vers une nouvelle feuille de calcul lorsque la colonne L atteint la date d'aujourd'hui. De plus, si je n'ai pas rempli la feuille de calcul pendant un certain nombre de jours, j'aimerais qu'elle utilise la recherche "jusqu'à la date d'aujourd'hui" dans la colonne L pour faire de même. J'aimerais aussi que cela se fasse automatiquement lorsque j'ouvre le classeur si possible. Actuellement, si j'entre la date d'aujourd'hui dans n'importe quelle cellule de la ligne, par exemple la colonne F lors de la saisie de données, la ligne entière se déplace vers la feuille de calcul d'archive. (Avec Excel 2016)

[Module 1Code]

Sous DaveV()

Dim xRg As Range

Dim xCell As Range

Dim I As Long

Dim J aussi longtemps

I = Worksheets("OPPORTUNITÉS OASIS ACTUELLES").UsedRange.Rows.Count

J = Worksheets("OPPORTUNITÉS OASIS ARCHIVÉES").UsedRange.Rows.Count

Si J = 1 Alors
Si Application.WorksheetFunction.CountA(Worksheets("ARCHIVED OASIS OPPORTUNITIES").UsedRange) = 0 Alors J = 0

Si fin

Set xRg = Worksheets("OPPORTUNITÉS OASIS ACTUELLES").Range("L1:L" & I)

On Error Resume Next

Application.ScreenUpdating = Faux

Pour chaque xCell dans xRg

Si CStr(xCell.Value) = Date Alors

xCell.EntireRow.Copy Destination :=Feuilles de calcul("OPPORTUNITÉS OASIS ARCHIVÉES").Range("A" & J + 1)
xCell.EntireRow.Delete

J = J + 1
Si fin

Suivant
Application.ScreenUpdating = True

End Sub
Ce commentaire a été minimisé par le modérateur sur le site
[Code feuille 1]

Private Sub Worksheet_Change (Cible ByVal en tant que plage)
Dim xCell As Range
Dim I As Long
On Error Resume Next
Application.ScreenUpdating = Faux
Définir xCell = Cible(1)
Si xCell.Valeur = Date Alors
I = Worksheets("OPPORTUNITÉS ARCHIVÉES OASIS").UsedRange.Rows.Count
Si je = 1 Alors
Si Application.WorksheetFunction.CountA(Worksheets("ARCHIVED OASIS OPPORTUNITIES").UsedRange) = 0 Alors I = 0 End If
xCell.EntireRow.Copy Worksheets("OPPORTUNITÉS ARCHIVÉES OASIS").Range("A" & I + 1)
xCell.EntireRow.Delete
Si fin
Application.ScreenUpdating = True
End Sub

J'espère que ce qui précède vous aidera, mais je ne suis pas une personne VBA, donc je ne comprends pas comment faire en sorte que le code fasse ce dont j'ai besoin. Votre aide serait appréciée.
Ce commentaire a été minimisé par le modérateur sur le site
Il y a une grosse erreur dans votre script !

Supposons que vous ayez détecté que la ligne 7 contient le mot "Terminé" dans la colonne C, vous le copiez donc et supprimez la ligne.
Une fois que vous avez supprimé la ligne, la ligne suivante de la liste sera la ligne 9 et non la ligne 8, car une fois que vous avez supprimé la 7ème ligne, le contenu de la 8ème ligne est désormais dans la ligne 7 et toutes les lignes ont augmenté d'une ligne. Ainsi, la prochaine ligne à vérifier était censée être la ligne n ° 1, mais maintenant elle contient les données qui se trouvaient auparavant sur la ligne n ° 8, donc chaque fois que vous supprimez une ligne, vous sautez en fait une ligne à vérifier !!!
Ce commentaire a été minimisé par le modérateur sur le site
Cher Shau Alon,

Merci pour votre commentaire. Le code a été mis à jour avec l'erreur corrigée. Merci beaucoup pour votre assistante.

Cordialement, Cristal
Ce commentaire a été minimisé par le modérateur sur le site
Je pense que cela m'arrive, il continue de copier la même ligne encore et encore même s'il indique que le code a été mis à jour. Voici ce que j'ai :

Sous Cheezy()
'Mise à jour par Kutools pour Excel 2017/8/28
Dim xRg As Range
Dim xCell As Range
Dim I As Long
Dim J aussi longtemps
Dim K aussi longtemps
I = Worksheets("PURCHASE FORCAST").UsedRange.Rows.Count
J = Worksheets("Achat Archive").UsedRange.Rows.Count
Si J = 1 Alors
Si Application.WorksheetFunction.CountA(Worksheets("Purchase Archive").UsedRange) = 0 Alors J = 0
Si fin
Set xRg = Worksheets("PURCHASE PREVISION").Range("H3:H" & I)
On Error Resume Next
Application.ScreenUpdating = Faux
Pour K = 1 à xRg.Compte
Si CStr(xRg(K).Valeur) = "Oui" Alors
xRg(K).EntireRow.Copy Destination:=Worksheets("Achat Archive").Range("A" & J + 1)
xRg(K).EntireRow.Delete
Si CStr(xRg(K).Valeur) = "Oui" Alors
K = K - 1
Si fin
J = J + 1
Si fin
Suivant
Application.ScreenUpdating = True
End Sub
Ce commentaire a été minimisé par le modérateur sur le site
Salut Fred,
Chaque fois que vous exécutez le code, le code recherche la plage spécifiée, il copie donc la même ligne encore et encore car il ne peut pas dire quelle ligne a déjà été copiée. Pour éviter de copier la même ligne à plusieurs reprises, vous pouvez faire en sorte que le code s'exécute automatiquement lorsqu'une valeur correspondante est entrée dans la cellule spécifiée.
Dans la feuille de calcul intitulée "PURCHASE FORCAST", cliquez avec le bouton droit sur l'onglet de la feuille et cliquez sur Voir le code depuis le menu contextuel. Copiez ensuite le code VBA suivant dans la fenêtre Feuille (Code).

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'Updated by Kutools for Excel 20220830
Dim xRg As Range
Dim xCell As Range
Dim I As Long
Dim J As Long
Dim K As Long
I = Worksheets("PURCHASE FORCAST").UsedRange.Rows.Count
J = Worksheets("Purchase Archive").UsedRange.Rows.Count
If J = 1 Then
If Application.WorksheetFunction.CountA(Worksheets("Purchase Archive").UsedRange) = 0 Then J = 0
End If
Set xRg = Worksheets("PURCHASE FORCAST").Range("H3:H" & I)
On Error Resume Next
Application.ScreenUpdating = False
For K = 1 To xRg.Count
If CStr(xRg(K).Value) = "Yes" Then
xRg(K).EntireRow.Copy Destination:=Worksheets("Purchase Archive").Range("A" & J + 1)
xRg(K).EntireRow.Delete
If CStr(xRg(K).Value) = "Yes" Then
K = K - 1
End If
J = J + 1
End If
Next
Application.ScreenUpdating = True
End Sub
Ce commentaire a été minimisé par le modérateur sur le site
Quelqu'un pourrait-il m'aider à faire ce travail? J'ai essayé de changer la partie qui doit correspondre à mon fichier, mais cela se produit et je ne sais pas quoi faire.
Ce commentaire a été minimisé par le modérateur sur le site
il indique que le fichier n'est pas pris en charge lorsque j'essaie de télécharger le fichier Excel. Désolé... j'ai du mal avec ça aujourd'hui.
Ce commentaire a été minimisé par le modérateur sur le site
Je voudrais de l'aide pour une tâche similaire, mais légèrement différente. J'ai 5 colonnes de nombres, environ 25000 par colonne, chaque colonne avec un en-tête 1-5.Je voudrais copier la ligne entière sur une autre feuille si la valeur de la colonne 1 est supérieure à zéro, OU la colonne 2 est supérieure à zéro , OU la colonne 3 est inférieure à zéro, OU la colonne 4 est supérieure à cinq OU la colonne 5 est supérieure à deux etc. est-ce possible ?
Ce commentaire a été minimisé par le modérateur sur le site
le téléchargement d'image ne fonctionne pas... désolé.
Ce commentaire a été minimisé par le modérateur sur le site
Bonjour,
Veuillez utiliser le bouton de téléchargement de celui-ci.
Ce commentaire a été minimisé par le modérateur sur le site
Donc, le but est de voir si l'un des gaz dépasse une limite que je fixerai dans la formule, l'ensemble des œufs est COPIÉ sur une nouvelle feuille.

Merci beaucoup pour toute aide.
Ce commentaire a été minimisé par le modérateur sur le site
Image jointe
Ce commentaire a été minimisé par le modérateur sur le site
Cher Michael,
Vous pouvez peut-être résoudre ce problème en utilisant un complément Excel. Ici, je vous recommande l'utilitaire Sélectionner des cellules spécifiques de Kutools for Excel. Avec cet utilitaire, vous pouvez facilement sélectionner toutes les lignes d'une certaine plage si la valeur d'une colonne spécifiée est supérieure ou inférieure à un nombre. Après avoir sélectionné toutes les lignes nécessaires, vous pouvez les copier et les coller manuellement dans une nouvelle feuille de calcul. Voir ci-dessous l'image ci-jointe.

Vous pouvez en savoir plus sur cette fonctionnalité en suivant le lien hypertexte ci-dessous.
https://www.extendoffice.com/product/kutools-for-excel/excel-select-specific-cells-rows.html
Ce commentaire a été minimisé par le modérateur sur le site
merci pour cette formule, mais j'ai eu un problème qui est que lorsque je veux déplacer la ligne vers une autre feuille, cela ne se produit pas automatiquement. pouvez-vous me donner une autre formule? donc chaque fois que je change la valeur de la cellule, elle se déplace automatiquement.


à
Ce commentaire a été minimisé par le modérateur sur le site
Cher janang,
La dose de code ne se produit pas automatiquement tant que vous n'avez pas déclenché manuellement le bouton d'exécution.
Ce commentaire a été minimisé par le modérateur sur le site
Bonjour,

Je voudrais avoir cette macro configurée mais avec 2 arguments. J'ai réussi à faire fonctionner la macro dans mon fichier en fonction de la valeur des cellules de la colonne O. Cependant, j'aimerais que la macro vérifie si la colonne S est également remplie (ou <> "") avant de déplacer la ligne . Enfin, j'aimerais également que les lignes copiées aient le même format que les lignes de la deuxième feuille. Est-ce que ça change complètement la macro ?
Ce commentaire a été minimisé par le modérateur sur le site
Cher Hugues,
Je ne sais pas si je vous comprends bien. Vous voulez dire que si la cellule de la colonne S est remplie et que la cellule de la colonne O contient la certaine valeur en même temps, déplacez-vous la ligne avec la mise en forme ? Sinon, ne bougez pas ?
Ce commentaire a été minimisé par le modérateur sur le site
Bonjour Cristal,

Oui c'est exactement ce que je veux dire. En fait, mes données concernent des projets. Ma colonne O est le statut de mon projet, et S la date de fin de mon projet.
Je souhaite que mes utilisateurs, les personnes qui détiennent l'information et qui devront l'insérer, puissent "Archive" un projet UNIQUEMENT s'ils ont leur statut "Fermé" et qu'ils ont inséré une "Date de fin".


J'espère que cela aide à clarifier les choses
Ce commentaire a été minimisé par le modérateur sur le site
Cher Hugues,
Désolé de répondre si tard. Le code VBA suivant peut vous aider à résoudre le problème. Veuillez suivre les étapes de cet article pour appliquer le script VBA.

Sous MoveRowBasedOnCellValue()
Dim xRgStatus As Range
Dim xRgDate comme plage
Dim I As Long
Dim J aussi longtemps
Dim K aussi longtemps
I = Worksheets("Sheet1").UsedRange.Rows.Count
J = Worksheets("Sheet2").UsedRange.Rows.Count
Si J = 1 Alors
Si Application.WorksheetFunction.CountA(Worksheets("Sheet2").UsedRange) = 0 Alors J = 0
Si fin
Définir xRgStatus = Worksheets("Sheet1").Range("O1:O" & I)
Set xRgDate = Worksheets("Sheet1").Range("S1:S" & I)
On Error Resume Next
Application.ScreenUpdating = Faux
Application.CutCopyMode = Faux
xRgStatus(1).EntireRow.Copy
Worksheets("Sheet2").Range("A" & J + 1).PasteSpecial xlPasteAllUsingSourceTheme
J = J + 1
Pour K = 2 Vers xRgStatus.Count
Si CStr(xRgStatus(K).Value) = "Fermé" Alors
Si (xRgDate(K).Valeur <> "") Et (TypeName(xRgDate(K).Valeur) = "Date") Alors
xRgStatus(K).EntireRow.Copy
Worksheets("Sheet2").Range("A" & J + 1).PasteSpecial xlPasteAllUsingSourceTheme
J = J + 1
Si fin
Si fin
Suivant
Application.CutCopyMode = True
Application.ScreenUpdating = True
End Sub
Ce commentaire a été minimisé par le modérateur sur le site
Chère Cristal,

Merci beaucoup pour votre aide!

Salutations,

Hugues
Ce commentaire a été minimisé par le modérateur sur le site
Bonjour,


Comment copier les lignes au lieu de les déplacer ?
Ce commentaire a été minimisé par le modérateur sur le site
Bonjour,


Je sais que cela a été posté plusieurs fois mais je ne trouve pas la réponse. Comment puis-je copier le matériau sur la nouvelle feuille et NE PAS le supprimer de la feuille d'origine ?
Ce commentaire a été minimisé par le modérateur sur le site
Cher Mike,
Si vous souhaitez copier les lignes au lieu de les supprimer, le code VBA ci-dessous peut vous aider. Merci pour votre commentaire!

Sous Cheezy()
Dim xRg As Range
Dim xCell As Range
Dim I As Long
Dim J aussi longtemps
Dim K aussi longtemps
I = Worksheets("Sheet1").UsedRange.Rows.Count
J = Worksheets("Sheet2").UsedRange.Rows.Count
Si J = 1 Alors
Si Application.WorksheetFunction.CountA(Worksheets("Sheet2").UsedRange) = 0 Alors J = 0
Si fin
Set xRg = Worksheets("Sheet1").Range("C1:C" & I)
On Error Resume Next
Application.ScreenUpdating = Faux
Pour K = 1 à xRg.Compte
Si CStr(xRg(K).Valeur) = "Terminé" Alors
xRg(K).EntireRow.Copy Destination:=Worksheets("Sheet2").Range("A" & J + 1)
J = J + 1
Si fin
Suivant
Application.ScreenUpdating = True
End Sub
Ce commentaire a été minimisé par le modérateur sur le site
Bonjour,

Je débute dans l'utilisation des macros, est-il possible de coller les données ci-dessous après une certaine valeur et de les répéter jusqu'à la fin de la colonne ?
J'aime ça:

Transférez "Bleu" après "Couleur"

A1 = Bleu
A5= Couleur
A6= (transfert "Bleu" ici)
etc...
Ce commentaire a été minimisé par le modérateur sur le site
Cher John,
Voulez-vous dire que si une cellule contient "Couleur" dans une colonne, copiez le texte de la première cellule dans la cellule située sous la "Couleur" et répétez la copie de ce texte jusqu'à la fin de la colonne ?
Il n'y a pas encore de commentaires postés ici
TÉLÉCHARGER PLUS
Laisser vos commentaires
Publier en tant qu'invité
×
Évaluez cet article:
0   Personnages
Emplacements suggérés

Nous suivre

Copyright © 2009 - www.extendoffice.com. | Tous les droits sont réservés. Alimenté par ExtendOffice. | | Plan du site
Microsoft et le logo Office sont des marques commerciales ou des marques déposées de Microsoft Corporation aux États-Unis et / ou dans d'autres pays.
Protégé par Sectigo SSL