XL 2019 Duplication de données via module ou macro excel

Malika27

XLDnaute Nouveau
Bonjour à toutes et tous :)

J'essaie d'automatiser mon fichier excel mais je ne suis pas très à l'aise avec l'environnement requête vba ou module.
J'ai deux onglets dans mon fichiers avec des informations redondantes. Je cherche à créer une requête qui puisse "scanner" les informations figurants dans un onglet pour les coller dans le second. J'ai créé des fonctions qui ne sont pas pérennes aussi si vous pouviez m'aider car malgré les tutos et autres je peine.
J'ai aussi tenté d'ajouter des sous-totaux dans mes tableaux (semestriel, annuel) ----> onglet : Liste_locataire en vains si vous avez une idée cela me serait très utile.

Merci mille fois de votre aide :)

 

Pièces jointes

  • Tableau-Pilotage-Biens.xls.xlsm
    29.4 KB · Affichages: 6
Dernière édition:

Staple1600

XLDnaute Barbatruc
Bonjour Malika,

Il faut apprendre à lire le Staple
Si Staple met des émoticônes c'est qu'il est en mode "humour"

Quand à G..gle, c'est simplement que j'ai une marotte
Inciter, inviter le demandeur à mettre la main dans le cambouis pour résoudre sa question avec l'aide du forum et autres ressources du net.

[cartouche humoristique]
Quant à ton pseudo, et puisqu'on vit dans la même société moderne, qui me dit que derrière Malika, ne se trouve pas un Roger ou un Jean-Philippe ou pire un Hugues-André-Marie ? ;)
[/cartouche humoristique]

PS: Je ne suis jamais offensé quand on cause Excel ;)

J'attends toujours mes questions sur mon code.
(Chinois, ca me donne des idées pour ce midi)
 

Malika27

XLDnaute Nouveau
Bonjour Malika,

Il faut apprendre à lire le Staple
Si Staple met des émoticônes c'est qu'il est en mode "humour"

Quand à G..gle, c'est simplement que j'ai une marotte
Inciter, inviter le demandeur à mettre la main dans le cambouis pour résoudre sa question avec l'aide du forum et autres ressources du net.

[cartouche humoristique]
Quant à ton pseudo, et puisqu'on vit dans la même société moderne, qui me dit que derrière Malika, ne se trouve pas un Roger ou un Jean-Philippe ou pire un Hugues-André-Marie ? ;)
[/cartouche humoristique]

PS: Je ne suis jamais offensé quand on cause Excel ;)

J'attends toujours mes questions sur mon code.
(Chinois, ca me donne des idées pour ce midi)
Bonjour @Staple1600 est très compliqué pour les néophytes dont je suis :(

Ton code est peut être très simple pour toi pour moi c'est un peu complexe;)

En effet, il fait semble t il appel à une liste d'objet vide --> que dois-je faire créer la liste, si oui comment ? si non faut-il la déclarer au quel cas s'agit il de la feuille "bien"?

"For I = 2 To lo.DataBodyRange.Rows.Count + 1" --> Faut-il déterminer les coordonnées du tableau à copier ? A quel endroit ? Actuellement, seuls des feuilles vides sont créées et renommées grâce à la fonction :

"Sheets.Add.Name = UCase(Split(lo.ListColumns(9).Range(I, 1).Value2)(1))" si j'ai bien compris. Cette fonction reprend dans la colonne 9 du tableau le nom situé au deuxième rang (1=titre ; 2=nom ; 3=prénom)

Un "petit" et c'est peu dire "éclaircissement" s'impose à mon trop grand savoir :oops:

Merci par avance

ps : Hugues-André-Marie je trouve ça plutôt original
;)
 

Staple1600

XLDnaute Barbatruc
Bonsoir Malika

