Boucle en fonction valeur de plusieurs cellule en fonction d'une arborescen Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
l
laseck
Jeune membre
Jeune membre
Messages : 15
Inscrit le : 27 décembre 2017
Version d'Excel : 2013

Message par laseck » 23 décembre 2019, 11:06

Bonjour à tous,

J'ai besoin d'aide pour créer une boucle.
Très simplement, je souhaite dupliquer des tableaux de bord en fonction d'une arborescence.
J'ai déjà une macro pour création d'onglets automatiques.
Mes onglets se présentent sous le même format (onglet maquette). In fine j'aurai un onglet par agence.
Une agence contient plusieurs services et je souhaiterai que en cellule b90/b100/b110 .... avoir selon la table, les services qui se collent dans ces onglets en fonction de ma cellule B2.

Par exemple :

Onglet AG001 cellule B2= AG001
# Cellule B90 = Se001
# Cellule B100 = Se002
#Cellule B110 = Se003

Pouvez vous m'aider ... ?? merci
Tableau de bord ebauche.xlsx
(43.5 Kio) Téléchargé 4 fois
Avatar du membre
Yvouille
Passionné d'Excel
Passionné d'Excel
Messages : 9'017
Appréciations reçues : 77
Inscrit le : 6 avril 2007
Version d'Excel : 2016

Message par Yvouille » 23 décembre 2019, 13:30

Salut,

