Copie automatique de feuilles à tableau


#1

Bonjour

Je travaille sur un fichier et j’ai absolument besoin de votre aide.
Ce fichier sera constitué de feuilles (une centaines) qui se présentent comme des imprimés individuels. Nous retrouvons des données comme le nom en B2 le prénom en B4 l’adresse en D3, des dates de RDV en F….… Toutes les fiches sont identiques. Les utilisateurs (collègues) trouvent la forme de l’imprimé plus facile à remplir et à visualiser les informations qu’un tableur.
Comme il s’agit de données par feuilles, je souhaitent tout de même rassembler certaines informations dans un seul tableau récapitulatif (ex nom, prénom, dates rdv….sur une même ligne)
J’ai une macro qui copie automatiquement le nom de chaque feuille dans la première colonne de mon tableau récapitulatif.
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual

i = 2

        For Each ws In Application.Worksheets
           If ws.Name <> "LISTING" And ws.Name <> "Fiche type" Then
                'Sheets("LISTING").Range("A" & i) = ws.Name
                 ActiveSheet.Hyperlinks.Add Anchor:=Range("A" & i), Address:="", SubAddress:= _
                "'" & ws.Name & "'!A1", TextToDisplay:=ws.Name
                i = i + 1
           End If
        Next ws

Application.Calculation = xlCalculationAutomaticCalculate

Calculate
Application.ScreenUpdating = True

End Sub
Sub Snamelist()
Dim i As Integer

Range("A2").Select

For i = 2 To Sheets.Count
    ActiveCell.Value = Sheets(i).Name
    ActiveCell.Offset(1, 0).Select
Next i

End Sub

Pour faciliter le travail j’ai trouvé une procédure que j’ai mis dans le code de la feuille qui m’enregistre le nom de la personne (monsieur X) en tant que nom de feuille
Sub onglet1()

ActiveSheet.Name = Range(“B3”).Value

End Sub

Ainsi mon tableau récapitulatif comporte en première colonne le nom de feuille (soit monsieur X).
Je souhaiterai copier sur la même ligne le prénom de monsieur x ainsi que d’autres éléments se trouvant dans la feuille « imprimé ».
Je n’arrive pas à trouver de solution et cela me pose un réel problème. Pensez vous avoir une solution.

Si vous avez une solution pour un autre problème je serais heureux : comme il s’agit de feuilles identiques, il suffit de les copier pour les reproduire en Feuil 1 Feuil 2…… Or comme j’ai installé un code dans la feuille pour que le nom de l’onglet soit celui du nom de la personne, je rencontre un problème lors de la copie car j’ai 2 onglets avec le même nom. Existe-t-il une solution ?
Je vous remercie pour vos réflexions et propositions


#2

Bonjour,
tu dis:

et plus bas

ActiveSheet.Name = Range(“B3”).Value

Là, je ne suis plus

sinon

ActiveSheet.Name = Range(“B2”).Value & " " &Range(“B4”).Value


#3

Re,

un petit exemple à adapter à ta sauce

Sub Recap()
'Déclaration des variables
  Dim ws As Worksheet
  Dim nouveauNom As String
  Dim feuilleExiste As Boolean
  Dim i%
'Efface les anciennes données
  Range("A2").Select
  Range(Selection, Selection.End(xlDown)).Select
  Range(Selection, Selection.End(xlToRight)).Select
  Selection.ClearContents
  Range("A2").Select
'affectation variables
  i = 2 'N° ligne pour extraire
  feuilleExiste = False 'déclare que la feuille n'existe pas
  On Error GoTo 1 'gestion erreur si le nom de l'onglet existe
'boucle sur les onglets
    For Each ws In ActiveWorkbook.Sheets
      If ws.Name <> "LISTING" And ws.Name <> "Fiche type" Then 'sauf les onglets LISTING et Fiche type
        nouveauNom = ws.Range("B2") & " " & ws.Range("B4") 'Affecte la variable nouveau nom avec le nom et le prénom des cellules de la feuille
        If nouveauNom = ws.Name Then 'teste si la feuille est renommée avec le nouveau nom
          feuilleExiste = True
          Exit For
        Else 'sinon
          ws.Name = nouveauNom 'renomme l'onglet
          Sheets("LISTING").Range("A" & i) = ws.Name 'colle le nom et prenom en A2
          ActiveSheet.Hyperlinks.Add Anchor:=Range("A" & i), Address:="", SubAddress:= _
          "'" & ws.Name & "'!A1", TextToDisplay:=ws.Name ' Le transforme en lien hypertexte
          Sheets("LISTING").Range("B" & i) = ws.Range("D3") 'colle l'adresse
          Sheets("LISTING").Range("C" & i) = CDate(ws.Range("F3")) 'colle la date au format date
          i = i + 1 'ajoute 1 à la variable i - augmente d'une ligne
        End If
      End If
    Next ws
