Mettre un = devant toutes les cellules

Résolu/Fermé
inconnu810 Messages postés 4 Date d'inscription dimanche 23 septembre 2018 Statut Membre Dernière intervention 23 septembre 2018 - Modifié le 23 sept. 2018 à 19:41
Mike-31 Messages postés 18310 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 29 mars 2024 - 23 sept. 2018 à 20:54
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




A voir également:

10 réponses

jee pee Messages postés 39591 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 19 avril 2024 9 225
23 sept. 2018 à 19:36
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
Vaucluse Messages postés 26496 Date d'inscription lundi 23 juillet 2007 Statut Contributeur Dernière intervention 1 avril 2022 6 394
Modifié le 23 sept. 2018 à 19:42
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
Mike-31 Messages postés 18310 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 29 mars 2024 5 073
Modifié le 23 sept. 2018 à 19:54
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
jordane45 Messages postés 38139 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024 4 649
23 sept. 2018 à 19:56
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
jee pee Messages postés 39591 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 19 avril 2024 9 225
23 sept. 2018 à 19:49
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Vaucluse Messages postés 26496 Date d'inscription lundi 23 juillet 2007 Statut Contributeur Dernière intervention 1 avril 2022 6 394
23 sept. 2018 à 19:49
Salut Mike
c'est effectivement nettement plus simple
crdlmnt
1
Mike-31 Messages postés 18310 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 29 mars 2024 5 073
Modifié le 23 sept. 2018 à 20:06
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
inconnu810 Messages postés 4 Date d'inscription dimanche 23 septembre 2018 Statut Membre Dernière intervention 23 septembre 2018
23 sept. 2018 à 20:26
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
Mike-31 Messages postés 18310 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 29 mars 2024 5 073
Modifié le 23 sept. 2018 à 20:35
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
Mike-31 Messages postés 18310 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 29 mars 2024 5 073
Modifié le 23 sept. 2018 à 21:02
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
inconnu810 Messages postés 4 Date d'inscription dimanche 23 septembre 2018 Statut Membre Dernière intervention 23 septembre 2018
23 sept. 2018 à 20:13
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
inconnu810 Messages postés 4 Date d'inscription dimanche 23 septembre 2018 Statut Membre Dernière intervention 23 septembre 2018
23 sept. 2018 à 20:41
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