Autres VBA - Copier valeur cellule variable dans autre feuille sous condition Excel 2007

claivier_58

XLDnaute Nouveau
Bonjour
Etant novice en VBA, je recherche une solution en VBA pour le fichier joint à ce message Essai_V1.xlsm. Via une autre discussion sur Excel Downloads, un module en VBA que vous trouverez sous le module 1 de Visual Basic a déjà été fait !

Chaque feuille a été programmée avec des mises en forme conditionnelle pour que les cellules de chaque ligne (De la conne B jusqu'à la colonne P) changent de couleur en fonction de certaines conditions (Voir exemple dans l'onglet "Phoenix_Mécano" et vous appuyant sur la légende des couleurs disponibles sur chaque onglet).

On peut créer autant de feuilles que nécessaire ; dans l'exemple, on a en tout 10 feuilles dont une est pré-remplie (onglet "Phoenix_Mécano") mais on peut en avoir plus ou moins ... selon les besoins de l'utilisateur.

Rem. : Je pense qu'il faudra faire un compteur et donc compter les feuilles une fois que tous les distributeurs seront créés par l'utilisateur.

Rem. : Les cellules des colonnes B, D, F, M, N sont au format texte ; les cellules des colonnes C, E, sont soit au format texte soit au format numérique (je les ai mises en standard ne sachant pas comment faire) ; les cellules de la colonne G sont au format nombre (sans virgule ... nombre entier) ; les cellules des colonnes H et I sont au format monétaire ; les cellules des colonnes J, K et P sont au format date ; les cellules des colonnes L et O sont au format texte en cliquant sur le menu déroulant (type liste) disponible dans chaque cellule de ces 2 colonnes.]

Ce que je voudrais, c'est qu'en cliquant sur le bouton (associé au module 1) "Créer liste des Distributeurs" disponible dans l'onglet "RECAPITULATIF" :

1 - Tous les onglets se rangent automatiquement par orbre alphabétique ; ce qui se fait quand on clique 1 fois sur le bouton "Créer liste des Distributeurs". Mais il faut appuyer une seconde fois sur ce bouton pour que le classement se fasse correctement dans le tableau de l'onglet "RECAPITULATIF". Peut-on le faire en une seule fois ? Il faut qu'on garde en 1ère position l'onglet "RECAPITULATIF".

2 - De plus, je voudrais recopier automatiquement le nom de chaque ONGLET créé par l'utilisateur du fichier et existant au moment de la création du RECAPITULATIF à partir de la cellule A5 dans l'onglet "RECAPITULATIF" et recopier en A6, A7, ... etc etc les noms des autres onglets rangés alphabétiquement. [Rem. : on peut créer 15, 20 ou 25 distributeurs avec des noms différents ... voire plus ou moins!] ; le tout sans enlever la dernière qui doit bouger en fonction du nombre d'onglet utilisé. Donc il fait que le tableau déjà formé dans l'onglet "RECAPITULATIF", s'adapte automatiquement au nombre d'onglet utilisé en partant de la ligne 5 et en gardant la dernière ligne qui elle va forcément bouger.

3 - Toujours dans l'onglet "RECAPITULATIF", je voudrais recopier automatiquement la valeur du total cumulé (H.T.) de chaque onglet dans la colonne B (valeur de la cellule dont la somme totale hors taxe de chaque ligne) en partant de B5. Le problème est que sur chaque onglet le total cumulé H.T (€) peut changer de position dans la colonne I en fonction du nombre de lignes utilisé.

Voilà pour le moment, si vous pouvez me donner la solution ça me gagnerait un temps précieux.

Par avance, merci beaucoup pour votre aide.

Cordialement

Cyril
 

Pièces jointes

  • Essai_V1.xlsm
    69.7 KB · Affichages: 3
  • Essai_V1.xlsm
    69.7 KB · Affichages: 1

_Thierry

XLDnaute Barbatruc
Bonsoir Cyril
Pas la peine de poster dans tous les sens la même question sur le forum, ca ne sert à rien, mis à part que tu risques du coup ne pas avoir de réponse.

Pour le point 1) c'est simple il faut dépalcer le bloc qui s'occupe de trier ton onglet Récapitulatif en fin de code comme suit :

VB:
Sub Nom_Distributeur()
'Supprimer les feuilles dont le contenu est vide
Dim ws As Worksheet
    Application.ScreenUpdating = False
    For Each ws In ActiveWorkbook.Worksheets
        If ws.UsedRange.Cells.Address = "$A$1" And _
           IsEmpty(ws.Range("A1")) And ws.Shapes.Count = 0 Then
            Application.DisplayAlerts = False
            If ActiveWorkbook.Worksheets.Count > 1 Then ws.Delete
            Application.DisplayAlerts = True
        End If
    Next ws
    Application.ScreenUpdating = True
'Sub TriOnglets()
Application.ScreenUpdating = False
Dim ShCount As Integer, i As Integer, j As Integer
ShCount = Sheets.Count
For i = 1 To ShCount - 1
If Sheets(i).Visible Then
    For j = i + 1 To ShCount
        If UCase(Sheets(j).Name) < UCase(Sheets(i).Name) Then
            Sheets(j).Move Before:=Sheets(i)
        End If
    Next j
    End If
Next i
Sheets("RECAPITULATIF").Move Before:=Sheets(1)
'Creer la liste des onglets à partir de A5 sur la feuille en question
Dim k As Integer
    Range("A5").Select
    For k = 2 To Sheets.Count
        ActiveCell.Value = Sheets(k).Name
        ActiveCell.Offset(1, 0).Select
    Next k

End Sub


Pour le reste, comme je n'aurai pas du tout conçu le code comme ça, je ne préfère pas trafiquer plus la dedans... Je repartirai à zéro, mais là je suis naze.

Bien à toi, à vous
@+Thierry
 

claivier_58

XLDnaute Nouveau
Bonsoir Thierry,

Merci pour ta réponse. Excuses pour la double discussion mais je ne savais si c'était bien posté et mis au bon endroit quant à la première ..... donc so sorry !!!

J'attends donc ton retour dès que tu pourras réaliser le code en entier à ta façon .... car moi je suis novice dans le domaine ...... j'apprends mais tout doucement !

Bien à toi aussi ainsi qu'à tes proches en ces temps difficiles,

@ très vite

Cyril.
 

Discussions similaires

Haut Bas