Mettre un = devant toutes les cellules

Résolu
inconnu810 Messages postés 6 Statut Membre -  
Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   -
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. jee pee Messages postés 9445 Date d'inscription   Statut Modérateur Dernière intervention   9 984
     
    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
  2. Vaucluse Messages postés 27336 Date d'inscription   Statut Contributeur Dernière intervention   6 453
     
    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
  3. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    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. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
       
      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
  4. jee pee Messages postés 9445 Date d'inscription   Statut Modérateur Dernière intervention   9 984
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Vaucluse Messages postés 27336 Date d'inscription   Statut Contributeur Dernière intervention   6 453
     
    Salut Mike
    c'est effectivement nettement plus simple
    crdlmnt
    1
  7. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    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. inconnu810 Messages postés 6 Statut Membre
       
      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
  8. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    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
  9. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    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
  10. inconnu810 Messages postés 6 Statut Membre
     
    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
  11. inconnu810 Messages postés 6 Statut Membre
     
    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