1: 'en cas d'erreur
  If feuilleExiste = True Then
    MsgBox "Le nom existe déjà"
  Else
    MsgBox "Cet onglet " & ws.Name & Chr(10) & " existe déjà avec le nom " & ws.Range("B2") & " " & ws.Range("B4")
  End If
End Sub

Pierrick.xlsm (25,7 Ko)


#4

bonsoir Mimimathy et merci pour votre proposition.
J’ai tenté une adaptation de votre travail sur mon classeur. J’ai vite trouver les limites de mes compétences et l’intérêt pour moi de les développer. En conclusion, je n’ai pas réussis à l’adapter.
je vous mets en copie le classeur en espérant que vous pourrez mieux comprendre et m’accompagner dans cette réalisation. Je mets une seule feuille exemple pour que vous puissiez mieux analyser le problème. L’objectif qu’à partir de cette fiche, il soit possible de compléter automatiquement la feuille LISTING
Dans les colonnes P à AV j’ai remonter les valeurs des cellules à remplir afin de compléter plus facilement le LISTING. Je ne sais pas si cela est utile. Par la suite je souhaite pourvoir faire des compilation de données. Je ne suis par sûr que cela fonctionne avec les listes déroulantes. Qu’en pensez vous ?
En tout cas, encore merci pour votre attention


#5

j’ai oublié de joindre le fichier avant l’envoilisting_activite_médiation essais 2.xlsm (50,3 Ko)
listing_activite_médiation essais 2.xlsm (50,3 Ko)


#6

Bonjour,

A voir
listing_activite_médiation essais 2.xlsm (53,1 Ko)


#7

bonjour et merci pour votre proposition. Le programme ramène bien des informations. Votre commentaires en vert sont super utiles pour déchiffrer les codes.
Par contre le “recap” fait que l’actualisation efface les lignes inscrites alors que l’objectif est de les cumuler dans le listing.
pensez vous qu’il existe une solution


#8

Bonjour,

Remplace par cette macro

Sub Recap()
'Déclaration des variables
  Dim ws As Worksheet
  Dim nouveauNom As String
  Dim feuilleExiste As Boolean
  Dim i%

'affectation variables
  i = Range("A" & Rows.Count).End(xlUp).Row + 1 'n° de la dernière ligne vide de la colonne A
  feuilleExiste = False 'déclare que la feuille n'existe pas
  On Error GoTo 1 'gestion erreur si le nom de l'onglet existe
'boucle sur les onglets
    For Each ws In ActiveWorkbook.Sheets
      If ws.Name <> "LISTING" And ws.Name <> "liste déroul" Then 'sauf les onglets LISTING et liste déroul
        nouveauNom = ws.Range("B2") & " " & ws.Range("D2") 'Affecte la variable nouveau nom avec le nom et le prénom des cellules de la feuille
        If nouveauNom = ws.Name Then 'teste si la feuille est renommée avec le nouveau nom
          feuilleExiste = True
          Exit For
        Else 'sinon
          ws.Name = nouveauNom 'renomme l'onglet
          Sheets("LISTING").Range("A" & i) = ws.Range("B2") 'colle le nom
          ActiveSheet.Hyperlinks.Add Anchor:=Range("A" & i), Address:="", SubAddress:= _
          "'" & ws.Name & "'!A1", TextToDisplay:=ws.Name ' Le transforme en lien hypertexte
          Sheets("LISTING").Range("B" & i) = ws.Range("D2") 'colle le Prénom
          Sheets("LISTING").Range("C" & i) = ws.Range("B3") 'colle l'adresse
          Sheets("LISTING").Range("D" & i) = ws.Range("B4") 'colle Tél1
          Sheets("LISTING").Range("E" & i) = ws.Range("D4") 'colle Tél2
          Sheets("LISTING").Range("F" & i) = ws.Range("B3") 'colle Email
          Sheets("LISTING").Range("G" & i) = ws.Range("B6") 'colle Age
          Sheets("LISTING").Range("H" & i) = ws.Range("D6") 'colle Sexe
          Sheets("LISTING").Range("I" & i) = ws.Range("B8") 'colle Suivi par
          Sheets("LISTING").Range("J" & i) = ws.Range("B31") 'colle début intervention
          Sheets("LISTING").Range("K" & i) = ws.Range("B33") 'colle date RdV1
          Sheets("LISTING").Range("L" & i) = ws.Range("B36") 'colle date RdV2
          Sheets("LISTING").Range("M" & i) = ws.Range("G10") 'colle date RdV3
          Sheets("LISTING").Range("N" & i) = ws.Range("G15") 'colle date RdV4
          Sheets("LISTING").Range("O" & i) = ws.Range("G21") 'colle date RdV5
          Sheets("LISTING").Range("P" & i) = ws.Range("G26") 'colle date RdV6
          Sheets("LISTING").Range("Q" & i) = ws.Range("G33") 'colle date RdV7
          Sheets("LISTING").Range("R" & i) = ws.Range("G41") 'colle date FIN INTERV
          Sheets("LISTING").Range("S" & i) = ws.Range("A12") 'colle gestion conflit
          Sheets("LISTING").Range("T" & i) = ws.Range("B12") 'colle précision
          Sheets("LISTING").Range("U" & i) = ws.Range("D11") 'colle them princ
          Sheets("LISTING").Range("V" & i) = ws.Range("A15") 'colle logement
          Sheets("LISTING").Range("W" & i) = ws.Range("B15") 'colle origine demande
          Sheets("LISTING").Range("X" & i) = ws.Range("B16") 'colle nature problème
          Sheets("LISTING").Range("Y" & i) = ws.Range("D15") 'colle type logement
          Sheets("LISTING").Range("Z" & i) = ws.Range("D14") 'colle théma princ
          Sheets("LISTING").Range("AA" & i) = ws.Range("A19") 'colle insalubrité
          Sheets("LISTING").Range("AB" & i) = ws.Range("B19") 'colle nature problème
          Sheets("LISTING").Range("AC" & i) = ws.Range("D18") 'collethéma princ
          Sheets("LISTING").Range("AD" & i) = ws.Range("B22") 'colle public A
          Sheets("LISTING").Range("AE" & i) = ws.Range("B23") 'colle intervention
          Sheets("LISTING").Range("AF" & i) = ws.Range("B24") 'colle orientation
          Sheets("LISTING").Range("AG" & i) = ws.Range("B27") 'colle accomp B
          
          
          Sheets("LISTING").Range("C" & i) = CDate(ws.Range("F3")) 'colle la date au format date
          i = i + 1 'ajoute 1 à la variable i - augmente d'une ligne
        End If
      End If
    Next ws
1: 'en cas d'erreur
  If feuilleExiste = True Then
    MsgBox "Le nom existe déjà"
  End If
End Sub


#9

merci pour cette nouvelle proposition. Le programme ramène les informations . Il me semble qu’il bloque sur la première feuille, à gauche du listing. En changeant le nom de la 1ère feuille, le listing ramène les informations mais en conservant les lignes précédentes de cette même feuille mais avec un nom différent.
J’ai changé les autres feuilles de place. C’est toujours la 1ère à droite du listing qui est exploité
listing_activite_médiation essais 3.xlsm (78,0 Ko)


#10

Re,
Je regarderais cela demain matin, avec attention :thinking:


#11

Bonjour,
A tester avec mes modifications

listing_activite_médiation essais 3.xlsm (90,0 Ko)


#12

bravo !!!

tout fonctionne.

C’est super bien et fonctionnel. Je vais étudier ligne par ligne votre programme afin de bien comprendre le fonctionnement. Cela me donne envie de m’initier à la programmation.
Nous allons tester avec les collègues le bon fonctionnement.

Encore Bravo et merci


#13

bonjour

je le suis un peu vite avancer en disant que tout fonctionnait…
à l’utilisation je me suis rendu compte de 2 problèmes :
le premier fait que lorsque je modifie des données dans les cellule, la
formule “recap” considère qu’il s’agit d’une autre feuille et ramène
nous nouvelle ligne (ex turlututu)
le deuxième fait que si je supprime une feuille ou modifie le nom de
celle-ci; le listing conserve la ligne en état (ex CALI Fourchon).
pensez vous qu’il existe une solution à ces 2 problèmes ?

Juste une suggestion la colonne A ramène le nom et le prénom. Le nom
suffirait

Bien à vous

listing_activite_médiation essais 3 (3).xlsm (77.5 KB)


#14

Bonjour,
Je pense surtout que votre principe est mal conçu

1-) Savoir ou vous effectuez les modification (sur Listing ou sur la feuille)
2-) Savoir comment vous créez une nouvelle fiche
3-) Si le NOM se trouve seul sur la colonne, les doublons ne sont pas pris en compte

