Mettre un = devant toutes les cellules

Résolu
Bonjour,
J'ai pleins de cellules dans ma base de données qui comportent des valeurs textes telle que "65-2", ou "53+4"
Ma base de donnée contient 17000 lignes, impossible de les faire une par une.
Je voudrais donc que ça m'affiche 63 au lieu de 65-2 en gros que ça met un = qui fonctionne devant. Ou même une alternative à ca.
J'aimerai savoir si c'est possible à faire ou même sur vba ça me va.

Merci



10 réponses

  1. Modérateur
    Bonjour,

    Tu devrais nous mettre un exemple de quelques lignes de ton fichier pour voir sa complexité.

    Car moi ce que je ferais, j'enregistre le fichier en texte .csv, je le modifie par un editeur de texte, puis je le récupère dans excel.

    Voire, je fais un copier de la colonne, un coller dans un editeur de texte, je rajoute le = en debut de chaque ligne, un copier de tout le texte et un coller dans la colonne excel.

    Cdlt
    1
    1. Contributeur
      Bonjour
      pour un texte en A1, la formule en B1:

      =SI(NB.SI(A1;"*-*");GAUCHE(A1;TROUVE("-";A1)-1)-DROITE(A1;NBCAR(A1)-TROUVE("-";A1));GAUCHE(A1;TROUVE("+";A1)-1)+DROITE(A1;NBCAR(A1)-TROUVE("+";A1)))

      à tirer sur la hauteur utile, ou alors pur faire plus vite:
      placer le curseur dans la case adresse à gauche de la barre de formule
      taper l'adresse du champ à remplir de formule ex: B1:B17000 ou de la plage et touche ENTER

      tout le champ est sélectionné
      placez le curseur dans la barre de formule, inscrivez la formule selon la 1° cellule sélectionnée
      et touche ctrl +touche enter pour entrer tout le champ d'un coup
      une fois les résultats obtenus, faites un copier /collage spécial valeur pour conserver les résultats sans les formules
      Respecter bien tous les signes
      crdlmnt

      1
      1. Bonsoir,

        problème traité par VBA si tu as quelques notions
        Private Sub CommandButton1_Click()
        Dim x As Range
        On Error Resume Next
        For Each x In [A2:A100]
        If x <> "" Then x = "=" & x
        Next x
        End Sub
        

        EDIT : Ajout des balises de code

        1
        1. Modérateur
          Bonjour,
          Petite correction si on veut "conserver" la formule
          Private Sub CommandButton1_Click()
          Dim x As Range
          On Error Resume Next
          For Each x In [A2:A100]
          If x <> "" Then x.FormulaLocal = "=" & x
          Next x
          End Sub
          
          0
      2. Modérateur
        Avec ton exemple, comme la position des cellules concernées est aléatoire, j’enregistre dans un texte .cvs, avec un editeur évolué (notepad++) je remplace tous les ; par ;= puis je mets un = en début de chaque ligne, enregistre le .cvs je l'ouvre sous excel je fais un copier de toute la feuille et un coller spécial/valeur seulement dans un nouveau fichier.
        1
        1. Contributeur
          Salut Mike
          c'est effectivement nettement plus simple
          crdlmnt
          1
          1. Re,

            Code VBA complété et à adapter à la plage, code pour traiter la plage A2:G100

            Private Sub CommandButton1_Click()
            Dim x As Range
            On Error Resume Next
            For Each x In [A2:B100]
            If x Like "*-*" Or x Like "*+*" Then x.FormulaLocal = "=" & x
            Next x
            End Sub

            1
            1. Toujours excel qui plante. Y a t il d'autres lignes à rajouter ou quelque chose qui m'échappe ? parce que je me souviens vaguement de comment ça fonctionne. j'ai recopié le code changer la plage et exécuté tel quel
              0
          2. Re,

            le code est lancé à partir d'un bouton ActiveX

            onglet développeur/module Contrôles/Insérer/clic sur le bouton dans les contrôles activex
            Double clic sur le bouton que tu viens de créer, ce qui va ouvrir le VBA

            et tu verras ce début de code
            Private Sub CommandButton1_Click()

            End Sub

            entre les deux lignes de code colle ce bout de code
            Dim x As Range
            On Error Resume Next
            For Each x In [A2:B100]
            If x Like "*-*" Or x Like "*+*" Then x.FormulaLocal = "=" & x
            Next x

            ce qui devrait te donner
            Private Sub CommandButton1_Click()
            Dim x As Range
            On Error Resume Next
            For Each x In [A2:B100]
            If x Like "*-*" Or x Like "*+*" Then x.FormulaLocal = "=" & x
            Next x
            End Sub


            Adapte la plage à traiter [A2:B100]
            reviens sur ta feuille de calcul et libère le Mode création

            ATTENTION LE FICHIER DOIT ÊTRE ENREGISTRE SOIT EN .XLSM ou éventuellement avec l"ancienne extension .XLS
            1
            1. Re,

              Mais j'y pense tu as des valeurs et des cellules contenant ce genre de valeur "65-2", ou "53+4"
              et la modification change ces valeurs sous forme de formule du genre =65-2 ce qui te donne le résultat souhaité mais peut être souhaites tu avoir directement le résultat et non la formule

              pour faire simple, teste ce code
              Private Sub CommandButton1_Click()
              Dim x As Range
              On Error Resume Next
              Application.ScreenUpdating = False
              For Each x In [A2:B100]
              If x Like "*-*" Or x Like "*+*" Then
              x.FormulaLocal = "=" & x
              x.Value = x.Value
              End If
              Next x
              Application.CutCopyMode = False
              Application.ScreenUpdating = True
              End Sub

              1
              1. Vaucluse, j'ai essayé de comprendre ta solution mais c'est très complexe pour moi. Je pense que je dois me concentrer beaucoup de temps pour comprendre tout les SI.
                Jee pee, je n'ai jamais fais ça avec un fichier texte mais ça m'a l'air pas mal aussi.
                Mike, j'ai eu quelques cours de VBA l'année dernière. Même si j'ai pas mal oublié ça reste faisable si vous me guidez un petit peu. J'ai activé le ruban développeur, ouvert un module et j'ai copié exactement votre code mais en changeant les cases de mes données :
                Private Sub CommandButton1_Click()
                Dim x As Range
                On Error Resume Next
                For Each x In [A2:AL17982]
                If x <> "" Then x = "=" & x
                Next x
                End Sub

                Je ne me souviens plus vraiment comment ça marche. En exécutant cela tel qu'il est ça fait planter mon excel. Y a t il autre chose à comprendre ?
                0
                1. Alors j'ai compris mon erreur : car en testant ma méthode d'avant avec peu de cellules (une dizaine par exemple) ça fonctionne et en le faisant pour toutes ça plantait. Je pense que ça ne supportait pas ce volume, pourquoi je ne sais pas.
                  En reprenant avec le bouton de contrôle comme vous l'avez indiqué ça fonctionne pour toutes les cellules que je voulais ! Magique merci j'ai passé pas mal d'heures sur ça. J'étais certain qu'une formule VBA pouvait résoudre mon problème.

                  Merci beaucoup à tous.
                  0