Microsoft 365 Rechercher des occurrences inconnues

lucarn

XLDnaute Occasionnel
Bonjour,
Je réédite ma question sous une forme nouvelle parce que j'avais mal posé le problème et que je ne parviens pas à transformer le code qu'on m'a donné pour l'adapter à ma question.
Voici mon problème. Dans un fichier, j’ai plusieurs feuilles qui correspondent au même formulaire. En général, je me sers de listes déroulantes pour beaucoup de cellules. Mais, j’en ai quelques-unes à remplir à la main qui correspondent à des questions ouvertes. Lorsque je fais la synthèse des formulaires, je parviens facilement à compter les occurrences lorsqu’elles viennent de listes déroulantes parce que je connais toutes les possibilités. Mais lorsque la réponse est « ouverte », je ne connais pas les occurrences qui ont été créées.
J’aurai voulu une macro qui aille chercher les différentes occurrences (qui sont toujours à la même place), et lorsqu’une occurrence sort plusieurs fois, savoir combien de fois elle est sortie.
J'ajoute une précision qui n'était pas dans mon premier sujet : il n'y a qu'une cellule concernée par feuille, mais il y a un nombre de feuilles indéterminé. Donc, le fichier que je mets en pièce jointe est à 4 fiches mais il pourrait être de 10 ou de 30 ou de plus encore
Tous les onglets s'appellent "fiche etc"

Ci-joint un fichier test avec le résultat attendu dans l'onglet synthèse
 

Pièces jointes

  • Test ocurences.xls
    32.5 KB · Affichages: 3
Solution
Re,

Il faut essayer de comprendre les lignes de codes qui vous sont communiquées, travailler un peu et voir ce que vous pouvez adapter. Sinon vous n'apprendrez jamais.
De plus et pour ma part, quelqu'un qui attend du tout cuit, aussi sympa soit-il, va vite me lasser.

Pour votre question la ligne de code incriminée est celle-ci .Range("B2").CurrentRegion.ClearContents '
Cette ligne a pour but d'effacer les données calculées précédentes, pour ne pas conserver de fantôme.
Si votre tableau a un nombre de lignes fixes vous pouvez par exemple la remplacer par: .Range("B2:C100").clearContents

Cordialement

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

La macro du fichier fonctionnait très bien, alors je me suis creusé la tête pour savoir ce que vous vouliez!!!
J'en ai fini par conclure que la réponse était simplement là : 'qui sont toujours à la même place'

Donc en dehors du fait que j'ai refait la macro à ma sauce, la seule modification par rapport à la précédente est que celle-ci ne boucle pas sur les cellules occupées de la colonne A de chaque feuille mais simplement teste la cellule A2 de chaque feuille.

VB:
Sub synthese()
    Dim Occurence As String
    Set dico = CreateObject("Scripting.dictionary")
    For Each sh In Sheets
        If sh.Name <> "Synthèse" Then
            Occurence = Trim(sh.Range("A2").Text)
            If Occurence <> "" Then dico(Occurence) = dico(Occurence) + 1
        End If
    Next
    If dico.Count > 0 Then
        With Sheets("Synthèse")
            .Range("B2").CurrentRegion.ClearContents ' Nettoie les données précédentes
            .Range("B2").Resize(dico.Count) = Application.Transpose(dico.keys)
            .Range("C2").Resize(dico.Count) = Application.Transpose(dico.items)
        End With
    End If
End Sub

Si c'est bien ça que vous voulez, alors il eût été plus simple de rester dans votre autre fil de discussion et de dire que les occurences à trouver sont toujours en A2 de chaque feuille.

Petite question en aparté : pourquoi un fichier .xls (format dépassé depuis 2007) alors que vous avez office 365, vous privant ainsi de toutes les améliorations d'excel faites depuis 12 ans?

Cordialement
 

Pièces jointes

  • Test ocurences.xls
    43 KB · Affichages: 9

lucarn

XLDnaute Occasionnel
Bonjour,

La macro du fichier fonctionnait très bien, alors je me suis creusé la tête pour savoir ce que vous vouliez!!!
J'en ai fini par conclure que la réponse était simplement là : 'qui sont toujours à la même place'

Donc en dehors du fait que j'ai refait la macro à ma sauce, la seule modification par rapport à la précédente est que celle-ci ne boucle pas sur les cellules occupées de la colonne A de chaque feuille mais simplement teste la cellule A2 de chaque feuille.

