[Feuille Sommaire] Récupérer cellules non vides + lien autos

Quiche_Excel Messages postés 11 Statut Membre -  
via55 Messages postés 14391 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

J'ai un fichier excel avec une feuille contenant 3 colonnes.

Colonne A : Fonctionnalité
Colonne B : Sous-Fonctionnalités
Colonne C : Règles de gestion

J'aimerai faire une nouvelle feuille "sommaire" qui récupère automatiquement le contenue de la colonne A et B sans les cellules vides et en faisant des liens automatique si cela est possible :)


Merci beaucoup pour votre aide !

EDIT : trouvé la réponse tout seul avec la formule
=LIEN_HYPERTEXTE("#Features!A"&EQUIV(A2;Features!A:A;0);RECHERCHEV(A2;Features!A:F;4;FAUX))

4 réponses

  1. via55 Messages postés 14391 Date d'inscription   Statut Membre Dernière intervention   2 759
     
    Bonsoir

    Il faut passer par une macro :

    Exemple : https://www.cjoint.com/?0IqaVkShoKz

    Tout ajout, modification ou effacement d'une donnée en colonne B de la feuille 1 lance la macro qui met à jour la feuille Sommaire en reprenant les données des colonnes A et B et en créant les liens hypertextes

    Cdlmnt
    0
  2. Quiche_Excel Messages postés 11 Statut Membre
     
    Merci je vais tester ça ce soir :)
    0
  3. Quiche_Excel Messages postés 11 Statut Membre
     
    Hello via55,

    Merci pour ton aide mais ta macro ne récupère que le contenu de la colonne B :(
    La A ne se met pas à jour.

    J'essaie de me mettre au VBA et de comprendre ta macro, pour le moment je galère :)
    0
  4. via55 Messages postés 14391 Date d'inscription   Statut Membre Dernière intervention   2 759
     
    Hello

    1) La macro dans Module 1:
    1° efface les lignes de Sommaire
    2° Parcours les lignes de l'autre feuille et récupère les contenus des colonnes A et B pour les reporter dans Sommaire en créant les liens hypertexte

    J'ai mis des explications dans la macro pour que tu essayes de la comprendre :

    Sub MAJsommaire()
    'desactive rafraichissement écran
    Application.ScreenUpdating = False
    'variable de ligne de départ (1 car titre en ligne 1 sinon serait 0)
    x = 1
    Dim DernLigne As Long
    ' derniere ligne non vide en colonne B de la feuille active
    DernLigne = ActiveSheet.Range("B" & Rows.Count).End(xlUp).Row
    ' recupere nom de la feuille active
    nom = ActiveSheet.Name
    ' Selection feuille sommaire et effacement lignes 2 à 100 en A et B
    Sheets("SOMMAIRE").Select
    Range("A2:B1000").Select
    Selection.ClearContents
    ' boucle sur les lignes de la 1ere feuille depuis la 2 jusqu'à la derniere non vide en B
    For n = 2 To DernLigne
    ' Si la cellule en A 1ere feuille n'est pas vide alors
    If Sheets(nom).Range("A" & n) <> "" Then
    ' on incremente le compteur de lignes de 1
    x = x + 1
    ' on selectionne Sommaire
    Sheets("SOMMAIRE").Select
    ' on copie en colonne A de sommaire ligne x la valeur en colonne A ligne n de la 1ere feuille
    Sheets("SOMMAIRE").Range("A" & x) = Sheets(nom).Range("A" & n)
    ' on recule le compteur de ligne de 1 (pou pouvoir inscrire la valeur en B sur la même ligne)
    x = x - 1
    End If
    ' Si la cellule en B 1ere feuille n'est pas vide alors
    If Sheets(nom).Range("B" & n) <> "" Then
    ' on incremente le compteur de lignes de 1
    x = x + 1
    'on recupere l'adresse de la cellule colonne B
    cell = Sheets(nom).Range("B" & n).Address
    'on recupere le texte inscrit dans la cellule colonne B
    ref = Sheets(nom).Range("B" & n)
    ' on selectionne feuille sommaire cellule en colonne B ligne x
    Sheets("SOMMAIRE").Range("B" & x).Select
    ' on y place un lien hypertexte (recomposé en concaténant ' & nom de la 1ere feuille & ' & ! & l'adresse de la cellule
    ' le texte à afficher dans la cellule est celui recupéré dans variable ref
    ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:="'" & nom & "'" & "!" & cell, TextToDisplay:=ref
    End If

    Next
    ' Repositionnement sur première feuille
    Sheets(nom).Select
    ' réactivation du raffraichissement écran
    Application.ScreenUpdating = True
    End Sub

    2) La macro dans le Worksheet de la Feuille 1 (Dans l'éditeur VBA double clic sur feuille 1 dans l'arborescence pour la visualiser) retourne sans rien faire (Exit SUb) si la colonne dans laquelle une valeur change est autre que la 2 (colonne B) sinon elle envoie exécuter la macro précédente de mise à jour

    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column <> 2 Then Exit Sub
    MAJsommaire
    End Sub

    Si tu souhaites que la mise à jour se fasse également quand tu ajoutes ou modifie une valeur en colonne A de la 1ere feuille il suffit d'enlever le < dans la 1ere ligne : If Target.Column > 2 Then Exit Sub
    la condition au lieu d'être si la colonne du changement est différente de 2 alors sortie, sera si la colonne de changement est supérieure à 2 alors sortie

    Cdlmnt

    Si tu n'arrives pas appliquer les macros sur ton fichier post un exemple allégé et anonymé de ton fichier sur cjoint.com et indiques moi le lien fourni, je regarderai

    Cdlmnt

    0