Déplacement d’onglet vers la droite SI

WDAndCo

XLDnaute Impliqué
Bonjour le Forum

Je reviens vers vous car je bute de nouveau ! Car je voudrais déplacer l'onglet si :

If DE + MP + HD = 0 Then L'onglet prendre la place de l'onglet a sa droite.

Cela doit se fait dans la Macro qui suit. Afin d'avoir tous les onglets DE + MP + HD = 0 donc vert à droite avec a l’extrême droite le plus vieux. Tous cela est inclus dans cette Macro qui ce déclenche pour mettre à jour un onglet qui reprends certaines informations pressente sur d'autres onglets

D'avance merci.

Dominique

Code:
Private Sub Worksheet_Activate()

 Range("A2:J2").Select
    Selection.AutoFilter
     

With Worksheets("Points à Amortir")
     If .AutoFilter Is Nothing Then .Range("A2:J2").AutoFilter
         .Columns("A:H").Select
    ActiveWindow.Zoom = True
    .Range("I1").Select
End With

If Sheets(5).Name = Range("K1").Value Then Exit Sub
  
    [A2:I1000].ClearContents

Range("A2").Value = "N° du CR"
Range("B2").Value = "Dates"
Range("C2").Value = "Lieux"
Range("D2").Value = "N° Points"
Range("E2").Value = "Installations"
Range("F2").Value = "Points à Amortir"
Range("G2").Value = "Delais"
Range("H2").Value = "Moyen nécessaires ou Intéressés"

DL = 3 'DL = Derniere Ligne
    
    'For I = 5 To Sheets.Count 'Tous les onglets a partir du 5eme
    For I = Sheets.Count To 5 Step -1 'Tous les onglets de la fin au 5eme
    
    nf = Sheets(I).Name
    Sheets(I).Tab.ColorIndex = 4 'Vert
    With Sheets(I)
    DE = 0
    MP = 0
    HD = 0
      NL = .Range("L1").Value 'Nb de ligne sur l'onglet
       
    For L = 12 To NL + 11
    
If .Range("G" & L).Value <> "" And .Range("G" & L).Value <> Descision And .Range("H" & L).Value = "" And InStr(.Range("E" & L).Value, "Voie") = 0 Then
ActiveSheet.Hyperlinks.Add Anchor:=Cells(DL, 1), Address:="", SubAddress:="'" & _
         nf & "'" & "!H12", TextToDisplay:=nf
         
    
    
    ActiveSheet.Range("B" & DL).Value = .Range("C8").Value
    ActiveSheet.Range("D" & DL).Value = .Range("A" & L).Value
    ActiveSheet.Range("E" & DL).Value = .Range("C" & L).Value
    ActiveSheet.Range("F" & DL).Value = .Range("D" & L).Value
    ActiveSheet.Range("G" & DL).Value = .Range("G" & L).Value
    ActiveSheet.Range("H" & DL).Value = .Range("E" & L).Value
    
    If .Range("G" & L).Value = "D" Then DE = DE + 1 Else MP = MP + 1
    If MP > DE Then Couleur = 41 Else Couleur = 44 'Orange
      
    If .Range("B" & L).Value = "" Then ActiveSheet.Range("C" & DL).Value = .Range("B12").Value Else ActiveSheet.Range("C" & DL).Value = .Range("B" & L).Value
    Sheets(I).Tab.ColorIndex = Couleur
    
     If ActiveSheet.Range("J" & DL).Value < 0 Then HD = HD + 1
     
    DL = DL + 1
    
    End If
    
        Next L
        
    If HD > 0 Then Sheets(I).Tab.ColorIndex = 3 'Rouge
    
    End With
    
    'If DE + MP + HD = 0 Then L'onglet prendre la place de l'onglet a sa droite
    
Next I

    Range("A2:H2").Select
    Selection.AutoFilter
     Columns("A:H").Select
    ActiveWindow.Zoom = True
    'Range("I1").Value = DL
    Range("A1").Value = "RECAPITULATIF des " & DL - 3 & " points restant à Amortir des Visites EF 5A n°7"
 Range("K1").Value = Sheets(5).Name
    Range("I1").Select
End Sub
 

WDAndCo

XLDnaute Impliqué
Re : Déplacement d’onglet vers la droite SI

Bonjour le Forum et Staple1600

Ce classeur est trop gros pour être joint ! Et une copie fonctionnelle n'est pas possible.

J'ai trouvé cela : If DE + MP + HD = 0 Then Sheets(I).Move after:=Sheets(I + 1) mais pas très probant !

I = le Sheets inspecté dans une boucle Nombre de Sheets to 5 Step-1

Exemple : le nombre de Sheets = 14

Donc For I = 14 to 5 Step-1
If DE + MP + HD = 0 Then L'onglet prendre la place de l'onglet a sa droite
Next

Si nous sommes a I = 8 dans la boucle qui parcourt les onglets
Si la condition est remplis If DE + MP + HD = 0 Then L'onglet prendre la place de l'onglet a sa droite
Cet onglet doit prendre le numéro 8+1 soit 9 ou I+1
puis le Next
Le truc c'est que si deux onglets qui se suivent et qu'ils remplissent tous deux la condition il inversent, alors qu'ils ne devrais pas.

D'avance merci.
Dominique
 

Staple1600

XLDnaute Barbatruc
Re : Déplacement d’onglet vers la droite SI

Re

Et une copie fonctionnelle n'est pas possible.
Question de point de vue

Je prétends le contraire.
Une copie fonctionnelle est toujours possible.