VB:
Sub synthese()
    Dim Occurence As String
    Set dico = CreateObject("Scripting.dictionary")
    For Each sh In Sheets
        If sh.Name <> "Synthèse" Then
            Occurence = Trim(sh.Range("A2").Text)
            If Occurence <> "" Then dico(Occurence) = dico(Occurence) + 1
        End If
    Next
    If dico.Count > 0 Then
        With Sheets("Synthèse")
            .Range("B2").CurrentRegion.ClearContents ' Nettoie les données précédentes
            .Range("B2").Resize(dico.Count) = Application.Transpose(dico.keys)
            .Range("C2").Resize(dico.Count) = Application.Transpose(dico.items)
        End With
    End If
End Sub

Si c'est bien ça que vous voulez, alors il eût été plus simple de rester dans votre autre fil de discussion et de dire que les occurences à trouver sont toujours en A2 de chaque feuille.

Petite question en aparté : pourquoi un fichier .xls (format dépassé depuis 2007) alors que vous avez office 365, vous privant ainsi de toutes les améliorations d'excel faites depuis 12 ans?

Cordialement
Bonjour Reblochon,
En fait, c'est idiot. J'ai regardé la macro et j'en ai déduis qu'elle limitait sa recherche dans un nombre restreint de feuilles sans avoir essayé d'ajouter des feuilles et de voir ce que cela faisait.
Donc, tout est bien, ça marche. Super. Merci.
Pour Excel 2007, je viens juste d'enregistrer mes fichiers 2007 sous le format Excel acceptant les macros. J'espère que je ne vais pas être perdu...
Merci encore.
 

lucarn

XLDnaute Occasionnel
Bonjour Reblochon,
En fait, c'est idiot. J'ai regardé la macro et j'en ai déduis qu'elle limitait sa recherche dans un nombre restreint de feuilles sans avoir essayé d'ajouter des feuilles et de voir ce que cela faisait.
Donc, tout est bien, ça marche. Super. Merci.
Pour Excel 2007, je viens juste d'enregistrer mes fichiers 2007 sous le format Excel acceptant les macros. J'espère que je ne vais pas être perdu...
Merci encore.
Help Reblochon,
En fait, j'ai un autre problème.
Ta macro fonctionne et je l'ai adaptée à un autre document.
Le problème est que je veux mettre les résultats de la macro dans une feuille existante qui comporte déjà des éléments. Et lorsque je passe la macro, le résultat de la macro s'affiche mais elle a effacé tout le reste de la feuille.
Donc, si tu reprends la macro que tu m'as donnée dans lequel les résultats s'affichent sur la feuille synthèse dans les colonnes B et C, il faudrait faire en sorte qu'elle n'efface pas ce qu'il y a avant la colonne B et après la C. Si tu sais faire, c'est super
 

Hasco

XLDnaute Barbatruc
Repose en paix
Re,

Il faut essayer de comprendre les lignes de codes qui vous sont communiquées, travailler un peu et voir ce que vous pouvez adapter. Sinon vous n'apprendrez jamais.
De plus et pour ma part, quelqu'un qui attend du tout cuit, aussi sympa soit-il, va vite me lasser.

Pour votre question la ligne de code incriminée est celle-ci .Range("B2").CurrentRegion.ClearContents '
Cette ligne a pour but d'effacer les données calculées précédentes, pour ne pas conserver de fantôme.
Si votre tableau a un nombre de lignes fixes vous pouvez par exemple la remplacer par: .Range("B2:C100").clearContents

Cordialement
 

lucarn

XLDnaute Occasionnel
Re,

Il faut essayer de comprendre les lignes de codes qui vous sont communiquées, travailler un peu et voir ce que vous pouvez adapter. Sinon vous n'apprendrez jamais.
De plus et pour ma part, quelqu'un qui attend du tout cuit, aussi sympa soit-il, va vite me lasser.

Pour votre question la ligne de code incriminée est celle-ci .Range("B2").CurrentRegion.ClearContents '
Cette ligne a pour but d'effacer les données calculées précédentes, pour ne pas conserver de fantôme.
Si votre tableau a un nombre de lignes fixes vous pouvez par exemple la remplacer par: .Range("B2:C100").clearContents

Cordialement
Roblochon,
Merci beaucoup. J'ai réussi à modifié la macro.
J'essaye de comprendre, ne t'inquiète pas là-dessus. En fait j'envoie des fichiers tests qui n'ont rien à voir avec le document sur lequel je travaille, justement pour me forcer à trifouiller les codes et tenter de comprendre quelque chose. Mais, avoue tout de même qu'il faut être doué d'un esprit un peu spécial pour naviguer allègrement dans le vba.
Au fait, merci pour Genesis Musica. Je l'ai mis sur le salon
 

Discussions similaires

Statistiques des forums

Discussions
315 095
Messages
2 116 169
Membres
112 676
dernier inscrit
little_b