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 :

Problème '92' avec macro


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Femme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2012
    Messages : 6
    Par défaut Problème '92' avec macro
    Bonjour,

    Je me permets de poster ici car j'ai un petit problème avec une macro.

    Tout à l'heure lorsque je l'ai construite ça marchait nickel, et lorsque j'ai fermé puis ouvert à nouveau le tableur, ça ne marchait plus, la fonction "remplacer ... par ..." buggait : elle s'applique dans toutes les cellules au lieu de s'appliquer uniquement dans la cellule déclarée.

    L'erreur en question est la 92 : "variable bloc with non définie"

    Je vous mets le code vba en espérant que quelqu'un puisse me dire qu'est ce qui cloche.

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    Sub real_mak()
    '
    ' real_mak Macro
     
    a = Range("J15")
    b = Range("K15")
    c = Range("J16")
    d = Range("K16")
     
        Range("J15").Select
        ActiveCell.Replace What:="=", Replacement:="", LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
            ReplaceFormat:=False
        Cells.Find(What:="=", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
            xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
            , SearchFormat:=False).Activate
     
        Range("K15").Select
        ActiveCell.Replace What:="=", Replacement:="", LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
            ReplaceFormat:=False
        Cells.Find(What:="=", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
            xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
            , SearchFormat:=False).Activate
     
        Range("J16").Select
        ActiveCell.Replace What:="=", Replacement:="", LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
            ReplaceFormat:=False
        Cells.Find(What:="=", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
            xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
            , SearchFormat:=False).Activate
     
        Range("K16").Select
        ActiveCell.Replace What:="=", Replacement:="", LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
            ReplaceFormat:=False
        Cells.Find(What:="=", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
            xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
            , SearchFormat:=False).Activate
     
           Range("K16").Select
        ActiveCell.Replace What:="G", Replacement:="H", LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
            ReplaceFormat:=False
        Cells.Find(What:="G", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
            xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
            , SearchFormat:=False).Activate
     
        Columns("L:IV").Select
        Selection.Replace What:=a, Replacement:=b, LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
            ReplaceFormat:=False
     
    Columns("L:IV").Select
        Selection.Replace What:=c, Replacement:=d, LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
            ReplaceFormat:=False
     
        Range("M260").Select
     
    End Sub
    Merci d'avance pour l'aide que vous pourrez m'apporter.

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonsoir,

    Ca me paraît normal. Si "=" n'est pas trouvé,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        Cells.Find(What:="=", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
            xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
            , SearchFormat:=False).Activate
    renvoie une erreur 91

  3. #3
    Membre du Club
    Femme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2012
    Messages : 6
    Par défaut
    Comment faire pour qu'il n'aille pas chercher ailleurs s'il n'y a pas de "=" dans la cellule ?

    Et là je réessaie en mettant un égal et ça me remplace toujours dans toute la feuille...

    Ouais en gros quand je configure en "xlpart", il me trouve bien l'élément à remplacer mais il me remplace dans toute la feuille, et quand je met "xlwhole", il me trouve pas les éléments dans la cellule... Difficile de savoir comment arranger mon problème...

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Si tu disais ce que tu veux faire au juste ?

  5. #5
    Membre du Club
    Femme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2012
    Messages : 6
    Par défaut
    Alors en gros :

    je cherche à actualiser mes calculs en fonction de la plage de données que je choisis, afin d'avoir un résultat par "ligne", et plus précisément "par terme" de ma série.

    Le truc est qu'un grand nombre de calculs doivent être faits dans la feuille, ce qui fait que je peux pas simplement faire une petite formule magique sur chaque ligne de ma série.

    Donc j'ai voulu faire un truc pour que je puisse (au mieux au cas par cas), actualiser les calculs en fonction de la plage de cellules que je choisis.

    De ce fait, j'ai voulu faire un truc de ce style :

    Dans une cellule quelconque, je sélectionne la plage de données choisie en faisant "=A1:A10"

    Puis, ma fameuse macro enlève le égal dans la formule pour ne garder que le "A1:A10" dans la cellule, sans rien d'autre.

    Puis, cette même macro copie le contenu de la formule en question, puis la colle dans le "remplacer par" du formulaire rechercher / remplacer" après avoir collé l'ancienne plage de données dans la case "rechercher".

    Résultat : les calculs sont actualisés dans les quelques 120 000 cellules avec la nouvelle plage de données choisie.

    Ensuite le top serait de pouvoir copier le résultat final tout en bas et de le coller dans la cellule de départ (où la fonction aurait été tapée), mais bon ça me parait difficile vu que la macro se barre partout dans la feuille pour faire plusieurs tâches, comment lui faire comprendre qu'il faut qu'elle colle le résultat final dans telle cellule (à moins de déclarer ladite cellule comme une variable, mais bon...)

    D'où la construction de cette macro si "artisanale"

    Voilà j'espère que vous aurez eu le courage de lire tout ce charabia^^

  6. #6
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Dans une cellule quelconque, je sélectionne la plage de données choisie en faisant "=A1:A10"

    Puis, ma fameuse macro enlève le égal dans la formule pour ne garder que le "A1:A10" dans la cellule, sans rien d'autre.
    Je n'ai pas compris pourquoi tu mets le signe "=" pour l'enlever...
    Dans un module standard, mets :
    Dans le module de la feuille, mets :

    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
    Private Sub Worksheet_Change(ByVal Target As Range)
        If Target.Count = 1 And Target.Formula <> "" And Left(Target.Formula, 1) = "=" Then
            Application.EnableEvents = False
            Target.Value = Right(Target.Formula, Len(Target.Formula) - 1)
            Cells.Replace Res, Target.Value, xlPart
            Application.EnableEvents = True
        End If
    End Sub
     
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        If Target.Count = 1 And Target.Value <> "" Then
            If Target.HasFormula Then
                Res = Right(Target.Formula, Len(Target.Formula) - 1)
            End If
        End If
    End Sub
    Entre ensuite les valeurs comme indiqué; les macros se déclencheront automatiquement.

Discussions similaires

  1. problème de mise en page avec macros
    Par gaihdriah dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 13/05/2009, 16h24
  2. Problème ouverture Internet Explorer avec macro
    Par pimter dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 03/01/2009, 18h37
  3. Problème avec macro variables
    Par auredura dans le forum Macro
    Réponses: 8
    Dernier message: 17/11/2008, 16h30
  4. Problème ouverture Internet Explorer avec macro
    Par bmxer31 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 02/08/2008, 22h09
  5. [Macro]Problème d'importation .CSV avec macro
    Par Eric Harvey dans le forum VBA Access
    Réponses: 8
    Dernier message: 12/04/2007, 17h04

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