Il serait bien mieux de prévoir une fiche vierge et d’après une macro, et un bouton CRÉER, faire une nouvelle fiche. avec les déroulants pour les modifications ultérieurs. Un bouton MODIFIER er un autre SUPPRIMER.
La saisie se ferait sur la fiche et la vue sur LISTING, avec un lien hypertexte pour accès.
Un tri alphabétique serait mis en place sur la feuille listing par Nom et Prénom.


#15

Mimimathy [1]
février 24

Bonjour,
Je pense surtout que votre principe est mal conçu

1-) Savoir ou vous effectuez les modification (sur Listing ou sur la
feuille)
2-) Savoir comment vous créez une nouvelle fiche
3-) Si le NOM se trouve seul sur la colonne, les doublons ne sont pas
pris en compte

Il serait bien mieux de prévoir une fiche vierge et d’après une
macro, et un bouton CRÉER, faire une nouvelle fiche. avec les
déroulants pour les modifications ultérieurs. Un bouton MODIFIER er
un autre SUPPRIMER.
La saisie se ferait sur la fiche et la vue sur LISTING, avec un lien
hypertexte pour accès.
Un tri alphabétique serait mis en place sur la feuille listing par
Nom et Prénom.


Voir le sujet [2] ou répondre à ce courriel pour répondre.

EN RÉPONSE À

pierrick [3]
février 23

bonjour je le suis un peu vite avancer en disant que tout
fonctionnait… à l’utilisation je me suis rendu compte de 2
problèmes : le premier fait que lorsque je modifie des données dans
les cellule, la formule “recap” considère qu’il s’agit
d’une autre feuille et ramène nous nouvelle ligne (ex t…


Voir le sujet [2] ou répondre à ce courriel pour répondre.

Pour se désabonner de ces courriels, cliquer ici [4].

Links:

[1] http://forum.formuleexcel.com/u/mimimathy
[2]
Copie automatique de feuilles à tableau
[3] http://forum.formuleexcel.com/u/pierrick
[4]
http://forum.formuleexcel.com/email/unsubscribe/49be8f8056b503f09efc96f8c40b9b8f4f4a4c7bc830c92125924de55394471d


#16

bonjour

Votre logique est celle que j’ai suivi pour l’instant à savoir :
Une macro (bouton sur la feuille listing)permet de créer une nouvelle
fiche vierge (tout de suite à droite du listing). les informations sont
enregistrées sur la fiche. Les informations (grâce à vous) sont copiées
dans le listing avec la macro “recap”. La macro tri sur le listing
fonctionne aussi. Le problème est que toute modification apportée dans
une fiche (hors nom) créé une nouvelle ligne dans le listing. Ainsi dans
l’exemple il existe une seule fiche ALI BABA à laquelle j’ai modifié
plusieurs fois les informations. Or il y a plusieurs lignes dans le
listing (une ligne par modification suivi du bouton recap)
l’objectif est d’avoir une ligne par fiche, ligne qui s’actualise voir
qui disparaît lors de la suppression de la fiche.
Pour la colonne NOM-prénom, je comprends votre logique qui nécessite
d’avoir les 2 données dans la même colonne.
ci joint le tableau

listing_activite_médiation essais 3 (2).xlsm (377 KB)


#17

Re,
Ok
Je regarde, mais je préviens d’avance que tous les modules qui sont dans l’exemple vont être supprimés
pour refaire du PROPRE
Car ce qui cause le soucis, c’st la macro qui se trouve dans chaque onglet et qui CHANGE automatiquement le nom de l’onglet
et des autres aussi :wink:


#18

Bonjour,

Voilà, à tester
les macros sont commentées, avec “Grosso/Modo” la même que précédemment

listing_activite_mediation V4.xlsm (86,9 Ko)


#19

bonjour et merci pour ce travail
Que de changement, Je n’aurais pas pu arrivé à ce résultat.
j’ai 2 questions :
1 - A quoi sert la colonne avec le N° de fiche (je n’arrive pas à
associer le N° avec la position d’une fiche
2 - comment rectifier une erreur dans le nom. J’ai fais un essais avec
la fiche RAVEL. si je considère que je voulais écrire JAVEL, la
modification n’est pas prise en compte dans le listing ni dans la liste
de recherche.


#20

Re,
1-) Le N° ID, tu n’y touche pas, il sert au référencement
2-) Tu sélectionnes la fiche, tu supprimes et tu recommences (Avant d’appuyer sur un bouton, on vérifie)
Pense que c’est un bouton nucléaire et tu feras gaffe
A savoir que pour créer la fiche, il faut le nom et le prénom, alors c’est pas la mer à boire pour la ressaisir