XL 2013 Copier une ligne excel sur une nouvelle feuille en fonction des résultats d'une case

Benoit M-R

XLDnaute Nouveau
Bonjour J'ai besoin d'un expert excel pour une macro pour organiser mon entreprise. Je souhaite que dans la Feuille Planning général, en fonction de la colonne I "CATEGORIE", la ligne se colle automatiquement dans la feuille du même nom que la catégorie sans la supprimer du planning général.
je vous joins les fichiers,

j'espère que quelqu'un pourra m'aider

merci beaucoup

Benoit
 

Pièces jointes

  • COPIE PLANNING PRODUCTION (1).xls
    682 KB · Affichages: 13
Solution
Re,

J'ai rajouté une colonne Fait à la fin de ton tableau. Copié/coller les entêtes dans tous les onglets. Le code ci-dessous fait le reste :

VB:
Sub Macro1()
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)

Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
Set OS = Worksheets("PLANNING POSE GENERAL") 'définit l'onglet source OS
TV = OS.Range("A1").CurrentRegion 'définit le tableau des valeur TV
For I = 4 To UBound(TV, 1) 'boucle sur toutes les ligne I du tableau des valeurs (en partant de la...

Robert

XLDnaute Barbatruc
Repose en paix
Re,

J'ai rajouté une colonne Fait à la fin de ton tableau. Copié/coller les entêtes dans tous les onglets. Le code ci-dessous fait le reste :

VB:
Sub Macro1()
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)

Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
Set OS = Worksheets("PLANNING POSE GENERAL") 'définit l'onglet source OS
TV = OS.Range("A1").CurrentRegion 'définit le tableau des valeur TV
For I = 4 To UBound(TV, 1) 'boucle sur toutes les ligne I du tableau des valeurs (en partant de la 4ème)
    If TV(I, 19) = "" Then 'condition 1 : si la donnée ligne I colonne 19 (=> colonne S) est vide
        If TV(I, 9) <> "" Then 'condition 2 : si la donnée ligne I colonne 9 (=> colonne I) n'est pas vide
            Set OD = Worksheets(TV(I, 9)) 'définit l'onglet destinatoion OD
            Set DEST = OD.Cells(Application.Rows.Count, "A").End(xlUp).Offset(1, 0) 'définit la cellule de destination DEST
            DEST.Resize(1, UBound(TV, 2) - 1).Value = Application.Index(TV, I) 'renvoie dans DEST redimensionnée la ligne I du tableau TV
            OS.Cells(I, "S").Value = "X" 'écrit "X" dasns la colonne "Fait"
        End If 'fin de la condition 2
    End If 'fin de la condition 1
Next I 'prochaine ligne de la boucle
Application.ScreenUpdating = True 'affiche les rafraîchissements d'écran
End Sub

Le Fichier :
 

Pièces jointes

  • Benoît_ED_v01.xls
    270 KB · Affichages: 12

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour Benoît, bonjour le forum,

Le code ci-dessous agit en une seule fois sur les tous les onglets concernés :

VB:
Sub Macro1()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim COL As Byte 'déclare la variable COL (COLonne)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)

Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
For Each O In Worksheets 'boucle 1 sur tous les onglets O du classeur
    Select Case Left(O.Name, 10) 'agit en fonctions des 10 premiers caractères du nom de l'onglet O
        Case "EXPEDITION" 'cas "EXPEDITION"
            COL = 18 'définit la colonne COL
            Set OS = O 'définit l'onglet source OS
            GoTo suite 'va à l'étiquette "suite"
        Case "PLANNING G" 'cas "PLANNING G"
            COL = 19 'définit la colonne COL
            Set OS = O 'définit l'onglet source OS
            GoTo suite 'va à l'étiquette "suite"
    End Select 'fin de l'action en fonctions des 10 premiers caractères du nom de l'onglet O
GoTo prochain 'va à l'étiquette "prochain"
suite: 'étiquette
    TV = OS.Range("A1").CurrentRegion 'définit le tableau des valeur TV
    For I = 4 To UBound(TV, 1) 'boucle 2 : sur toutes les ligne I du tableau des valeurs (en partant de la 4ème)
        If TV(I, COL) = "" Then 'condition 1 : si la donnée ligne I colonne COL est vide
            If TV(I, 9) <> "" Then 'condition 2 : si la donnée ligne I colonne 9 (=> colonne I) n'est pas vide
                Set OD = Worksheets(TV(I, 9)) 'définit l'onglet destinatoion OD
                Set DEST = OD.Cells(Application.Rows.Count, "A").End(xlUp).Offset(1, 0) 'définit la cellule de destination DEST
                DEST.Resize(1, UBound(TV, 2) - 1).Value = Application.Index(TV, I) 'renvoie dans DEST redimensionnée la ligne I du tableau TV
                OS.Cells(I, COL).Value = "X" 'écrit "X" dans la colonne COL "Fait"
            End If 'fin de la condition 2
        End If 'fin de la condition 1
    Next I 'prochaine ligne de la boucle 2
