One possible approach is to use something that knows how to transform a VB6 program. It would need to parse VB6, pull out all the literal text strings, offer them to you for translation, and substitute your replacements for the original strings. Actually, you want two passes, the first to produce the set enabling you to translate the ones of interest, and the second to substitute your designated translations if any. You likely have some debugging to do, because usually there is something that depends on the string size.
How you go about converting the strings from one language to another is up to you. As other posters suggest, you could use an online translator and take what you get. I would expect you will do better if you have a human being do it. They generally only have to focus on the meaning of the strings, since they are extracted from the code, but you will also find cases where the translation depends on what the code is doing, and so a programmer will need to be involved.
Our DMS Software Reengineering Toolkit with its Visual Basic Front End could be easily configured to do this. DMS provides generic parsing and transformation machinery; the VB front end provides the details about Visual Basic 6 (in your case).
A variation of this idea is to replace translated literal strings with references to "resources" (what amounts to a lookup table indexed by a string number) which contain either the original(French) or new (English). This solution produces something close to what people doing internationalization want to do. (This doesn't take care of dates and currency formats; those require data flow analysis to determine computations leading to/from date or currency operations. While not needed for literal string conversion, DMS provides flow analysis, so it could be configured to do this, too.)
If you have precise information about the location of the strings in the text (e.g., starting line/column, ending line/column), you can do this another way: use that precise information to extract the strings, and then use that same precise information to re-insert the translations. To avoid damaging the string locatons, you should replace strings starting at the end of each file first, working backwards throught the file. This should be straightforward to do on a buffer of text.
Our Source Code Search Engine (SCSE) can be used to trivially find such strings and their locations. The SCSE indexes source code according to its lexical structure (and thus sees the string literals exactly), and then all allows queries across the source code for arbitrary sequences of tokens. It uses DMS's language front ends (for your purpose, the VB6 front end) to pick out the lexemes accurately.
One might hunt for statatements that assign a constant more than 10 (using a range constraint) to a variable whose name contains an X (using a wildcard) with a query like this:
I=*x* '=' N>10
The SCSE will find all matches, show you the hits, and enable seeing the hit in the source code with one additional click.
The query you want to find literal strings is extremely simple:
S=*
meaning, "find all strings regardless of content". You can turn on SCSE logging, and it will write a list of all the hits, along with precise positions, to a log file. A this point you have all the precise string information. (SCSE cannot do flow analysis so it can't help internationize dates as well as DMS could, but it could find
N 'mod' 4 '==' 0
patterns, which tend to be leap year adjustments).