Masquer ligne sous condition
RésoluLe Pingou - 27 oct. 2023 à 11:44
- Masquer des lignes excel sous condition
- Liste déroulante excel - Guide
- Excel cellule couleur si condition texte - Guide
- Aller à la ligne excel - Guide
- Masquer conversation whatsapp - Guide
- Formule excel - Guide
77 réponses
15 oct. 2023 à 19:51
Modifié le 15 oct. 2023 à 20:18
Re,
pour terminer ta demande précédente et que tu comprennes, si par exemple tu voulais que le code s'applique à des lignes dis contiguës, exemple lignes de 11 à 12 et de 15 à 17 le code serait
Private Sub Worksheet_Change(ByVal Target As Range)
If [D5] = "Pro" Or [D5] = "pro" Then Range("11:12,15:17").EntireRow.Hidden = False Else Range("11:12,15:17").EntireRow.Hidden = True
End Sub
Pour ta dernière demande, il faut être plus précis, le VBA est strict et ne tolère aucune erreur, colonne suivi quel est son index H, I, J, K ?
perso je rajouterais une colonne Contrôle pour éviter de copier plusieurs fois une ligne,
et colonne suivi comment est saisi OUI ou qui a t'il d'autre comme mot possible ?
et es ce que ta dernière demande concerne le même onglet que la demande initiale
15 oct. 2023 à 20:27
D’accord merci j’ai bien compris le code nickel !
pour la nouvelle feuille je t’ai créé un lien ou il y a le fichier Excel pour que tu vois mieux les cellules tout ça.
https://www.cjoint.com/c/MJpsAosPUKs
15 oct. 2023 à 20:44
Re,
on est bien d'accord, c'est un fichier différent qui n'a rien à voir avec la première demande ?
ensuite est il possible d'harmoniser les deux onglets afin d'avoir les deux tableaux qui commencent à la même colonne et ligne ? dans ton exemple un tableau commence cellule C10 et l'autre D12 ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question15 oct. 2023 à 20:49
Oui ça a rien avoir avec la première demande.
La c’est la demande pour copier dans l’autre tableau avec un oui.
oui c’est un exemple vous pouvez modifier
15 oct. 2023 à 20:53
Re,
ok, j'habite le pays du rugby et ce soir c'est grand écran.
15 oct. 2023 à 23:06
De 1 point ... :'(
15 oct. 2023 à 23:11
Re,
récupère ton fichier, j'ai créé une mise en forme conditionnelle pour coloriser une ligne sur deux sur chaque onglet pour éviter d'avoir un mélange anarchique des couleurs Feuil2 après le transfert des données.
je t'ai annoté chaque ligne du code pour que tu le suives et le reproduises, l'annotation apparait en vert après une série de pointillés.
Le déclenchement se fait à partir de la saisie OUI colonne onglet Feuil1
https://www.cjoint.com/c/MJpvjNCMhvF
16 oct. 2023 à 12:30
Cool merci à toi tu pourrais juste rajouter un code pour que quand je supprime le OUI ca me supprime la ligne copié merci
Et c'est possible d'enlever la mise en forme conditionnel ? Car dans le 2eme tableau j'aurais mes lignes colorier a ma facon merci
16 oct. 2023 à 12:43
Sinon aurait-tu pas une formule plutot qu'une macro ? Merci
16 oct. 2023 à 14:05
Re,
Voilà uniquement par formules,
pour protéger les formules complexes Feuil2, je te conseille de protéger cette feuille
https://www.cjoint.com/c/MJqmeTaVllF
16 oct. 2023 à 21:13
D'accord merci c'est super cool merci beaucoup. Tu peux juste m'expliquer la formule ?
C'est pour que je la copie sur mon fichier original dans mon tableau.
16 oct. 2023 à 22:40
Voilà
dans l'exemple, la formule s'applique pour la plage $B$5:$B$15 de l'onglet Feuil1 (à adapter)
En fait il s'agit à la base d'une formule basique INDEX(Feuil1!$B$5:$B$15;position dans la liste), colonne C cette partie de formule sera modifié en Feuil1!$C$5:$C$15 etc.
pour définir la position on aurait pu utiliser la fonction EQUIV("CLIENT ";Feuil1!$B$5:$B$15;0) qui aurait renvoyé la position de la première occurrence rencontré soit 1
le problème est que le test doit se faire sur la colonne K sur le critère "OUI" et il peut y en a plusieurs, donc on va les lister
en utilisant une des dernière syntaxe créé par Microsoft AGREGAT qui va faire abstraction des lignes en erreur. Cette syntaxe peut être utilisée dans de nombreux cas je t'invite à regarder des tutos sur Google
cette partie de formule de la première ligne va retourner 1 si le premier "OUI" est sur la première ligne ou 3 si le premier "OUI" se trouvait sur la troisième ligne
AGREGAT(15;6;LIGNE(Feuil1!$K$5:$K$15)-LIGNE(Feuil1!$K$5)+1/(Feuil1!$B$5:$K$15="oui");LIGNE(1:1))
la formule AGREGAT se termine par LIGNE(1:1) ce qui renvoi 1 et renseigne la syntaxe de la première occurrence "OUI" trouvée
la formule incrémentée sur la deuxième ligne LIGNE(1:1) devient LIGNE(2:2) pour rechercher la deuxième occurrence etc
ce qui donne comme formule
INDEX(Feuil1!$B$5:$B$15;AGREGAT(15;6;LIGNE(Feuil1!$K$5:$K$15)-LIGNE(Feuil1!$K$5)+1/(Feuil1!$B$5:$K$15="oui");LIGNE(1:1)))
pour terminer la formule est encadrée d'une gestion d'erreur
=SIERREUR( la formule ;"") ce qui renverra rien ou vide dans le cas d'erreur rencontrée par la formule ou le résultat de la formule
Avec les versions d'Excel plus anciennes on aurait fait une formule matricielle plus complexe et gourmande en ressource ce qui ralentirait le système
17 oct. 2023 à 13:54
Je suis désole mais j'ai du mal a l'appliquer ..
Il y a juste un petit truc a changer, je vois que dans ta formule c'est par exemple de B5 a K15 et de K5 a K15, mais moi je voudrais dire a la formule que c'est dans toute les lignes du tableau et dans toute ma colonne de mon tableau.
Car dans ma feuil1 je vais inserer des lignes a mon tableau de temps en temps et je voudrais bien sur que la formule reprenne les nouvelles ligne de mon tableau es ce possible ?
Je t'ai mis sur le lien le fichier avec les 2 tableau de crée. Merci
https://www.cjoint.com/c/MJrl0DWbpRZ
17 oct. 2023 à 15:26
Re,
Déjà la formule avec LIGNE(1:1) est sur la ligne n°5 alors qu'elle devrait se trouver sur la ligne n°2 ce qui fait que les formules incrémentées vers le haut son en erreur LIGNE(#REF!) alors que tu devrais avoir LIGNE(1:1) ligne 2 LIGNE(2:2) ligne 3 etc ...
ensuite mon contrôle se fait de la ligne 5 à 15, il te suffisait de modifier 15 en 40 pour avoir Feuil1!$B$5:$B$40 et idem pour K15 en K40
en ce qui concerne l'adaptation automatique à l'évolution de ton tableau, bien sur c'est possible ce qui compliquera le formule, je pense qu'a ton niveau le plus simple serait de travailler avec des plages nommées, exemple pour Feuil1!$B$5:$B$15 si tu nommes cette plage List_b, List_c pour la colonne C etc ... pour Feuil1!$K$5:$K$15 List_K et pour Feuil1!$B$5:$K$1 nommé Tablo
la formule deviendrait
=SIERREUR(INDEX(List_b;AGREGAT(15;6;LIGNE(List_k)-LIGNE(Feuil1!$K$5)+1/(Tablo="oui");LIGNE(1:1)));"")
et tu n'aurais que le plages nommées à modifier.
Ce soir je te ferais une formule avec adaptation automatique à l'évolution du tableau mais je crains que tu t'y perde
17 oct. 2023 à 18:29
Ok merci t'a reçu mon message en privé ?
18 oct. 2023 à 22:04
Re,
Le forum est un lieu de partage du savoir, les réponses techniques doivent se faire en clair pour permettre à des demandes similaires de s'en inspirer.
J'ai renommé les onglets mais tu peux laisser les noms Feuil1, Feuil2 etc ...
Le plus simple est de travailler avec les plages nommées, exemple l'onglet que j'ai nommé Liste
j'ai sélectionné la matrice matrice B5:K40 que j'ai nommé Tablo
puis dans chaque colonne, B5:B40 nommée List_b
puis la C5:C40 nommée List_c puis D5:D40 nommée List_d etc ...
onglet que j'ai renommé Formule en cellule B5 j'ai adapté la formule qui avec les plage nommées est devenue
=SIERREUR(INDEX(List_b;AGREGAT(15;6;LIGNE(List_k)-LIGNE(Liste!$K$5)+1/(Tablo="oui");LIGNE(1:1)));"")
ensuite j'ai incrémenté vers la droite cette formule jusqu'à la cellule K5
puis en C5 il faut modifier juste List_b en List_c =SIERREUR(INDEX(List_c;AGREGAT
puis en D5 List_d ainsi de suite juqu'à K5 qui sera List_k
ensuite sélectionner la plage B5:K5 et incrémenter vers le bas dans l'exemple jusqu'à la ligne 40
Ton tableau onglet Liste est certainement appelé à grandir, il suffit simplement d'ajouter des lignes avant la dernière ligne du tableau dans l'exemple avant la ligne 40 soit entre la ligne 5 et la ligne 40 et toutes les plages nommées ainsi que les formules s'actualiseront automatiquement.
En ce qui concerne l'agrandissement du tableau onglet que j'ai renommé Formule comme pour l'onglet précédent,
déprotéger la feuille
ajouter des lignes avant la dernière ligne du tableau dans l'exemple avant la ligne 40 soit entre la ligne 5 et la ligne 40
pour insérer les formules dans les nouvelles lignes, il suffit de sélectionner une ligne contenant les formules exemple B10:K10 même si elle affiche déjà des données et l'incrémenter vers le bas jusqu'à la fin du tableau, même si des lignes affichaient des données elles se remettront automatiquement en bonne place
reprotéger la feuille pour protéger les formules
Si tu renommes les onglets les plages nommées ainsi que les formules s'actualiseront également automatiquement.
https://www.cjoint.com/c/MJst7X8X4kF
19 oct. 2023 à 06:56
Parfait c'est génial merci à toi !
J'ai pas eu à renommer les matrices car j'ai crée un tableau avec des en-tête et ça marche a merveille surtout que ça s'actualise en grandisant mon tableau car j'ai mis " [#Tout] " dans ma formule, c'est nickel donc voici ma formule final :
=SIERREUR(INDEX(Tableau2[PRENOM];AGREGAT(15;6;LIGNE(Tableau2[[#Tout];[SUIVIS]])-LIGNE('FICHIER '!$I$7)+1/(Tableau2[#Tout]="oui");LIGNE(4:4)));"")
https://www.cjoint.com/c/MJte0N58ZgN
Par contre je copie/colle sans comprendre mdr
Je pense avoir presque tout captez dans la formule sauf : LIGNE(Tableau2[[#Tout];[SUIVIS]])-LIGNE('FICHIER '!$I$7)+1
La ce que je comprends c'est qu'on va chercher les lignes de tous mon tableau dans la colonne suivis donc la dans l'occurence c'est de la ligne 6 a 15 c'est bien ça ?
Mais apres je comprends pas -LIGNE('FICHIER '!$I$7)+1 ? Merci
Modifié le 19 oct. 2023 à 09:28
Re,
ta formule onglet SUIVIS cellule C7 est:
=SIERREUR(INDEX(Tableau2[CLIENT PROSPECT];AGREGAT(15;6;LIGNE(Tableau2[SUIVIS])-LIGNE('FICHIER '!$I$7)+1/(Tableau2="oui");LIGNE(1:1)));"")
ensuite il te suffit d'incrémenter cette cellule vers la droite jusqu'à la cellule H7 puis sélectionner la plage C7:H7 et l'incrémenter vers le bas jusqu'à la fin de ton tableau.
Il faut que tu apprennes à tester tes formules ou partie de formule, exemple, lorsque tu clique sur la cellule C7, il apparait dans ta barre des formules la formule affectée à cette cellule, si tu sélectionnes une partie valide de ta formule, exemple cette partie en gras et tu clic sur la touche F9
=SIERREUR(INDEX(Tableau2[CLIENT PROSPECT];AGREGAT(15;6;LIGNE(Tableau2[SUIVIS])-LIGNE('FICHIER '!$I$7)+1/(Tableau2="oui");LIGNE(1:1)));"")
il s'affichera ce que cette partie renvie, soit l'index ligne concerné de 7 à 18 {7;8;9;10;11;12;13;14;15;16;17;18}
il est impératif après chaque test de sortir de cette procédure en cliquant sur la touche Echap
si maintenant tu veux tester cette partie en gras
=SIERREUR(INDEX(Tableau2[CLIENT PROSPECT];AGREGAT(15;6;LIGNE(Tableau2[SUIVIS])-LIGNE('FICHIER '!$I$7)+1/(Tableau2="oui");LIGNE(1:1)));"")
la formule renvie {8}
Tu va te demander pourquoi 8 et bien tout simplement pour ne pas afficher deux fois le même résultat que la ligne précédente
et ainsi de suite pour chaque partie qui compose la formule.
Une autre astuce, dans ton cas pour ne pas afficher les valeurs 0 parce des cellules de ta matrice sont vides, sélectionne ton tableau onglet SUIVIS, Clic droit sur la sélection/Format de cellule/Nombre/Personnalisée/dans Type colle Standard;; ou 0;;
19 oct. 2023 à 18:02
Merci à toi ! T'explique vraiment bien merci !
Tu dis de cliquer sur la touche F9 mais je suis sur un mac et la touche F9 ne marche pas sur mac.