prochain: 'étiquette
Next O 'prochaine onglet de la boucle 1
Application.ScreenUpdating = True 'affiche les rafraîchissements d'écran
End Sub
 

Benoit M-R

XLDnaute Nouveau
Bonjour Benoît, bonjour le forum,

Le code ci-dessous agit en une seule fois sur les tous les onglets concernés :

VB:
Sub Macro1()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim COL As Byte 'déclare la variable COL (COLonne)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)

Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
For Each O In Worksheets 'boucle 1 sur tous les onglets O du classeur
    Select Case Left(O.Name, 10) 'agit en fonctions des 10 premiers caractères du nom de l'onglet O
        Case "EXPEDITION" 'cas "EXPEDITION"
            COL = 18 'définit la colonne COL
            Set OS = O 'définit l'onglet source OS
            GoTo suite 'va à l'étiquette "suite"
        Case "PLANNING G" 'cas "PLANNING G"
            COL = 19 'définit la colonne COL
            Set OS = O 'définit l'onglet source OS
            GoTo suite 'va à l'étiquette "suite"
    End Select 'fin de l'action en fonctions des 10 premiers caractères du nom de l'onglet O
GoTo prochain 'va à l'étiquette "prochain"
suite: 'étiquette
    TV = OS.Range("A1").CurrentRegion 'définit le tableau des valeur TV
    For I = 4 To UBound(TV, 1) 'boucle 2 : sur toutes les ligne I du tableau des valeurs (en partant de la 4ème)
        If TV(I, COL) = "" Then 'condition 1 : si la donnée ligne I colonne COL est vide
            If TV(I, 9) <> "" Then 'condition 2 : si la donnée ligne I colonne 9 (=> colonne I) n'est pas vide
                Set OD = Worksheets(TV(I, 9)) 'définit l'onglet destinatoion OD
                Set DEST = OD.Cells(Application.Rows.Count, "A").End(xlUp).Offset(1, 0) 'définit la cellule de destination DEST
                DEST.Resize(1, UBound(TV, 2) - 1).Value = Application.Index(TV, I) 'renvoie dans DEST redimensionnée la ligne I du tableau TV
                OS.Cells(I, COL).Value = "X" 'écrit "X" dans la colonne COL "Fait"
            End If 'fin de la condition 2
        End If 'fin de la condition 1
    Next I 'prochaine ligne de la boucle 2
prochain: 'étiquette
Next O 'prochaine onglet de la boucle 1
Application.ScreenUpdating = True 'affiche les rafraîchissements d'écran
End Sub
Merci , mais je ne suis pas informaticien et je ne maîtrise pas les macros, est ce tu peux me l'intégrer dans le fichier excel pour les onglets expéditions s'il te plait?
 

Pièces jointes

  • Copie de Benoît_ED_v01 (003).xls
    836 KB · Affichages: 6

Robert

XLDnaute Barbatruc
Repose en paix
Re,

Pour moi un tableau doit être rempli à partir de sa première ligne vide. Si tu mets des données n'importe où en laissant des lignes vide, le code ne marche pas. J'ai replacé les données dans les différents tableau et si tu lances la macro ça fonctionne... Sinon il faut modifier le code...
 

Pièces jointes

  • Benoît_ED_v03.xls
    842.5 KB · Affichages: 6

Benoit M-R

XLDnaute Nouveau
Re,

Pour moi un tableau doit être rempli à partir de sa première ligne vide. Si tu mets des données n'importe où en laissant des lignes vide, le code ne marche pas. J'ai replacé les données dans les différents tableau et si tu lances la macro ça fonctionne... Sinon il faut modifier le code...
Bonjour Robert,Merci pour le tableau, j'ai recopier le tableau avec mes données mais quand je souhaite effectuer la macro, un message d'erreur apparait et rien n'est déplacé. Ce qui est bizarre c'est que quand je l'ai testé au retour de votre mail celà fonctionnait. Qu'en pensez vous?
 

