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 :

Supprimer un mot dans une cellule sur plusieurs onglet


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 8
    Points : 5
    Points
    5
    Par défaut Supprimer un mot dans une cellule sur plusieurs onglet
    Bonjour

    Voila, j'ai un soucis, j'ai créer un bouton où lorsque l'on clique dessus une fenêtre apparait pour nous demander de rentrer le nom du patient que l'on souhaite supprimer puis demande le nombre de semaine où l'on veut le supprimer.
    La macro que j'ai créer marche très bien sur l'onglet actif (là où on clique sur le bouton) mais ne marche pas sur les autres pages. Je vois qu'il trouve le mot, il le sélectionne mais ne le supprime pas et je ne comprend pas pourquoi !

    Est ce que quelqu'un saurait pourquoi?

    Voici le code qui s'exécute :

    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
    21
    22
    23
    24
    Sub Macro1()
    '
    ' Macro1 Macro
    '
     
    '
         Dim resultat As Integer
         Dim mot As String
         Dim Cel As Range, Plage As Range
     
         mot = InputBox("Quel patient voulez-vous supprimer ?", "Effacer le patient")
         resultat = InputBox("Pour combien de semaine souhaitez-vous supprimer ce patient ?", "Effacer le patient") 'La variable reçoit la valeur entrée dans l'InputBox
         Set Plage = Range("A4:AA61")
     
         For i = ActiveSheet.Index To (ActiveSheet.Index + resultat - 1)
            Sheets("Semaine " & i).Select
            For Each Cel In Plage
            If Cel Like "*" & mot & "*" Then
                Cel.ClearContents
            End If
            Next Cel
        Next
     
    End Sub

  2. #2
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 136
    Points : 9 970
    Points
    9 970
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    voilà ce qui arrive quand on ne rattache pas des ranges à leur feuille


    ta ligne 13, met là plutôt entre la ligne 16 et 17

    là, ta variable Plage est définie sur la feuille active en début de macro ... ensuite tu boucles sur les feuilles mais tu n'as pas réaffecté Plage à la feuille analysée

  3. #3
    Membre émérite Avatar de antonysansh
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Mai 2014
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 1 115
    Points : 2 439
    Points
    2 439
    Par défaut
    Bonjour

    Avec Set Plage = Range("A4:AA61") tu déclares une plage de la feuille active.
    Donc si tu tests MsgBox plage.Parent.Name tu auras toujours le nom de la feuille active lors du Set sur Plage.

    Tu dois donc refaire Set Plage = Range("A4:AA61") a chaque sélection d'une nouvelle feuille.

    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
    21
    22
    23
    24
    Sub Macro1()
    '
    ' Macro1 Macro
    '
     
    '
         Dim resultat As Integer
         Dim mot As String
         Dim Cel As Range, Plage As Range
     
         mot = InputBox("Quel patient voulez-vous supprimer ?", "Effacer le patient")
         resultat = InputBox("Pour combien de semaine souhaitez-vous supprimer ce patient ?", "Effacer le patient") 'La variable reçoit la valeur entrée dans l'InputBox
     
         For i = ActiveSheet.Index To (ActiveSheet.Index + resultat - 1)
            Sheets("Semaine " & i).Select
            Set Plage = Range("A4:AA61")
            For Each Cel In Plage
            If Cel Like "*" & mot & "*" Then
                Cel.ClearContents
            End If
            Next Cel
        Next
     
    End Sub
    PS : Il est toujours conseillé de préciser les parents d'un Objet.
    Exemple : ThisWorkbook.ActiveSheet.[A1] plutôt que [A1]

    EDIT : Joe, t'es vraiment trop rapide

  4. #4
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut

    Bonjour, bonjour !

    Soit dit en passant, définir une variable pour une plage de cellules
    pour un usage unique est un peu cul-cul, pour ne pas dire con-con !

    Autant utiliser directement Worksheets.Range sans Select, cela fait gagner du temps d'exécution et évite cette erreur …

    Bye-Bye !

    _____________________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

    _____________________________________________________________________________________________________
    Je suis Charlie-Charlie - Je suis Bardo-Bardo

  5. #5
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    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 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut heu
    Bonjour
    a l'inverse de Marc je pense qu'une variable global a toute sa place ici mais en string
    et le select tu le vire


    ou alors en dur dans la ligne si la plage est identique pour tous les sheets
    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
    Dim resultat As Integer
         Dim mot As String
         Dim Cel As Range, Plage As string
     
         mot = InputBox("Quel patient voulez-vous supprimer ?", "Effacer le patient")
         resultat = InputBox("Pour combien de semaine souhaitez-vous supprimer ce patient ?", "Effacer le patient") 'La variable reçoit la valeur entrée dans l'InputBox
         Plage = "A4:AA61"' 'en string 
     
         For i = ActiveSheet.Index To (ActiveSheet.Index + resultat - 1)
                    For Each Cel In Sheets("Semaine " & i).range(Plage)
           'ou sans variable !!!!  For Each Cel In Sheets("Semaine " & i).range( "A4:AA61" )
     If Cel Like "*" & mot & "*" Then
                Cel.ClearContents
            End If
            Next Cel
        Next

  6. #6
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut




    Salut Patrick !

    Ta ligne de code n°11 est la parfaite illustration de mon précédent message !

  7. #7
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    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 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut re

  8. #8
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Merci beaucoup à tous le monde de m'avoir répondu !! Ca marche !!!!

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

Discussions similaires

  1. Réponses: 12
    Dernier message: 30/06/2014, 22h04
  2. Réponses: 3
    Dernier message: 20/01/2014, 09h28
  3. [XL-2003] Supprimer un mot dans une cellule
    Par FCL31 dans le forum Macros et VBA Excel
    Réponses: 22
    Dernier message: 02/07/2009, 17h09
  4. [TStringGrid] Une cellule sur plusieurs lignes.
    Par Caine dans le forum Delphi
    Réponses: 15
    Dernier message: 28/03/2007, 12h53
  5. [TSQL] calculer le nombre de mot dans une cellule
    Par ricachu dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 31/07/2006, 11h12

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