Sur la base de ton exemple, ma macro cherche vers le bas, depuis la cellule B5 de la feuille ''TABLE'', les données qui commencent pas ''Ag''. Si c'est le cas, elle cherche si cette feuille existe déjà (comme dans mon exemple, la feuille ''Ag001" existe). Si la feuille existe déjà, on passe plus loin, autrement une nouvelle feuille est créée et les trois premières données en-dessous du nom de l'agence (par exemple Info 1 à 3 pour l'agence ''Agrrrrr'') sont reportées dans les cellules B90, B100 et B110 de la feuille nouvellement créée.

Amicalement.
Tableau de bord_V1.xlsm
(49.51 Kio) Téléchargé 8 fois
Yvouille

Valais de Coeur
l
laseck
Jeune membre
Jeune membre
Messages : 15
Inscrit le : 27 décembre 2017
Version d'Excel : 2013

Message par laseck » 23 décembre 2019, 16:25

Re bonjour,

C'est franchement pas mal.
Je vais voir comment l'insérer au mieux dans mes lignes de code mais c'est une super base pour moi.

Merci Beaucoup !!!!!
Je reviens vers vous dès que j'ai avancé =)
l
laseck
Jeune membre
Jeune membre
Messages : 15
Inscrit le : 27 décembre 2017
Version d'Excel : 2013

Message par laseck » 27 décembre 2019, 09:03

Rebonjour,

J'ai bien testé et adapté le code à ma solution.
Parcontre j'ai une question concernant les boucles et les si ...

Je souhaite que lorsque dans la liste, si la cellule commence par AG, on recommence la procédure. En effet, pour l'instant j'ai bien une feuille par agence avec le numéro de l'agence en B2.
Je ne sais pas si il faut que je fasse une boucle ou si un IF THEN ELSE END IF suffirait ...
[
Sub Duplicata()
Dim i As Integer, j As Integer

Application.ScreenUpdating = False

For i = 6 To Range("M" & Rows.Count).End(xlUp).Row
    If Left(Range("M" & i), 2) = "AG" Then
        For j = 1 To Sheets.Count
            If Sheets(j).Name = Range("M" & i) Then
                GoTo Etiquette
            End If
        Next j
    Else
        GoTo Etiquette
    End If
    
    Sheets("Maquette").Copy after:=Sheets(Sheets.Count)
    With Sheets("Tables")
 
  
        ActiveSheet .Name = .Range("M" & i)
        ActiveSheet.Range("B2") = .Range("M" & i)
        ActiveSheet.Range("B85") = .Range("M" & i + 1)
        ActiveSheet.Range("B105") = .Range("M" & i + 2)
        ActiveSheet.Range("B125") = .Range("M" & i + 3)
        ActiveSheet.Range("B145") = .Range("M" & i + 4)
        ActiveSheet.Range("B165") = .Range("M" & i + 5)
        ActiveSheet.Range("B185") = .Range("M" & i + 6)

    End With
    
    Sheets("Tables").Activate
    
Etiquette:
    
Next i

End Sub
Pouvez vous m'aider?
Modifié en dernier par laseck le 27 décembre 2019, 09:06, modifié 1 fois.
l
laseck
Jeune membre
Jeune membre
Messages : 15
Inscrit le : 27 décembre 2017
Version d'Excel : 2013

Message par laseck » 27 décembre 2019, 09:04

.
Avatar du membre
Yvouille
Passionné d'Excel
Passionné d'Excel
Messages : 9'017
Appréciations reçues : 77
Inscrit le : 6 avril 2007
Version d'Excel : 2016

Message par Yvouille » 27 décembre 2019, 11:34

Sans avoir ton fichier réel - ou du moins une copie conforme - il est difficile de t'aider.

Dans le passage ci-dessous, tu affectes la valeur de la cellule M & i de la feuille ''Tables'' comme nom de la feuille active (celle qui vient d'être créée). Dans le fichier que tu m'as transmis, il n'y a rien dans la colonne M de la feuille ''Tables''. C'est impossible de savoir si tu fais une erreur ou si dans ton fichier réel il y a quelque chose dans cette colonne M.
    Sheets("Maquette").Copy after:=Sheets(Sheets.Count)
    With Sheets("Tables")
    
        ActiveSheet .Name = .Range("M" & i)
laseck a écrit :
27 décembre 2019, 09:03
Je souhaite que lorsque dans la liste, si la cellule commence par AG, on recommence la procédure. En effet, pour l'instant j'ai bien une feuille par agence avec le numéro de l'agence en B2.
Je ne comprends absolument pas ta demande ci-dessus. Quel serait le but de recommencer la procédure ? Selon moi ça ne fait pas sens, il faut probablement continuer ou adapter la procédure.

laseck a écrit :
27 décembre 2019, 09:03
.
Je ne sais pas si il faut que je fasse une boucle ou si un IF THEN ELSE END IF suffirait ...
Afin de réaliser quoi ?

Soit plus clair dans ce que tu souhaites réaliser et fournis-moi un fichier correct.

Amicalement.
Yvouille

Valais de Coeur
l
laseck
Jeune membre
Jeune membre
Messages : 15
Inscrit le : 27 décembre 2017
Version d'Excel : 2013

Message par laseck » 27 décembre 2019, 14:33

Désolé pour la clarté de mes explications.

Ci joint le fichier. https://www.cjoint.com/c/ILBnGDzqHcp
Lors de la création de mes ONGLETS (bouton de la macro dans la feuille liste ou macro duplicata), je voudrais que si dans ma liste j'arrive à une agence, passer à la crétion de la deuxième feuille.

Pour exemple:
Dans la feuille "F.AG0004" en cellule b145 j'ai l'AG0003 qui s'affiche. Hors, j'aimerais que lorsque je tombe sur une nouvelle AG mon code me crée la seconde feuille comme il le fait bien sans me saisir le reste de mon arborescence. En effet, je ne veux voir apparaître dans les onglets B85/105/125/145/165/185 que les services associés à mon agence. Si je n'ai que un service dans mon AG0004 je ne veux avoir que la valeur de mon service dans la cellule B85 de ma feuille.


Est ce que je suis plus explicite?

Merci de votre aide
Avatar du membre
Yvouille
Passionné d'Excel
Passionné d'Excel
Messages : 9'017
Appréciations reçues : 77
Inscrit le : 6 avril 2007
Version d'Excel : 2016

Message par Yvouille » 27 décembre 2019, 15:41

La solution dans le fichier ci-joint.

J'en profite pour te montrer qu'un fichier démo peut être allégé en supprimant toutes les feuilles inutiles à la démo et que peu d'exemples, mais représentatifs du problème, suffisent. Dans cet exemple précis, il n'y a ainsi pas besoin d'effacer 36 nouvelles feuilles créées afin de faire un prochain essai.

Je n'ai pas compris tes saisies dans la ligne 701 de la feuille Tables, dans les colonnes L à U.

Amicalement.
Fichier-anonyme_V1.xlsm
(199.25 Kio) Téléchargé 1 fois
Yvouille

Valais de Coeur
l
laseck
Jeune membre
Jeune membre
Messages : 15
Inscrit le : 27 décembre 2017
Version d'Excel : 2013

Message par laseck » 27 décembre 2019, 16:04

Ok je me note cela

Par contre j'ai bien compris mais je souhaite que cela se vérifie sur les autres activesheet.range.
Après avoir lancé la procédure sur la feuille F.AG0004 en cellule B145 je retrouve la données AG0003 hors je voudrais que cette cellule et les suivantes renvoient un vide. si je duplique la même métode à savoir :
If Left(.Range("M" & i + 2), 2) <> "AG" Then
            ActiveSheet.Range("B105") = .Range("M" & i + 2)
        Else
            GoTo Etiquette
        End If[code]
       
       sur:
       
        [code]ActiveSheet.Range("B125") = .Range("M" & i + 3)
        ActiveSheet.Range("B145") = .Range("M" & i + 4)
        ActiveSheet.Range("B165") = .Range("M" & i + 5)
        ActiveSheet.Range("B185") = .Range("M" & i + 6)
Est ce que cela va fonctionner? et est ce qu'il n'existe pas un procédé plus rapide en faisant une boucle ?

Désolé j'espère être le plus clair possible mais je débute.
Merci beaucoup de votre aide car pour l'instant ça me permet de bien avancer
Avatar du membre
Yvouille
Passionné d'Excel
Passionné d'Excel
Messages : 9'017
Appréciations reçues : 77
Inscrit le : 6 avril 2007
Version d'Excel : 2016

Message par Yvouille » 27 décembre 2019, 16:29

Fallait dire que tu voulais une boucle !

Non, plaisanterie mise à part, j'ai été un peu vite la première fois.

Je crois que c'est maintenant bon.

Amicalement.
Fichier-anonyme_V2.xlsm
(198.27 Kio) Téléchargé 1 fois
Yvouille

Valais de Coeur
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message