Problème avec ordre des macros multiples

Bonjour à tous!

Travaillant toujours sur ma base de données client (j'y arrive gentiment mais surement...), j'ai un problème avec mes macro:

En effet, j'ai créer un bouton qui me reprend 3 macros:

1. nom de feuille

2. reprise des intitulés des onglets

3. test: qui reprend les diverses données dont j'ai besoin dans ma page de récapitulation

J'avais donc crée la macro suivante:

Private Sub CommandButton1_Click()

Noms_Feuilles

Onglets

test

End Sub.

Les macros s'exécutent mais le soucis c'est que la macro "onglets" qui ne devrait me mettre à jour que la liste des onglets dans mon récapitulatif, m'insère également la liste des onglets dans la dernière feuille crée.

J'ai donc fait plusieurs test, et j'ai remarqué que si je met "onglets" avant "Noms_feuilles" ça ne le fait pas. Mais le soucis c'est que du coup, la liste des onglets ne se met plus à jour....

Je ne sais donc pas comment faire!!!

Je débute avec les macros, et je suis vraiment perdue...

J'ai autre petit soucis. Lorsque j'exécute les macros, j'arrive toujours en dernière feuille, mais idéalement je souhaiterais rester dans le récapitulatif.

Voici le lien vers le fichier pour plus de compréhension:

https://www.excel-pratique.com/~files/doc2/Copie_de_cijUKLVNH2.zip

Si quelqu'un à une idée, je suis preneuse!

Merci d'avance pour votre aide!!!

Bonjour,

Ton fichier est au format 2007 et non lisible pour les versions précédentes. Peux-tu le replacer en version excel inférieur (extension .xls)

Amicalement

Dan

Bonjour,

Je débute avec les macros...

Hum...il y a des codes qui ne sont pas de débutants là.. notamment un venant de Veriti.

Ton fichier vient d'où effectivement ?

Sinon voici les modifications à apporter.

Rempalce les 3 macros Noms_feuilles, Onglets et Nouveau par celles ci-après

Sub Noms_Feuilles()
'Macro Dan modifiée pour Silvia le 13/08/09
'http://forum.excel-pratique.com/viewtopic.php?t=12800
Dim sh As Worksheet
For Each sh In Sheets
If sh.Range("B4") <> "" Then
sh.Range("B4") = sh.Name
End If
Next sh
End Sub
Sub Onglets()
'Macro Dan modifiée pour Silvia le 13/08/09
'http://forum.excel-pratique.com/viewtopic.php?t=12800
Dim I As Byte
For I = 1 To ThisWorkbook.Sheets.Count
If Sheets(I).Name <> "Récapitulatif" Then
Sheets("Récapitulatif").Hyperlinks.Add Anchor:=Cells(I + 3, 1), Address:="", _
    SubAddress:="'" & Sheets(I).Name, TextToDisplay:=Sheets(I).Name
End If
Next
End Sub
Sub nouveau()
'Macro Dan pour Silvia le 13/08/09
'http://forum.excel-pratique.com/viewtopic.php?t=12800
Sheets("modèle").Copy After:=Sheets(Sheets.Count)
End Sub

Fais un essai et dis nous.

Il y a d'autres macros dans ce fichier dont je ne vois pas l'utilité. Tu pourrais les supprimer.

Amicalement

Dan

PS : Si ton pb est terminé, n'ounlie pas de mettre RESOLU sur le fil. explications par ici --> https://forum.excel-pratique.com/viewtopic.php?t=13

Merci de ta participation.

Le fichier est le mien, mais j'ai fait des heures de recherche sur internet et des heures de test aussi!!! Mais surtout grâce à quelques internautes j'ai enfin réussi à mettre en place le fichier client!

Mais c'est vrai que du coup le fichier a besoin d'un grand nettoyage!

il faut aussi que je tente de comprendre pourquoi ça ne marchait pas avant!!

Merci pour ton aide!!!

silvia

Merci pour les codes!

J'ai fait un peu de nettoyage aussi...

Petit soucis quand même avec le noms des feuilles:

en effet si je met ton code ça me donne l'inverse de se que je voulais. (c'est à dire que le nom de la feuille vient s'insérer dans la cellule pour le nom du client).

Mais à part ça en ayant modifié les codes, ça bug toujours lorsque je les combine. (alors que si je les fait séparément ça joue...)

merci!!!

Silvia

re,

J'ai vu un petit bug dans ce que je t'ai proposé donc modifie ta macro Onglets comme suit

Sub Onglets()
'Macro Dan pour Silvia le 13/08/09
'http://forum.excel-pratique.com/viewtopic.php?t=12800
Dim I As Byte
For I = 1 To ThisWorkbook.Sheets.Count
If Sheets(I).Name <> "Récapitulatif" Then
Sheets("Récapitulatif").Hyperlinks.Add Anchor:=Cells(I + 3, 1), Address:="", _
    SubAddress:="'" & Sheets(I).Name & "'" & "!B4", TextToDisplay:=Sheets(I).Name
End If
Next
End Sub

en effet si je met ton code ça me donne l'inverse de se que je voulais. (c'est à dire que le nom de la feuille vient s'insérer dans la cellule pour le nom du client).

Le code te donne dans la feuille Récapitulatif, les noms des feuilles telles qu'elles sont positionnées dans ton fichier.Tu peux expliquer ??

A te relire

Dan

J'ai fais le changement et ça joue. Merci!!! par contre toujours le soucis avec le bouton.. je vois vraiment pas pourquoi ça marche pas...

Par contre, c'est vrai que les noms viennent dans l'ordre où elles sont insérées.

Expliquer je peux pas... mais par contre c'est sur ma liste des macros à trouver!!!:

1. Mettre les fichiers automatiquement par ordre alphabétique

2. Font de cellule et nom du client en rouge si cours restant inférieur ou égal à 2

3. Mettre en place menu déroulant pour recherche simplifiée

4. Mettre en place bouton de séléction pour publipostage ou alors séléction automatique des clients en rouge.

5. Et lorsque j'aurais compris un peu plus les macros, Essayer de faire un userform qui permettrait d'entrer le noms et la date sans devoir entrer à chaque fois dans les feuilles.

Alors voilà encore de nombreuses heures de travail... Mais à ce stade je pense que je peux utiliser le fichier pour la rentrée, les améliorations viendront plus tard...

Merci pour tout!!

silvia

Re,

par contre toujours le soucis avec le bouton..

Quel bouton et surtout quel souci ??

Explique ce tu veux exactement au final. on verra mieux le pb.

1. Mettre les fichiers automatiquement par ordre alphabétique

Quels fichiers ?

2. Font de cellule et nom du client en rouge si cours restant inférieur ou égal à 2

Le nom du client se trouve où ?

A te relire

Dan

Rebonjour,

Pour le bouton : je souhaiterais qu'en cliquant dessus cela exécute plusieurs macros (noms_feuilles, onglets, test) pour que la feuille récapitulative se mette à jour.

pour l'odre alphabétique, c'était surtout pour que les onglets soit par ordre alphabétique. (et non les fichiers... désolé).

Pour le nom du client, c'est le nom de l'onglet (repris dans la colonne A), pour l'instant j'ai seulement mis A, B, C... Ce que je souhaiterais faire c'est que si une des abonnements arrive à 2 ou moins la cellule de l'abonnement se mette en rouge et aussi la cellule où il y a le nom. (par exemple:

Si D6 ou G6 ou J6 est égal ou inférieur à 2, alors la cellule qui est inférieur à 2 se colore en rouge mais également la cellule A6.

(pas sûre que se soit très clair...)

Merci

Silvia

Re,

Pour le bouton : je souhaiterais qu'en cliquant dessus cela exécute plusieurs macros (noms_feuilles, onglets, test) pour que la feuille récapitulative se mette à jour.

C'est que le bouton "mise à jour abo" fait non ? Je n'ai pas pb à ce sujet dans le fichier que tu as posté. Vois si le lien de ton bouton CommandButton1_Click() est toujours bien lié avec cette macro.

onglets soit par ordre alphabétique

Utilise la macro ci-dessous

Sub TrierFeuilles()
Dim WS As Worksheet
Dim I As Byte
Application.ScreenUpdating = False
For Each WS In ActiveWorkbook.Sheets
For I = 2 To ActiveWorkbook.Sheets.Count
If Sheets(I - 1).Name > Sheets(I).Name Then
Sheets(I - 1).Move After:=Sheets(I)
End If
Next
Next
End Sub

..la cellule de l'abonnement se mette en rouge et aussi la cellule où il y a le nom...

Cela doit se faire via le bouton "mise à jour abo" ?

Est-ce toi qui entre le chiffre en colonnes D, G et J ?

Attention à tes boutons qui sont dessinés par la boite outils de controles plutot que via la barre d'outils Formulaire. Ce n'est pas grave si ton fichier fonctionne uniquement sous windows mais sache que si ton fichier doit être porté sur un ordinateur MAC, cela ne fonctionnera pas.

A te relire

Dan

Pour le bouton "mise à jour abo", ça fonctionne bien mais le soucis c'est que si on va sur le dernier onglet crée ça liste aussi les onglets. J'ai donc la mise à jour de la liste sur la feuille "Récapitulatif" mais aussi sur le dernier onglet crée, ce qui me modifie ma feuille...

Pour la couleur, idéalement j'aurais voulu que cela se fasse automatiquement mais sinon, je me disais que vu que la mise à jour des chiffres pour les abonnements se fait via le bouton, autant le faire en même temps.

Les chiffres en colonnes D, G et J se font par la macro "test".

Merci!

Silvia

re,

si on va sur le dernier onglet crée ça liste aussi les onglets. J'ai donc la mise à jour de la liste sur la feuille "Récapitulatif" mais aussi sur le dernier onglet crée, ce qui me modifie ma feuille... 

Je ne vois pas comment tu fais pour aller sur la dernière feuille puisque ton bouton est sur la feuille Récapitulatif. Seul souci, c'est si tu actualises tes liens par la macro Onglets seule en étant sur une autre feuille.

Pour te prémunir, mets l'instruction ci-dessous dans la macro onglets juste après DIM I AS BYTE

Sheets("Récapitulatif").Activate

Je reviens pour le reste

Amicalement

Dan

edit Dan :

Pour les couleurs en feuille Récapitualif, essaie ce code :

Sub couleur()
'Macro Dan pour Silvia le 13/08/09
'http://forum.excel-pratique.com/viewtopic.php?t=12800
Dim cel As Range
Application.ScreenUpdating = False
Sheets("Récapitulatif").Activate
For Each cel In Sheets("Récapitulatif").Range("A6:A" & Range("A65536").End(xlUp).Row)
With cel
.Offset(0, 2) = Sheets(cel.Value).Range("L13")
.Offset(0, 3) = Sheets(cel.Value).Range("M13")
    If .Offset(0, 3) <= 2 Then
    Union(.Offset(0, 0), .Offset(0, 3)).Interior.ColorIndex = 3
    Else: .Offset(0, 3).Interior.ColorIndex = 0
    End If
.Offset(0, 5) = Sheets(cel.Value).Range("L28")
.Offset(0, 6) = Sheets(cel.Value).Range("M28")
    If .Offset(0, 6) <= 2 Then
    Union(.Offset(0, 0), .Offset(0, 6)).Interior.ColorIndex = 3
    ElseIf .Offset(0, 3).Interior.ColorIndex = 3 Then
    .Offset(0, 6).Interior.ColorIndex = 0
    Else: Union(.Offset(0, 0), .Offset(0, 6)).Interior.ColorIndex = 0
    End If
.Offset(0, 8) = Sheets(cel.Value).Range("L43")
.Offset(0, 9) = Sheets(cel.Value).Range("M43")
    If .Offset(0, 9) <= 2 Then
    Union(.Offset(0, 0), .Offset(0, 9)).Interior.ColorIndex = 3
    ElseIf .Offset(0, 3).Interior.ColorIndex = 3 Or .Offset(0, 6).Interior.ColorIndex = 3 Then
    .Offset(0, 9).Interior.ColorIndex = 0
    Else: Union(.Offset(0, 0), .Offset(0, 9)).Interior.ColorIndex = 0
    End If
End With
Next cel
End Sub

Amicalement

Dan

Hello¨

Pour les cases en couleur c'est nickel, exactement ce que je voulais!!!! J'avais trouvé un code mais avec des union... et c'était un peu la pagaille:

Sub Color()

Dim Cell As Range

For Each Cell In Union(Range(Range("D6"), Range("D65000").End(xlUp)), Range(Range("G6"), Range("G65000").End(xlUp)), Range(Range("J6"), Range("J65000").End(xlUp)))

Select Case Cell.Value

Case Is <= "2"

Cell.Interior.ColorIndex = 3

Case Is > "2"

Cell.Interior.ColorIndex = xlNone

End Select

Next

End Sub

Par contre, je viens me rendre compte que tout ce qui est à 0 vient en rouge alors qu'il se peut que certains clients n'ai pas d'abonnement pour une des catégories d'activité... Faut que je réfléchisse à une solution mais c'est pour plus tard!

Par contre j'ai un petit soucis avec le tri des onglets, donc le tri fonctionne bien mais il prend également en compte le récapitulatif et le modèle: est-il possible de toujours les laisser devant et d'ensuite mettre le reste par odre alphabétique.

merci!!!

Silvia

re,

je viens me rendre compte que tout ce qui est à 0 vient en rouge

Si tu veux que cela reste blanc, on peut adapter le code.

récapitulatif et le modèle: est-il possible de toujours les laisser devant

Oui, dans le code, FOR I = 2, remplace 2 par 4

Amicalement

Dan

Edit Dan :

Pour les couleurs à valeur 0, Dans la macro couleur, remplace l'instruction

If .Offset(0, 3) <= 2 then

par

If .Offset(0, 3) <= 2 And .Offset(0, 3) > 0 Then

Idem pour les valeurs 6 et 9 plus bas

Dan

Si tu veux que cela reste blanc, on peut adapter le code.

pas forcément car du coup les abonnements arrivé à terme seront en blanc et du coup pas visible; je réflichi à une solution du style: reprise de la valeur dans le récap seulement si l'abo a été activé sur la fiche client.

Oui, dans le code, FOR I = 2, remplace 2 par 4

j'ai remplacé par 4 mais ça marchait pas donc testé (vu que je sais pas à quoi ça correspond) et remplacé par 3 et ça joue.

merci et A+

Silvia

Rechercher des sujets similaires à "probleme ordre macros multiples"