Il suffit d'alléger où il faut et d’anonymiser quand il faut.

Mais c'est ta question, c'est toi qui voit comment optimiser ou pas les chances de réponses à celle-ci. ;)
 

Roland_M

XLDnaute Barbatruc
Re : Déplacement d’onglet vers la droite SI

bonjour

on ne comprend pas du tout !
quelle est la feuille qui devrait être à la droite de quelle feuille ?
c'est ça le problème !

Est-ce la feuille "Trappiste de Chimay" après la feuille "Super des Fagnes" ? ;)

je suis aussi du nord et j'habite pas loin de Chimay et je connais bien les deux !
perso je mettrais "Chimay(bleu)" en premier et "Super des Fagnes(blonde)" en second

bien que j'adore les deux ! :p
après c'est une histoire de goût !?
 
Dernière édition:

WDAndCo

XLDnaute Impliqué
Re : Déplacement d’onglet vers la droite SI

Bonjour le Forum et Roland_M

Voici deux copies d’écran avant et après traitement. Les onglets verts sont à placer à droite et si possible en conservant leurs ordre comme la deuxième capture.

Donc : If DE + MP + HD = 0 Then L'onglet doit prendre la place de l'onglet à sa droite sauf si l'onglet de droite est aussi égal DE + MP + HD = 0 ou en vert

D'avance merci

Et à votre bien bonne santé, et il en faut une sacrée !
Dominique
 

Pièces jointes

  • 2014-07-14_164453.jpg
    2014-07-14_164453.jpg
    16.8 KB · Affichages: 30
  • 2014-07-14_164636.jpg
    2014-07-14_164636.jpg
    17.7 KB · Affichages: 27

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Déplacement d’onglet vers la droite SI

Bonjour à tous,

La bière, je n'y résiste pas! J'ai donc commis un fichier 'illustré' (pas taper, Staple1600! :().

Je ne sais pas si j'ai bien compris la question (les images fournies par WDAndCo étant tellement floues qu'on n'y voit goutte - de bière bien entendu :eek:)

Voir le fichier joint. Les codes sont dans module1.
 

Pièces jointes

  • WDAndCo-Tous à droite v1.xls
    443.5 KB · Affichages: 33
Dernière édition:

WDAndCo

XLDnaute Impliqué
Re : Déplacement d’onglet vers la droite SI

Bonsoir le Forum et merci MaPomme

Peut on envisager de déclencher l'inversion avec la couleur (Vert) de l'onglet pour faire plus simple du genre :

Code:
For I = Sheets.Count To 5 Step -1 'Tous les onglets de la fin au 5eme
If Sheets(I).Tab.ColorIndex = 4 Then Sheets(I).Move After:=Sheets(Sheets.Count)
Next I

Votre avis !
 

WDAndCo

XLDnaute Impliqué
Re : Déplacement d’onglet vers la droite SI

Bonsoir le Forum

Alors pourquoi pas :

Code:
For I = Sheets.Count To 5 Step -1 'Tous les onglets de la fin au 5eme
If Sheets(I).Tab.ColorIndex = 4 Then Sheets(Sheets.Count).Move After:=Sheets(I)
Next I

Votre avis !
 

job75

XLDnaute Barbatruc
Re : Déplacement d’onglet vers la droite SI

Bonsoir à tous,

Code:
Sub ClasseFeuillesVertes()
Dim sc%, i%, n%
sc = Sheets.Count
i = 4
For n = 1 To sc - 4
  i = i + 1
  If Sheets(i).Tab.ColorIndex = 4 Then
    Sheets(i).Move After:=Sheets(sc)
    i = i - 1
  End If
Next
End Sub
Et bonne nuit.
 
Dernière édition:

WDAndCo

XLDnaute Impliqué
Re : Déplacement d’onglet vers la droite SI

Bonjour le Forum

Je reviens vers vous car dans le but de mieux faire :

J'ai cette formule : =Infos!F1&ANNEE(C8)&" - "&C8-DATE(ANNEE(C8);1;0) qui me donne cela "SM 2014 - 29" pour le 29 janvier mais je voudrais "SM 2014 - 029"

Et une fois cela fait le top serait de mettre un classement dans la sublime Macro de job75 ici dessus et cela juste pour les onglets vert car ces derniers deviennent vert une fois terminés donc pas forcement dans l’ordre.

D’avance merci et bonne journée.
Dominique
 

job75

XLDnaute Barbatruc
Re : Déplacement d’onglet vers la droite SI

Bonjour WDAndCo,

Pour la formule c'est simple :

Code:
=Infos!F1&ANNEE(C8)&" - "&TEXTE(C8-DATE(ANNEE(C8);1;0);"000")
Pour la macro :

Code:
Sub ClasseOngletsVerts()
Dim sc%, i%, j%
sc = Sheets.Count
Application.ScreenUpdating = False
For i = sc To 5 Step -1
  If Sheets(i).Tab.ColorIndex = 4 Then
    Sheets(i).Move After:=Sheets(sc)
    j = j + 1 'compte les onglets verts
  End If
Next
For i = sc - j + 1 To sc
  For j = i To sc
    If Sheets(j).Name < Sheets(i).Name Then
      Sheets(i).Move Before:=Sheets(j)
      Sheets(j).Move Before:=Sheets(i)
    End If
  Next
Next
End Sub
A+
 

Discussions similaires

Réponses
4
Affichages
204
Réponses
0
Affichages
143

Statistiques des forums

Discussions
312 161
Messages
2 085 853
Membres
103 005
dernier inscrit
gilles.hery