Pièces jointes

  • Copie de Benoît_ED_v03 (002).xls
    870 KB · Affichages: 5

Robert

XLDnaute Barbatruc
Repose en paix
Re,

Il y avait une erreur dans le code depuis la première version.
Comme le code agissait en fonction des 10 premiers caractères du nom de l'onglet. Il ne fonctionnait pas avec PLANNING POSE GENERAL car PLANNING G ne respectait pas la condition.
L'idéal serait de mieux spécifier les onglet à scanner :
S-EXPEDITION BOURGOGNE, S-EXPEDITION RHONE ALPES, S-EXPEDITION REVENDEUR, S-PLANNING POSE GENERAL par exemple. Et si tu en rajoutes il suffira que le nom commence par S- pour que lui aussi soit scanné. Tous les onglets commençant par S- seront ainsi scannés.
Aussi, La colonne Fait ne se trouve pas au même endroit selon l'onglet ce qui oblige à créer des Select Case inutiles.
Il y a un espace en trop à la fin dans le nom de l'onglet MOUSTIQUAIRE !...

Je te propose de revoir ta copie. Revient avec un fichier avec des onglets au nom caractéristique, pour ceux que l'on scanne et au nom strictement identique à la liste de validation de données de la colonne I pour les autres, des tableaux ayant tous exactement la même structure (colonne Fait au même endroit) et je te promets un code fiable.
 

Benoit M-R

XLDnaute Nouveau
Re,

Il y avait une erreur dans le code depuis la première version.
Comme le code agissait en fonction des 10 premiers caractères du nom de l'onglet. Il ne fonctionnait pas avec PLANNING POSE GENERAL car PLANNING G ne respectait pas la condition.
L'idéal serait de mieux spécifier les onglet à scanner :
S-EXPEDITION BOURGOGNE, S-EXPEDITION RHONE ALPES, S-EXPEDITION REVENDEUR, S-PLANNING POSE GENERAL par exemple. Et si tu en rajoutes il suffira que le nom commence par S- pour que lui aussi soit scanné. Tous les onglets commençant par S- seront ainsi scannés.
Aussi, La colonne Fait ne se trouve pas au même endroit selon l'onglet ce qui oblige à créer des Select Case inutiles.
Il y a un espace en trop à la fin dans le nom de l'onglet MOUSTIQUAIRE !...

Je te propose de revoir ta copie. Revient avec un fichier avec des onglets au nom caractéristique, pour ceux que l'on scanne et au nom strictement identique à la liste de validation de données de la colonne I pour les autres, des tableaux ayant tous exactement la même structure (colonne Fait au même endroit) et je te promets un code fiable.
Bonjour Robert,
je vous joins le fichier corrigé, est-ce que pourrez me faire la macros s'il vous plait?
Le Fichier fait 3mo et ne peut etre envoyé directement ici, pouver vous me donner un email?

Merci
Benoit
 

Benoit M-R

XLDnaute Nouveau
Re,

Il y avait une erreur dans le code depuis la première version.
Comme le code agissait en fonction des 10 premiers caractères du nom de l'onglet. Il ne fonctionnait pas avec PLANNING POSE GENERAL car PLANNING G ne respectait pas la condition.
L'idéal serait de mieux spécifier les onglet à scanner :
S-EXPEDITION BOURGOGNE, S-EXPEDITION RHONE ALPES, S-EXPEDITION REVENDEUR, S-PLANNING POSE GENERAL par exemple. Et si tu en rajoutes il suffira que le nom commence par S- pour que lui aussi soit scanné. Tous les onglets commençant par S- seront ainsi scannés.
Aussi, La colonne Fait ne se trouve pas au même endroit selon l'onglet ce qui oblige à créer des Select Case inutiles.
Il y a un espace en trop à la fin dans le nom de l'onglet MOUSTIQUAIRE !...

Je te propose de revoir ta copie. Revient avec un fichier avec des onglets au nom caractéristique, pour ceux que l'on scanne et au nom strictement identique à la liste de validation de données de la colonne I pour les autres, des tableaux ayant tous exactement la même structure (colonne Fait au même endroit) et je te promets un code fiable.
Bonjour Robert, ci-joint le fichier, est-ce que nos modifications sont ok? qu'en pensez vous?
 

Pièces jointes

  • Copie de Benoît_ED_v01 (003) (1).zip
    359.4 KB · Affichages: 5

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 948
Membres
101 850
dernier inscrit
Danigra