Tu parles de cette macro?
Si oui, voici la version avec commentaire
VB:
Sub creation_onglets()
'Déclarations des variables
Dim lo As ListObject, i&
Application.ScreenUpdating = False ' on fige l'écran
Set lo = Feuil5.ListObjects("Biens") " on définit le ListObject
'en prenant le codename de la feuille ici Feuil5
' on boucle sur les lignes du tableau
For i = 2 To lo.DataBodyRange.Rows.Count + 1
'on se base sur le contenu de la colonne 9 du tableau
'pour récupérer les noms des locataires (on les passe en majuscule)
Sheets.Add.Name = UCase(Split(lo.ListColumns(9).Range(i, 1).Value2)(1))
'on ne garde qu'une partie du nom pour nommer les feuilles créées
Next
End Sub
Si tu as d'autres questions, n'hésites pas.

mais je redis ce que j'ai déjà dit, puisque tu débutes en VBA, le plus aisé pour toi se serait de d'abord tester et approfondir la piste des TCD.
 

Phil69970

XLDnaute Barbatruc
Bonjour à tous

Hugues ça fait un peu sioux ! Non
Et je veux bien des sioux 🤣🤣🤣🤣
Ok je sors.jpg

@Phil69970
 

Staple1600

XLDnaute Barbatruc
Re

Est-ce que ce petit exemple te permets de mieux comprendre comme je construit le nom des feuilles?
VB:
Sub Explications_Split()
Dim vArray, vStrings$
vStrings = "Malika 27 Excel 2010 Staple 1600"
vArray = Split(vStrings)
For i = LBound(vArray) To UBound(vArray)
MsgBox vArray(i), vbInformation, "élement: " & i
Next
MsgBox "Fin test 1"
MsgBox UCase(vArray(0))
MsgBox UCase(Split(vStrings)(0))
MsgBox "Fin test 2"
End Sub
 

Malika27

XLDnaute Nouveau
Bonsoir Malika

Tu parles de cette macro?
Si oui, voici la version avec commentaire
VB:
Sub creation_onglets()
'Déclarations des variables
Dim lo As ListObject, i&
Application.ScreenUpdating = False ' on fige l'écran
Set lo = Feuil5.ListObjects("Biens") " on définit le ListObject
'en prenant le codename de la feuille ici Feuil5
' on boucle sur les lignes du tableau
For i = 2 To lo.DataBodyRange.Rows.Count + 1
'on se base sur le contenu de la colonne 9 du tableau
'pour récupérer les noms des locataires (on les passe en majuscule)
Sheets.Add.Name = UCase(Split(lo.ListColumns(9).Range(i, 1).Value2)(1))
'on ne garde qu'une partie du nom pour nommer les feuilles créées
Next
End Sub
Si tu as d'autres questions, n'hésites pas.

mais je redis ce que j'ai déjà dit, puisque tu débutes en VBA, le plus aisé pour toi se serait de d'abord tester et approfondir la piste des TCD.

Merci @Staple1600 j'ai bien compris pour le code avec tes précisions c'est beaucoup plus clair.

Je suis parvenue à créer cette macro en "pas à pas" c'est très basic, mais c'est au moins un début. Peux tu m'aider à l'améliorer. Le TCD ne me permettent pas d'alimenter mes tableaux de suivi mensuel MAIS si tu as une idée qui pourrait me permettre d'auto alimenter mes tableaux locataires chaque mois en TCD je prends.

je joins le fichier c'est plus simple
 

Pièces jointes

  • Tableau-Pilotage-Biens.xls.xlsm
    65.7 KB · Affichages: 2

Staple1600

XLDnaute Barbatruc
Bonjour

Observations du matin
1) L'usage c'est toujours faire commencer ses tableaux, sur la 1ère ligne d'une feuille
2) Tu parles de suivi par période (mensuel, trimestriel etc...)
Or il n'y a aucune date dans ton fichier
Donc on ne pas tester cet aspect des choses
3) Bien sûr que si que les TCD permettent de faire des tableaux de suivi mensuels
(il suffit que la base de donnée soit faite pour ce faire)

