XL 2013 Modifier une macro sur un tableau

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 "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. Cette Macro doit fonctionner pour les onglets "S-Expedition Bourgogne, Rhone Alpes, Revendeur, et Planning Pose General". Je vous joint le premier modèle ou la macros ne fonctionne que sur planning pose général. Sur la nouvelle versions, des colonnes ont été ajouté sur le nouveau tableau.
je suis a dispo pour plus de précisions si besoin
je vous joins les fichiers,

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

merci beaucoup

Benoit
 

Pièces jointes

  • New Planning_ED_v01 (003) (3).zip
    361.3 KB · Affichages: 7
  • New Planning_ED_v02.zip
    362.5 KB · Affichages: 9

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonjour @Benoit M-R , le Forum

C'est un peu le fouilli ton truc, en ne regardant que le ZIP New Planning_ED_v01 (003) (3).zip j'en ai déduit ce code en lisant ceci :
Cette Macro doit fonctionner pour les onglets "S-Expedition Bourgogne, Rhone Alpes, Revendeur, et Planning Pose General"

Je fais donc un loop sur les onglets voulus :

VB:
Sub Distribution()
'Thierry add
Dim WSList As Variant 'Pour la Liste des Onglets concernés
Dim x As Byte 'Pour chaque 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 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

'Thierry add
WSList = Array("S-EXPEDITION BOUGOGNE", "S-EXPEDITION RHONE ALPES", "S-EXPEDITION REVENDEUR", "S-PLANNING POSE GENERAL") 'on définit le groupe de feuilles
    For x = 0 To UBound(WSList) 'on scan toutes les feuilles spécifiées dans l'Array
    Set OS = Worksheets(WSList(x)) 'Nouvelle définition l'onglet source OS sur array
'-----------
        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
        
'Thierry add
    Next x 'prochain Onglet
'-----------

Application.ScreenUpdating = True 'affiche les rafraîchissements d'écran
End Sub

Bonne soirée
@+Thierry
 

Benoit M-R

XLDnaute Nouveau
Bonjour @Benoit M-R , le Forum

C'est un peu le fouilli ton truc, en ne regardant que le ZIP New Planning_ED_v01 (003) (3).zip j'en ai déduit ce code en lisant ceci :


Je fais donc un loop sur les onglets voulus :

VB:
Sub Distribution()
'Thierry add
Dim WSList As Variant 'Pour la Liste des Onglets concernés
Dim x As Byte 'Pour chaque 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 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

'Thierry add
WSList = Array("S-EXPEDITION BOUGOGNE", "S-EXPEDITION RHONE ALPES", "S-EXPEDITION REVENDEUR", "S-PLANNING POSE GENERAL") 'on définit le groupe de feuilles
    For x = 0 To UBound(WSList) 'on scan toutes les feuilles spécifiées dans l'Array
    Set OS = Worksheets(WSList(x)) 'Nouvelle définition l'onglet source OS sur array
'-----------
        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
       
'Thierry add
    Next x 'prochain Onglet
'-----------

Application.ScreenUpdating = True 'affiche les rafraîchissements d'écran
End Sub

Bonne soirée
@+Thierry

Bonjour Thierry,

Merci pour votre réponse, serait-il possible de m'intégrer la macros dans le fichier? je n'ai pas la compétence pour le faire.

Merci

Très belle journée

Benoit
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonjour @Benoit M-R , le Forum

Ben tu vas dans le module qui contient ta macro actuelle "Distribution", tu l'as met en commentaires ou bien tu la remommes Distribution_OLD...

Tu copies le code ci-dessous en entier (de Sub à End Sub) et tu le rajoutes dans le même module ... Rien de bien sorcier, comme un traitement de texte ! ;)

Bien à toi, à vous
@+Thierry
 

Benoit M-R

XLDnaute Nouveau
Bonjour @Benoit M-R , le Forum

Ben tu vas dans le module qui contient ta macro actuelle "Distribution", tu l'as met en commentaires ou bien tu la remommes Distribution_OLD...

Tu copies le code ci-dessous en entier (de Sub à End Sub) et tu le rajoutes dans le même module ... Rien de bien sorcier, comme un traitement de texte ! ;)

Bien à toi, à vous
@+Thierry

Bonjour Thierry, je n'arrive pas à faire la manipulation correctement, ça ne fonctionne pas, peut-être parce que les colonnes de la version 2 ne sont pas les mêmes?
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonsoir @Benoit M-R , le forum

La modif que j'ai proposée est sur le pour fichier ZIP New Planning_ED_v01 (003) (3).zip , essaie déjà de l'adapter sur ce fichier, maintenant ta version 2 on s'en fiche un peu non ? d'ailleur je ne l'avais même pas ouverte comme précisé. (Et d'ailleurs c'était une source de confusion de mettre deux zips)

Bon courage
@+Thierry
 

Benoit M-R

XLDnaute Nouveau
Bonsoir @Benoit M-R , le forum

La modif que j'ai proposée est sur le pour fichier ZIP New Planning_ED_v01 (003) (3).zip , essaie déjà de l'adapter sur ce fichier, maintenant ta version 2 on s'en fiche un peu non ? d'ailleur je ne l'avais même pas ouverte comme précisé. (Et d'ailleurs c'était une source de confusion de mettre deux zips)

