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 :

Remplacer la valeur d'une cellule par une formule


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2017
    Messages : 57
    Points : 31
    Points
    31
    Par défaut Remplacer la valeur d'une cellule par une formule
    Bonjour à tous,

    J'ai une feuille Excel contenant des millions de données et certaines cases contiennent "--". Je voudrais pouvoir via un code VBA, remplacer ces "--" par une formule renvoyant l'adresse de la cellule située au-dessus de la cellule contenant les "--". Est-ce possible ? J'ai le code suivant qui pour l'instant remplace "--" par "":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        Cells.Replace What:="--", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False

  2. #2
    Membre régulier
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Juillet 2010
    Messages
    155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : Juillet 2010
    Messages : 155
    Points : 96
    Points
    96
    Par défaut
    si j'ai bien compris ta demande le code est le suivant je n'ai pas travaillé sur toutes les cellules mais seulement sur celles qui sont selectionnées, ça te permettra de tester plus facilement, si tu fais sur toutes les cellules attention ça prend du temps :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Sub Macro2()
     
     
    For Each cellule In Selection.Cells
     If cellule.Value = "--" Then
     cellule.Value = cellule.Offset(-1, 0).FormulaR1C1
     End If
     Next
     
    End Sub

  3. #3
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 138
    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 138
    Points : 9 972
    Points
    9 972
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    .Address au lieu de .FormulaR1C1
    Il veut la formule faisait référence à la cellule du dessus ... ou simplement les coordonnées de la cellule du dessus ? Le doute est permis

    Attention à ne pas le faire sur la ligne 1 ... et souhaites-tu vraiment une formule ou la valeur seulement te suffit ? Auquel cas utiliser .Value au lieu de .Address

  4. #4
    Membre éprouvé
    Homme Profil pro
    ingénieur d'étude
    Inscrit en
    Juin 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur d'étude
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 563
    Points : 1 141
    Points
    1 141
    Par défaut
    Bonjour à vous,

    Si j'ai bien compris la demande, le code à utiliser serait plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cellule.FormulaR1C1 = "=R[-1]C"
    Cordialement

  5. #5
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Pour alléger un peu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub Macro2()
       Dim cellule As Range
       For Each cellule In ActiveSheet.UsedRange
          If cellule.Value = "--" Then cellule.FormulaR1C1 = "=R[-1]C"
       Next cellule
    End Sub
    Edit : Ooops, j'ai modifié mon message au lieu d'en créer un autre. Pas grave, ce code est un peu mieux que le précédent.

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2017
    Messages : 57
    Points : 31
    Points
    31
    Par défaut
    Merci beaucoup à tous, ca fonctionne Cependant, les feuilles étant très lourdes, le code fait tout planter... Je vais essayer de réfléchir à une autre solution

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2017
    Messages : 57
    Points : 31
    Points
    31
    Par défaut
    Citation Envoyé par Menhir Voir le message
    Pour alléger un peu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub Macro2()
       Dim cellule As Range
       For Each cellule In ActiveSheet.UsedRange
          If cellule.Value = "--" Then cellule.FormulaR1C1 = "=R[-1]C"
       Next cellule
    End Sub
    Edit : Ooops, j'ai modifié mon message au lieu d'en créer un autre. Pas grave, ce code est un peu mieux que le précédent.
    J'y avais pensé aussi avant de voir ta correction et en effet, ca ne plante plus (même si ca reste encore un peu long) Encore un grand merci !

  8. #8
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Points : 3 666
    Points
    3 666
    Par défaut
    Bonjour,

    même si ca reste encore un peu long
    Si jamais ce n'était pas à usage unique :
    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
    Sub test()
        Dim pl As Range, c As Range, firstAddress As String
        With Worksheets(1).Cells
            Set c = .Find("--", , xlValues, xlWhole)
            If Not c Is Nothing Then
                firstAddress = c.Address
                Do
                    If pl Is Nothing Then
                        Set pl = c
                    Else
                        Set pl = Union(pl, c)
                    End If
                    Set c = .FindNext(c)
                Loop While Not c Is Nothing And c.Address <> firstAddress
            End If
        End With
        If Not pl Is Nothing Then pl.FormulaR1C1 = "=R[-1]C"
        Set pl = Nothing
    End Sub
    eric

  9. #9
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par Babar09 Voir le message
    même si ca reste encore un peu long
    Tu peux ajouter quelques bricoles qui évitent les régénérations pendant l'exécution.
    Fouille là-dedans :
    https://msdn.microsoft.com/fr-fr/lib.../ff841201.aspx
    https://msdn.microsoft.com/fr-fr/lib.../ff821260.aspx
    https://msdn.microsoft.com/fr-fr/lib.../ff193498.aspx

    Ne pas oublier de remettre les valeurs initiales en fin de code.

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 24/02/2017, 12h03
  2. Réponses: 2
    Dernier message: 29/07/2016, 16h49
  3. [Toutes versions] coller les données d'une plage d'une cellule dans une cellule d'une autre feuille[VBA]
    Par arthson dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 24/01/2012, 17h37
  4. [XL-2002] Macro de comparaison d'une cellule d'une feuille avec une cellule d'une autre feuille.
    Par steelydan dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/09/2010, 12h59
  5. Remplacer une lettre par une autre dans une cellule
    Par Philippe76 dans le forum Excel
    Réponses: 1
    Dernier message: 09/01/2010, 21h26

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