Donc prends le temps de réaliser un fichier exemple contenant toutes données permettant de faire tous les tests.

Concernant ta macro, elle fleure bon l'enregistreur de macros.
C'est le bon premier réflexe pour appréhender VBA
Ensuite il faut apprendre à élaguer le code obtenu
Exemple
Ceci
VB:
Columns("A:A").EntireColumn.AutoFit
Columns("B:B").EntireColumn.AutoFit
Columns("C:C").EntireColumn.AutoFit
Columns("D:D").EntireColumn.AutoFit
Columns("E:E").EntireColumn.AutoFit
Columns("F:F").EntireColumn.AutoFit
Columns("G:G").EntireColumn.AutoFit
Columns("H:H").EntireColumn.AutoFit
peut se réduire à
Range("A:H").Columns.AutoFit
 

Malika27

XLDnaute Nouveau
Re

Voici une de mes façons de voir les choses
(no VBA inside - only TCD)
Regarde la pièce jointe 1135184

NB: je ne joins pas de fichier Excel
Charge au demandeur de se retrousser les manches ;)
(Les vertus et bienfaits du DIY sont reconnus par l'OMS ;))

hello @Staple1600
Je suis tout à fait d'accord avec toi il faut se retrousser les manches, c'est de cette façon que l'on progresse à qui veut apprendre.
ps : c'est quoi DIY ? :(:)
Après avoir vu tes modèles je pense qu'effectivement avec les TCD il est possible de faire des trucs intéressants😅 je vais donc revoir ma copie.
Toutefois je ne comprends pas pourquoi :
a- la fx recherche marche une fois sur deux (voir fichier joins)
--> j'ai testé avec la fx RECHERCHEV mais elle ne m'affiche rien du coup je me suis rabattue sur "RECHERCHE" ai-je loupé une étape ?
b- le rafraîchissement ne se fait pas en auto (pas la boisson 🥳) y a t il une étape que j'ai loupé ?

Merci pour ton aide :)
 

Malika27

XLDnaute Nouveau
Re

1) DIY => Do it your self
Z'êtes pas tendance, Mme Malika ;)

2) Je ne vois pas de fichier joint.

3) Pour actualiser, soit tu DIY (en cliquant sur Actualiser tout=
soit une petite macro fera l'affaire.
:rolleyes: oki oki pas tendance mais j'apprends vite sir @Staple1600 😉

je te renvoie le fichier excel, pour l'actualiser je suis obligée de rentrée dans la cellule pour valider la commande :eek:. J'ai trouvé cette requête que j'ai adapté mais pas vu d'amélioration. Qu'en penses tu ?

Sub ActuTab()

' Actualisation requêtes

ActiveWorkbook.Connections("Requête*-*Decompte_Loc").Refresh
ActiveWorkbook.Connections("Requête*-*Biens").Refresh

' ActualisationTCD Macro

ActiveWorkbook.Worksheets("Feuil5").PivotTables("Biens").PivotCache.Refresh
ActiveWorkbook.Worksheets("Feuil20").PivotTables("Decompte_Loc").PivotCache.Refresh


End Sub

Merci encore 🙂
 

Pièces jointes

  • Tableau-Pilotage-Biens-1.xlsm
    411.7 KB · Affichages: 3

Staple1600

XLDnaute Barbatruc
Re

J'avais oublié
Dans les options du TCD, tu peux cocher
Onglet Données
[x] Actualiser les données lors de l'ouverture du fichier

Et par VBA pour rafraichir tous les TCD d'un classeur (à tester)
A mettre dans ThisWorkbook
VB:
Private Sub Workbook_Open()
Me.RefreshAll
End Sub

Sinon associé à un bouton
VB:
Sub Actu_TDC()
ThisWorkbook.RefreshAll
End Sub
 

Statistiques des forums

Discussions
312 166
Messages
2 085 885
Membres
103 018
dernier inscrit
mohcen23