IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Macro pour cacher diverses lignes qui ne se suivent pas toutes et afficher d'autres


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Intervenant temps réel
    Inscrit en
    Février 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Intervenant temps réel
    Secteur : Service public

    Informations forums :
    Inscription : Février 2014
    Messages : 6
    Points : 1
    Points
    1
    Par défaut Macro pour cacher diverses lignes qui ne se suivent pas toutes et afficher d'autres
    Bonjour a vous,
    Je suis nouveau dans la pratique du vba d'Excel, et je galère trop pour réaliser une macro.
    Sans vouloir trop vous déranger j'aurais besoin d'un coup de main. La macro que j'ai faite touriiiinne trop.
    de plus mon âge n'arrange pas les choses.
    Il serait très sympathique si une personne pouvait m'aider. le problème est ci joint.
    Pour être simple, une macro pour cacher des lignes et en laisser certaines apparentes.

    Les lignes de 1 à 29 sont apparentes et fixe.

    les lignes qui doivent être cachées sont :
    33, 34, 35, 36, 37, 38, 39, 40, 41.
    45,46,47,48, 52 58,59,60,61 66,67,68,69, 75, 80, 85

    Les lignes qui restent visible sont:
    30, 31, 32,
    42, 43, 44
    49, 50, 51 et 53
    54, 55, 56 ,57
    62, 63, 64, 65
    70, 71, 72, 73, 74 et 76
    77, 78, 79 et 81
    82,83,84 et 86
    ma 1ere macro ci-dessous marche ("""presque" "manque des lignes) , Mais elle rame, elle saccade.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Sub Click()
     
    ' Macro servant à masquer les lignes lorsque l'on clique sur le bouton Click
     
    Sheets("Ligne A").Rows("30:32").EntireRow.Hidden = False 'on affiche les lignes 30 à 32
    Sheets("Ligne A").Rows("42:44").EntireRow.Hidden = False 'on affiche les lignes 42 à 44
    Sheets("Ligne A").Rows("49:53").EntireRow.Hidden = False 'on affiche les lignes 49 à 53
    Sheets("Ligne A").Rows("54:57").EntireRow.Hidden = False 'on affiche les lignes 54 à 57
    Sheets("Ligne A").Rows("62:65").EntireRow.Hidden = False 'on affiche les lignes 62 à 65
    Sheets("Ligne A").Rows("69:74").EntireRow.Hidden = False 'on affiche les lignes 69 à 74
    Sheets("Ligne A").Rows("70:76").EntireRow.Hidden = False 'on affiche les lignes 70 à 76
    Sheets("Ligne A").Rows("77:81").EntireRow.Hidden = False 'on affiche les lignes 77 à 81
    Sheets("Ligne A").Rows("82:86").EntireRow.Hidden = False 'on affiche les lignes 82 à 86
     
     
     
    Sheets("Ligne A").Rows("88:217").EntireRow.Hidden = True 'on masque les lignes 88 à 217
    Sheets("Ligne A").Range("BT27") = "ATT" 'on indique le mode ATTention pour confirmer 
     
    End Sub
    Je remercie d’avance ceux qui m’accorderont de leurs temps et du savoir.

  2. #2
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut
    Bonjour,

    les lignes qui doivent être cachées sont :
    33, 34, 35, 36, 37, 38, 39, 40, 41.
    45,46,47,48, 52 58,59,60,61 66,67,68,69, 75, 80, 85
    un exemple vite fait sur tes lignes cachées à toi d'adapter (je ne les ai pas toutes faites)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub Demo()
    Dim LigCache As Range
        Set LigCache = Union(Rows("33:41"), Rows("45:48"), Rows("52:52"), Rows("58:61"))
        LigCache.EntireRow.Hidden = True
        Set LigCache = Nothing
    End Sub
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  3. #3
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut
    re,
    Si on cible une feuille précise (Attention à bien faire les différences entre les 2 codes) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub Demo2()
    Dim LigCache As Range
        With Sheets("Ligne A")
            Set LigCache = Union(.Rows("33:41"), .Rows("45:48"), .Rows("52:52"), .Rows("58:61"))
        End With
        LigCache.EntireRow.Hidden = True
        Set LigCache = Nothing
    End Sub
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  4. #4
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    dans ce cas precis ou les lignes sont connues je ne vois pas l'intérêt d'utiliser union
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("A33:A41, A45:A48, A52, A58:A61").EntireRow.Hidden = True
    surtout que utiliser rows"x:y"... et entirerow a la fin ca fait un peu ... hein RYU!!!!

    sur tout aussi que
    Set LigCache = Union(.Rows("33:41"), .Rows("45:48"), .Rows("52:52"), .Rows("58:61")) est une variable type range de X lignes sur le columns.count
    je te dis pas la mémoire si les lignes sont remplie hein !! Ryu!!!
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Intervenant temps réel
    Inscrit en
    Février 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Intervenant temps réel
    Secteur : Service public

    Informations forums :
    Inscription : Février 2014
    Messages : 6
    Points : 1
    Points
    1
    Par défaut MERCI
    Tout d'abord Merci,
    vous êtes très sympa de m'accorder de votre temps.

    Je suis de ton avis patricktoulond'ailleur c'est pour ça que je fais appel à vous.
    Je vais commencer par adapter et tester la code de RyuAutodidacte, cela semble répondre a mon attente.

    je vous ferais part des résultats ce Samedi .
    Cordialement

  6. #6
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour patricktoulon
    sur tout aussi que
    Set LigCache = Union(.Rows("33:41"), .Rows("45:48"), .Rows("52:52"), .Rows("58:61")) est une variable type range de X lignes sur le columns.count
    je te dis pas la mémoire si les lignes sont remplie hein !! Ryu!!!
    Croyance à ne pas propager.
    un objet range créé par référence à une plage de cellules n'est qu'un pointeur vers cette plage et n'occupe pas de mémoire proportionnelle au nombre de cellules de la plage concernée. Il n'occupe que la mémoire (insignifiant) d'un pointeur *******.
    Préparer une liste de courses n'est pas mettre ou avoir mis dans son caddie les produits figurant sur cette liste !

    Pour être très précis à ce sujet : la seule différence (encore plus insignifiante) qu'il sera possible de constater, ne concernera que le pointeur lui-même, dans le cas d'un pointeur vers une plage constituée d'un très grand nombre d'objets areas (sous-plages discontinues)

    ****** voyons maintenant ce qu'il en est de l'adresse mémorisée par chaque pointeur :
    proposition ryuautodidacte : longue de 31 octets "$33:$41,$45:$48,$52:$52,$58:$61"
    proposition patricktoulon : longue de 41 octets "$A$33:$A$41,$A$45:$A$48,$A$52,$A$58:$A$61"
    Quelle est selon toi celle qui sera analysée puis parcourue la plus vite lors de l'exécution des instructions sur cette plage (ce pointeur de plage, en fait) ?
    J'encourage personnellement Ryuautodidacte à continuer à observer sa saine rigueur.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  7. #7
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    A patricktoulon :
    Là, je dois m'absenter (partie de pêche).
    A mon retour, je t'expliquerai pourquoi ryuautodidacte a également raison -gain de temps - de préciser entirerow (y compris avec sa détermination de la plage).
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  8. #8
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut
    Bonjour,
    Les transports en commun c'est pas le top mais ça me laisse un peu de temps pour répondre et donc faut pas compter sur moi pour faire du vba sur mon phone . He oui on fait ce que l'on peut.

    Patrick je te remercie par ce que tu ais souvent de bons conseils et ça part toujours d'un bon sentiment

    unparia merci de donner ces précisions qui permettent de remettre les choses à leur juste titre (le code)
    Je n'aurais pas été capable de dire le nombre d'octets entre les 2 codes, c'est qq ch que je n'ai pas encore vu.

    Mon raisonnement :
    Comme le problème concerné juste les lignes, il m'a paru plus logique de pointer que sur les lignes

    Patrick tu parles de mon code à avec ("x:y") pour les lignes, mais ce n'est pas comme cela que je le vois.
    Je dirais plutôt ("x1 : x2") . En effet, je considère l'axe des lignes et des colonnes comme en mathématiques, en les nommant plutôt X pour les lignes et Y pour les colonnes. Et pourquoi ? Par ce que pour avoir une coordonnée il nous faut 2 informations. Pour A3 il nous faut l'information colonne A et l'information ligne 3.

    Après je ne suis pas assez expert pour dire si on peut faire cette analogie avec le vba.
    Voilà
    Ryu
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  9. #9
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    Bonjour RYU
    pour moi x,y sont des données rien avoir avec les maths ou autre
    x peut très bien être "A10"

    après ce que je voulais dire c'est que je stocke rien ,j'exécute la commande hidden directement sur la plage nommée sur son entirerow
    ce que je voulais démontrer aussi c'est que utiliser rows dans un union sachant que l'on est obligé du a la concaténation des adresses d'utiliser "entirerow" n'est pas de mon gout


    au mieux dans une certaine logique

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     set plage =range("A10:A12,A22:A28,A33:A36")
    plage.entirerow.hidden=true
    tu vois le chemin est plus propre

    union je l'utilise pour rassembler des cellules/lignes non contiguës et copier/coller sur une plage contiguës par exemple

    je dis ca dans une certaine logique

    en effet tu a 3 véhicules :vélo,une voiture ,un camion 19 tonnes ; avec quoi va tu chercher ton pain a la boulangerie qui est a 500 mètres de chez toi ??

    perso de temps en temps j'y vais même a pied
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  10. #10
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 761
    Points : 28 619
    Points
    28 619
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    unparia merci de donner ces précisions qui permettent de remettre les choses à leur juste titre (le code)
    Je n'aurais pas été capable de dire le nombre d'octets entre les 2 codes, c'est qq ch que je n'ai pas encore vu.
    Le nombre d'octets qu'a donné Unparia que je salue au passage est je suppose la simple utilisation de la fonction Len avec comme argument la chaîne contenant les adresses
    Dans la fenêtre Exécution (Immediate Window pour la version anglaise) de l'éditeur VBA, tu tapes cette ligne et tu obtiendras 31
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ? len("$33:$41,$45:$48,$52:$52,$58:$61")
    et celle-ci renverra comme résultat 41
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ? len("$A$33:$A$41,$A$45:$A$48,$A$52,$A$58:$A$61")
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  11. #11
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut
    Alors là dessus je te rejoins complètement, c'est plus sympa d'aller chercher son pain à pied

    Ce que je peux te dire en tout cas, c'est que dans les 2 formes d'écriture nous avons du discontinues
    Dans l'un on canalise les informations dans une colonne pour ensuite étendre en lignes avec entirerow
    Tandis que le second l'information lignes est déjà inscrite

    Comme je suis curieux et que c'est toujours intéressant d'avoir des avis partagé afin de se faire sa propre opinion , je vais attendre le post de unparia pour avoir ses explications.
    Et comme nous sommes là par passion, s'instruire, évoluer …

    Edit : merci Philippe pour ces précisions
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  12. #12
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Re
    Et je prie chacun d'excuser mon retard à répondre (d'autres petites préoccupations).
    Voilà donc l'intérêt de préciser EntireRow :
    Le pointeur dont j'ai parlé plus haut ne contient pas que l'adresse des cellules d'une plage.
    Il contient par ailleurs, pour s'y retrouver, de quoi identifier à qui (feuille) appartiennent ces cellules.
    Mais ce n'est pas tout. Il contient également de quoi identifier une éventuelle plage de cellules qui "engloberait" la plage de cellules à traiter.
    Cette manière de créer le pointeur est TOUJOURS la même, quel que soit le contexte.
    Si ce que je dis là peut paraître flou, faites donc l'expérience suivante (elle est "parlante")
    Une feuille avec des données (au moins 5 colonnes et deux lignes pour bien visualiser ce qui va se passer :
    - test 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set plage = Range("A1:C1")
    plage.Rows(1).Delete
    Oh ! VBA a compris que l'on ne voulait détruire que le 1er rang de la plage plage (et donc uniquement de la colonne A à la colonne C incluse). Et de manière assez cavalière, il a supprimé et décalé d'autorité (sans la moindre demande de confirmation)
    - test 2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set plage = Range("A1:C1")
    plage.Rows(1).Entirerow.Delete
    Cette fois-ci, par contre; il a bien compris que l'on ne voulait pas se contenter d'une limitation de la suppression aux seules 3 premières colonnes et a donc supprimé la ligne entière concernée de la feuille.
    - test 3
    recommençons maintenant le test 1, mais en voulant cacher le rang 1 et non le supprimer.
    Ah ! cette fois-ci VBA ne s'est pas contenté (comment l'aurait-il pu, d'ailleurs ?) de cacher uniquement les données de la ligne 1 des colonnes A à C. Il a, toujours d'aurorité, caché toute la ligne 1.
    Tout cela est beau, allez-vous me dire, mais le cas ne se pose donc réellement qu'en cas de suppression ET d'un range lui-même à l'intérieur d'une plage. On n'a donc pas à s'en préoccuper dans le cas de figure exposé dans la première discussion ... --->>
    Réponse : Il faut oui, s'en préoccuper, si l'on veut éviter de faire travailler inutilement VBA.
    Pourquoi ? Parce que (exposé au 3ème paragraphe du 1er message), VBA utilise TOUJOURS la même méthode, quel que soit le traitement à faire ensuite :

    a)- il commence par regarder dans le pointeur créé le conteneur (la feuille) de cette plage
    b)-il regarde dans le pointeur créé si le traitement est à faire sur une plage au sein d'une autre ou d'une plage au sein de toute la feuille
    c)- il regarde ENFIN l'adresse de la plage contenant la plage à traiter
    et prend alors SES décisions.
    Lorsque, toutefois, Entirerow est précisé, il "saute" l'étape b), dont il n'a plus besoin et gagne un peu de temps.
    Voilà pourquoi il n'est JAMAIS inutile, bien au contraire, de le préciser, ce EntireRow, y compris si la plage "principale" est un ou plusieurs rang(s) entier(s), dont VBA ne saurait qu'il(s) l'est/le sont, que lors de l'étape c.
    Voilà ...
    J'espère que j'ai su (je l'aurais au moins tenté) m'exprimer sans nécessité d'utiliser un dictionnaire de traduction du chinois.
    Amitiés.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  13. #13
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut
    unparia,
    Merci pour tes explications.
    ce soir je me coucherai moins bête
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  14. #14
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Pas de quoi, RyuAutodidacte
    Essaye maintenant de profiter de l'enseignement du test 1.
    Laisse pour cela libre cours à ton imagination et ton inventivité personnelles.
    Juste quelques pistes (attributions aléatoires, organisation de tâches alternées en rotations, organisation de tournois ...)
    Et ... et quoi d'autre ? Je te laisse deviner ... tu vas trouver, même si cela te prendra du temps ...
    Amitiés
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  15. #15
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    je n'ai pas tou lu les post qui ont suivi je vais le faire
    mais en attendant
    @RYU
    Dans l'un on canalise les informations dans une colonne pour ensuite étendre en lignes avec entirerow
    Tandis que le second l'information lignes est déjà inscrite
    c'est la ou le bas blesse

    quand tu tu fait

    set plage =rows("10:12") tu sélectionne dans plage la range A10;dercol12") dercol représente la dernière adresse en columns .count
    selon 2007 ou plus
    donc quand tu sélectionne une ou plusieurs ligne puis entirerow ca me turlupine le tarin

    tandis que

    cell(1,1).entirerow ou range ("x,y").entirerow (x et y représente une cellule ( je précise puisque tu aime les maths)

    c'est plus logique
    après bon c'est pas grave mais autant prendre le bon pli plutôt qu'après hein !!!
    et appeler un chat un chat
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  16. #16
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re bon j'ai lu la réponse de Unparia

    alors perso je pense que
    oui en effet un "set range =" englobe plein de chose "

    1. le parent(sheets)
    2. l'adesse range
    3. les valeurs des contenus
    4. et même si on va plus loin le classeur name avec parent.name
    5. on peut même remonter a l'application

    OK

    mais je vois toujours pas l'utilité de faire

    set plage =union (...blablabla")

    plutôt
    que set plage=range("blablabla").entirerow

    tout du moins dans ce cas précis (suppression ou hidden)



    maintenant si on devait exploiter cette plage comme tableau ou la disséquer peut être que oui union des rows sera requis
    e t encore de cela j'en sus pas convaincu


    c'est un peu comme mon pot qui vient de s'acheter un 4x4 vitara et qui reste en 4x4 meme en pleine ville
    quand je lui dis qu'il consomme plus en en mode 4 il me répond oui mais elle a plus de pèche
    a croire que se sont les feux et panneaux de signalisation qui lui cours âpres

    enfin tout ca pour nous occuper un peu hein !! pas vrai

    et entre nous

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set LigCache = Union(Rows("33:41"), Rows("45:48"), Rows("52:52"), Rows("58:61"))
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set LigCache =range ("A33:A41,A45:A48,A52:A52,A58:A61").entirerow
    =memechose

    pour unparia
    ceci marchera pour les deux

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    msgbox "sheets " & LigCache.parent.name & vbcrlf  a "range " & LigCache.address
    voila
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  17. #17
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    mais je vois toujours pas l'utilité de faire

    set plage =union (...blablabla")

    plutôt
    que set plage=range("blablabla").entirerow

    tout du moins dans ce cas précis (suppression ou hidden)
    Il n'est nullement question d' "utilité". C'est rigoureusement la même chose avec deux notations différentes. Quand je dis "la même chose", je dis bien "la même chose" et pas seulement "le même résultat". La notation avec Union est la plus rigoureuse des deux, c'est tout. En discuter, serait un peu comme discuter de l'utilisation de [A5], plutôt que Range("A5") dans le code que l'on écrit. Rien d'autre. Raison pour laquelle, d'ailleurs, je n'avais pas voulu m'attarder sur ce point-là, que tu avais soulevé. Mais puisque tu y reviens, voilà.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  18. #18
    Nouveau Candidat au Club
    Homme Profil pro
    Intervenant temps réel
    Inscrit en
    Février 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Intervenant temps réel
    Secteur : Service public

    Informations forums :
    Inscription : Février 2014
    Messages : 6
    Points : 1
    Points
    1
    Par défaut RE,,, Moi néophyte difficile de comprendre
    Bonsoir RyuAutodidacte et patricktoulon;

    vous êtes gentils, mais difficile a suivre. Je comprend pas trop vos discours, surtout toi patricktoulon, même si je suis d'accord avec le peu que je comprend.
    déjà RyuAutodidacte je te remercie pour ton aide, ton code marche.
    mais elle a un petit a coup. c'est pour cela que je préfère utiliser celle-ci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub Post()
        Dim lgn, i%                         ' déclaration de la variable . % = Integer Numérique Nombre entier de -32'768 à 32'767. %.               '
        lgn = Array("33:41", "45:48", 52, "58:61", "66:69", 75, 80, 85, "88:227")     ' liste de la condition i
        Application.ScreenUpdating = False     
        With Worksheets("Ligne A")               ' Avec la feuille ("Ligne A")
        ActiveSheet.Unprotect                       ' déprotéger la feuille active
            .Rows.Hidden = False                    ' les lignes cachées = faux. c'est les lignes non cachées
            For i = 0 To UBound(lgn)               ' Pour les lignes de la condition i, elles sont liées à la mesure 0
                .Rows(lgn(i)).Hidden = True      ' Les lignes de la condition i qui sont cachées c'est = vrai
            Next i  'suivant la liste de la condition i
            ActiveSheet.Protect    'Protéger la feuille active.
        End With  ' fin Avec
    End Sub
    Elle marche très bien MAIS!!! Est-ce que par hasard vous pourriez ajouter une condition dans le genre (SI).

    La ligne se cache que si la ligne du dessus à la cellule fusionnée des colonnes ("C:H") est vide. Sinon elle reste visible.

    Mieux comprendre si dit comme ça :
    Les lignes se cachent sauf si la cellule fusionnée des colonne C:F de la ligne -1(du dessus) est différente de "" "" (rien).

    Enfin si vous m'avez compris et que vous avez la solution c'est trop cool.

    cordialement a vous.

  19. #19
    Nouveau Candidat au Club
    Homme Profil pro
    Intervenant temps réel
    Inscrit en
    Février 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Intervenant temps réel
    Secteur : Service public

    Informations forums :
    Inscription : Février 2014
    Messages : 6
    Points : 1
    Points
    1
    Par défaut re code plus clair
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub MasquerLignes()
        Dim lgn, i%
        lgn = Array("33:41", "45:48", 52, "58:61", "66:69", 75, 80, 85)
        Application.ScreenUpdating = False
        With Worksheets("Ligne A")
            .Rows.Hidden = False
            For i = 0 To UBound(lgn)
                .Rows(lgn(i)).Hidden = True
            Next i
        End With
    End Sub

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2013] Une macro pour cacher une colonne qui ne fonctionne plus
    Par DavidCsame dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 02/03/2015, 14h17
  2. Réponses: 3
    Dernier message: 20/02/2014, 15h34
  3. Macro pour grouper des lignes sur une plage qui peut varier
    Par RichRich59 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 26/01/2011, 13h04
  4. Macro pour grouper des lignes sur une plage qui peut varier
    Par girardinho dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 26/07/2010, 09h43
  5. Excel : Macro pour positionnement sur ligne
    Par danielh dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/10/2006, 08h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo