[Feuille Sommaire] Récupérer cellules non vides + lien autos
Fermé
Quiche_Excel
Messages postés
6
Date d'inscription
lundi 16 septembre 2013
Statut
Membre
Dernière intervention
29 janvier 2015
-
Modifié par Quiche_Excel le 16/09/2014 à 00:30
via55 Messages postés 14506 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 27 décembre 2024 - 16 sept. 2014 à 23:51
via55 Messages postés 14506 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 27 décembre 2024 - 16 sept. 2014 à 23:51
A voir également:
- Excel récupérer les cellules non vides d'une colonne
- Déplacer une colonne excel - Guide
- Formule excel pour additionner plusieurs cellules - Guide
- Trier colonne excel - Guide
- Comment récupérer les messages supprimés sur whatsapp - Guide
- Liste déroulante excel - Guide
4 réponses
via55
Messages postés
14506
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
27 décembre 2024
2 738
16 sept. 2014 à 00:46
16 sept. 2014 à 00:46
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
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
Quiche_Excel
Messages postés
6
Date d'inscription
lundi 16 septembre 2013
Statut
Membre
Dernière intervention
29 janvier 2015
16 sept. 2014 à 09:53
16 sept. 2014 à 09:53
Merci je vais tester ça ce soir :)
Quiche_Excel
Messages postés
6
Date d'inscription
lundi 16 septembre 2013
Statut
Membre
Dernière intervention
29 janvier 2015
16 sept. 2014 à 23:03
16 sept. 2014 à 23:03
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 :)
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 :)
via55
Messages postés
14506
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
27 décembre 2024
2 738
16 sept. 2014 à 23:51
16 sept. 2014 à 23:51
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
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