Autres VBA / Creation Tableau avec condition

akira21

XLDnaute Occasionnel
Bonjour,

J'ai un tableau dans Feuil1 qui m'affiche toutes mes actions dans l'ordre chronologique et suivant les différents lignes ( CPO, LG4, CBO, DWF )
J'aimerai récupérer ces infos est en faire un tableau en Feuil2 en classant par lignes ( CBO, LG4, CBO, DWWF ) mais aussi par jour et avec une condition en plus :

Si l'action est à la date du lundi mais qu'elle dépasse 13h00 alors mettre à la journée du mardi.
Si l'action est à la date du mardi mais qu'elle dépasse 13h00 alors mettre à la journée du mercredi.
Est ainsi de suite.

Cela dépasse mes compétences, donc si une âme charitable veut bien m'aider, ça serait top :)

Merci
 

Pièces jointes

  • Classeur2.xlsx
    14.4 KB · Affichages: 10

akira21

XLDnaute Occasionnel
Ok, donc les 15 row me suffiront !!!
Ce que je vais faire, c'est m'en servir de feuille tampon et copier ce tableau dans une autre feuille pour pouvoir bouger sa structure et ainsi supprimer les lignes vides pour avoir une meilleure impression sur feuille A4.
Pour ce qui est de copier la feuille du tableau vers une autre, c'est ok en VBA.
C'est pour la suppression de ligne que c'est compliqué !

Pour le LG4, j'avais corrigé :)
 

akira21

XLDnaute Occasionnel
Génial, tu es au top !

J'étais parti sur 2 macros !!

VB:
Sub Gestion_Copie()
ThisWorkbook.Worksheets("Feuill2").Cells.Copy ThisWorkbook.Worksheets("Feuil3").Cells
End Sub

VB:
Sub DelEmpty()
Dim iRow As Long
For iRow = ActiveSheet.UsedRange.Rows.Count To 1 Step -1
If Cells(iRow, "D").Value = "" And _
Cells(iRow, "G").Value = "" And _
Cells(iRow, "J").Value = "" And _
Cells(iRow, "M").Value = "" And _
Cells(iRow, "P").Value = "" Then
Rows(iRow).Delete
End If
Next iRow
End Sub

Donc si je comprends bien, tu appelles le private Sub TheHidder à la fin de ton 1er Sub Button1_Click
Et le fait de mettre private l'associe à ton module ?

Si c'est le cas, et que j'ai besoin d'associer d'autre démarche, c'est sur ce principe ?
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Re Re

Oui tu as bien compris, en fait "TheHidder" pourrait être un simple Sub, mais le fait de la mettre en Private, elle ne sera acessible que par des Macros contenues dans le même module.

Pour ton essai de DelEmpty, c'est pas mal aussi, disons que moi je passe par une string et je vérifie les 15 colonnes d'un coup, on se sait jamais.

J'avais tapé un long message explicatif mais le site a déconnecté pour maintenance et je l'ai perdu ! :cool:

Bien @toi
@+Thierry
 

akira21

XLDnaute Occasionnel
Re Thierry,

Je te remercie pour toute cette aide que tu m'a apporté, c'est très agréable et instructif de discuter avec toi :)
J'ai fini mon fichier et je le partage, ça peut sûrement intéresser qq'un !

Finalement, j'ai gardé la copie de la feuille car je ne serai pas le seul à utiliser le fichier donc je vais cacher la feuille source pour ne pas avoir de surprise si qq'un modifie sa structure sans faire exprès et laisser la copie apparente et modifiable !
J'ai mis la macro de suppression de ligne sur la feuille copie histoire de laisser le choix de le faire facilement ou non.

J'avais une macro pour supprimer les doublons, donc un bouton en plus. J'ai fait comme ton explication du dessus en intégrant cette macro en private sub histoire d'avoir un bouton en moins !
Idem pour la copie de feuille ! Donc 2 boutons en moins !!!!
Les autres je dois les garder.

J'ai juste un problème sur mes macros Gestion_CBO, CPO, etc.
Ca me prend le programme indiqué -1 mais ça fera l'affaire !

Encore un énorme merci pour ton aide, sans toi je n'y serai pas arriver et j'ai bcp appris :D
 

Pièces jointes

  • Feuille de route.xlsm
    116.8 KB · Affichages: 5

akira21

XLDnaute Occasionnel
Hello Thierry,

J'ai ajouté une colonne commentaire ( Oui des idées à la con me viennent comme ça !!! )

Capture.JPG


Cette colonne contient une formule.
J'ai modifié le clearcontents pour que ça n'efface pas les colonnes commentaire et donc la formule.
J'ai modifié le For c = 1 To 15 par 1 To 20 pour avoir le bon nombre de colonne.

Par contre, ça me créé un décalage :eek: , pas de problème si la cellule est vide.
J'image que cela se passe par là :

VB:
 For c = 1 To 20
        If MyDate = WSCible.Cells(6, c + 3) Then
            For x = 1 To 3
                If WSCible.Cells(7, c + 3) = WSSource.Cells(28, x + 3) Then
                     
                      If CellCible.Offset(0, c) = "" And CellCible.Offset(0, c + 1) = "" And CellCible.Offset(0, c + 2) = "" Then
                        CellCible.Offset(0, c) = CellSource.Offset(0, x)

Mais j'ai du mal à comprendre cette partie de code o_O
 

_Thierry

XLDnaute Barbatruc
Repose en paix
If CellCible.Offset(0, c) = "" And CellCible.Offset(0, c + 1) = "" And CellCible.Offset(0, c + 2) = "" Then
Oui ca vient de là !

Bonsoir @akira21

Oui les formules au beau milieux d'un tableau managé par VBA, ca ne va pas faire très bon ménage.
Il te faut tester maintenant sur un quatrième champs (Commentaires)

En plus = "" VBA ne comprendra pas car une formule n'égale pas ""... Il faut que tu ailles chercher sur "SpecialCells(xlCellTypeFormulas)" ou un truc comme ça, mais franchement tu te cherches vraiment des complications...
https://docs.microsoft.com/en-us/office/vba/api/excel.range.specialcells

Bon courage
@+Thierry
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonjour @akira21 , le Forum

Excellente idée ! Fais ta formule dans le Tableau Source en y adjoignant ta colonne !
Et laissons faire par VBA ce qui doit être fait par VBA sur le Tableau Cible !

Même par souci de clarté et de pérénité, on comprendra toujours mieux ce qui se passe aussi, plutôt qu'un somptueux mélange de Data en provenance de l'Algo de celles en provenance de Formules sur le tableau final...

Bien @Toi, @Vous
@+Thierry
 

Discussions similaires

Réponses
5
Affichages
343
Compte Supprimé 979
C

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 105
Messages
2 085 350
Membres
102 870
dernier inscrit
Armisa