Bon courage
@+Thierry

Bonjour,

Malheureusement non, c'est sur la Version 2 que cela doit fonctionner.
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonjour @Benoit M-R , le Forum

J'ai passé encore un peu de temps en ouvrant l'autre zip, avec ta version 2, et donc je peux te confirmer que celà ne fonctionnera jamais tant que tu n'as pas la même structure de feuilles entre :

S-EXPEDITION BOUGOGNE
S-EXPEDITION RHONE ALPES
S-EXPEDITION REVENDEUR
S-PLANNING POSE GENERAL
... Et la ribanbelle de feuilles de destination

En effet dans la première (par exemple) on va trouver "Ville" dans la colonne "I" et la colonne "Catégorie" en colonne "L".... Alors que sur les trois autres feuilles, en "I" c'est "Catégorie" et "Ville" se trouve en "F"... Catégorie étant une clef principale de "dispatching" pour les onglets de destination et que tu veux un traitement en masse pour ces 4 feuilles, pas la peine de continuer, ca ne fonctionnera jamais.
Surtout qu'en suite les feuilles de destinations n'ont elles aussi pas la même structure, vraiment complètement différent de ta version 3 sur laquelle j'avais travaillé samedi dernier et abouti à des tests concluants..

Un algo VBA peut aider pour des choses bien structurées, mais quand on n'a pas de structure, alors mis à part les macros enregistrées, et faire les manips une à une, je ne vois pas où on peut t'aider en programmation.

Revoie un peu complètement la structure de ta version 2, car pour moi la 3 semblait plus cohérente.

Bonne soirée/journée
@+Thierry
 

Benoit M-R

XLDnaute Nouveau
Bonjour @Benoit M-R , le Forum

J'ai passé encore un peu de temps en ouvrant l'autre zip, avec ta version 2, et donc je peux te confirmer que celà ne fonctionnera jamais tant que tu n'as pas la même structure de feuilles entre :

S-EXPEDITION BOUGOGNE
S-EXPEDITION RHONE ALPES
S-EXPEDITION REVENDEUR
S-PLANNING POSE GENERAL
... Et la ribanbelle de feuilles de destination

En effet dans la première (par exemple) on va trouver "Ville" dans la colonne "I" et la colonne "Catégorie" en colonne "L".... Alors que sur les trois autres feuilles, en "I" c'est "Catégorie" et "Ville" se trouve en "F"... Catégorie étant une clef principale de "dispatching" pour les onglets de destination et que tu veux un traitement en masse pour ces 4 feuilles, pas la peine de continuer, ca ne fonctionnera jamais.
Surtout qu'en suite les feuilles de destinations n'ont elles aussi pas la même structure, vraiment complètement différent de ta version 3 sur laquelle j'avais travaillé samedi dernier et abouti à des tests concluants..

Un algo VBA peut aider pour des choses bien structurées, mais quand on n'a pas de structure, alors mis à part les macros enregistrées, et faire les manips une à une, je ne vois pas où on peut t'aider en programmation.

Revoie un peu complètement la structure de ta version 2, car pour moi la 3 semblait plus cohérente.

Bonne soirée/journée
@+Thierry

Bonjour Thierry, merci pour votre retour, j'ai refais le tableau avec les colonnes identiques pour chaque onglet.
je vous joint la la version modifié et suis dispo si besoin. Encore merci d'apporter à ma société vos compétences en informatique.

Benoit
 

Pièces jointes

  • New Planning_ED_v02 (2).zip
    349.2 KB · Affichages: 4

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonjour @Benoit M-R , le Forum

Voilà ta macro adaptée à ton dernier classeur qui semble être plus "conforme" . J'espère que tu suis et comprends ?
Le but d'un forum de partage de connaissance ce n'est pas de pondre du code à la carte, c'est d'essayer d'aider les gens et de les faire progresser... (Pas non plus de faire le job à leur place).

VB:
Sub Distribution_V02()
'Thierry add
Dim WSList As Variant 'Pour la Liste des Onglets concernés
Dim x As Byte 'Pour chaque 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 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

'Thierry add
WSList = Array("S-EXPEDITION BOUGOGNE", "S-EXPEDITION RHONE ALPES", "S-EXPEDITION REVENDEUR", "S-EXPEDITION POSE GENERAL") 'on définit le groupe de feuilles
    For x = 0 To UBound(WSList) 'on scan toutes les feuilles spécifiées dans l'Array
    Set OS = Worksheets(WSList(x)) 'Nouvelle définition l'onglet source OS sur array
'-----------
        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, 21) = "" Then 'condition 1 : si la donnée ligne I colonne 19 (=> colonne U) est vide >>> FAIT
                If TV(I, 12) <> "" Then 'condition 2 : si la donnée ligne I colonne 9 (=> colonne L) n'est pas vide >>> CATEGORIE
                    Set OD = Worksheets(TV(I, 12)) '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, "U").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
        
'Thierry add
    Next x 'prochain Onglet
'-----------

Application.ScreenUpdating = True 'affiche les rafraîchissements d'écran
End Sub


Bonne découverte
@+Thierry
 

Discussions similaires

Statistiques des forums

Discussions
312 104
Messages
2 085 347
Membres
102 868
dernier inscrit
JJV