Mettre cette formule en VBA

Fermé
viret1290 Messages postés 137 Date d'inscription samedi 17 août 2013 Statut Membre Dernière intervention 12 octobre 2022 - 25 août 2019 à 17:21
viret1290 Messages postés 137 Date d'inscription samedi 17 août 2013 Statut Membre Dernière intervention 12 octobre 2022 - 26 août 2019 à 21:25
Bonjour,
Je désirs faire ceci est en VBA.

=SI(CODE(STXT(A7;2;1))>=97;
GAUCHE(A7;EQUIV(VRAI;EXACT(STXT(A7;LIGNE($1:$255);3);MAJUSCULE(STXT(A7;LIGNE($1:$255);3)));0));
STXT(A7;EQUIV(FAUX;EXACT(STXT(A7;LIGNE($1:$255);3);MAJUSCULE(STXT(A7;LIGNE($1:$255);3)));0)+1;999))

Quelqu'un peut m'aider.

Merci
A voir également:

6 réponses

jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
25 août 2019 à 17:44
Bonjour,
T'aider... oui.
Le faire à ta place... non.

Qu'as tu essayé ?
Sur quoi bloques tu ?

Déjà.. tu pourrais commencer par gérer par petits morceaux avant d'essayer de tout mettre diretement...
par exemple.. pour remplacer les fonctions"gauche".. tu as LEFT
Pour "majuscule" c'est UCase
Le "si" c'est IF / Else...

Le stxt .. c'est "mid"

etc...

il suffit de chercher le mot sur internet en indiquant VBA .. et tu trouveras les équivalences sans souci.

0
viret1290 Messages postés 137 Date d'inscription samedi 17 août 2013 Statut Membre Dernière intervention 12 octobre 2022 2
Modifié le 25 août 2019 à 19:09
Bonsoir,

J'ai posté mon code, mais il ne s'affiche pas donc je e remet une fois.

Il ne fonctionne pas il m'indique des erreurs. quelqu'un peux m'aider

Merci
If Mid(Cells(9, 1), 2, 1) >= 97 Then 'SI(CODE(STXT(A9;2;1))>=97
    left(cells(9,1),Index(true,Exact(Mid(cells(9,1), Rows(1,255),3), UCase(Mid(cells(9,1),Rows(1,255,3))),0)) 'GAUCHE(A9;EQUIV(VRAI;EXACT(STXT(A9;LIGNE($1:$255);3);MAJUSCULE(STXT(A9;LIGNE($1:$255);3)));0))
Else
    Mid(Cells(9,1),Index(False,Exact(Mid(cells(9,1),Rows(1,255,3), UCase(Mid(cells(9,1),Rows(1,255,3))),0)+1,999)) 'STXT(A9;EQUIV(FAUX;EXACT(STXT(A9;LIGNE($1:$255);3);MAJUSCULE(STXT(A9;LIGNE($1:$255);3)));0)+1;999))}"
End If

EDIT : Ajout des balises de code
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
25 août 2019 à 19:16
Et la fonction index ?
Et la fonction Exact ?
Tu ne les transformes pas en "vba" ?
Et tu fais quoi des lignes qui sont dans ton if/else ? Tu ne les stockes pas dans une variable ou afficher le résultat dans une cellule ?

De plus, il ne suffit pas de transformer une formule mot à mot pour que ça marche.
parfois il est préférable de changer un peu le raisonnement....
Que souhaites tu réaliser exactement ?
0
viret1290 Messages postés 137 Date d'inscription samedi 17 août 2013 Statut Membre Dernière intervention 12 octobre 2022 2
25 août 2019 à 19:55
A1 il y a le nom de famille en majuscules et le prénom avec la 1ère lettre du prénom en majuscule et le reste en minuscule.

J'aimerai en
A2 j'aimerai le nom de famille
A3 le prénom

Si vous voyez comment faire par macro
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
25 août 2019 à 19:59
Tu fais in split avec comme séparateur l'espace et le tour est joué
0
viret1290 Messages postés 137 Date d'inscription samedi 17 août 2013 Statut Membre Dernière intervention 12 octobre 2022 2
25 août 2019 à 20:13
Comment faire si le nom de famille est composé (VASQUEZ PINTO José)
0
viret1290 Messages postés 137 Date d'inscription samedi 17 août 2013 Statut Membre Dernière intervention 12 octobre 2022 2
Modifié le 25 août 2019 à 22:26
Voici mon code il fonctionne, mais peut-être long ?

Private Sub CommandButton3_Click()

'Extraire les données séparées par un espace dans une chaine de caractères
'Sub extractionMots()
    Dim Tableau() As String
    Dim i As Integer
    
    'découpe la chaine en fonction des espaces " "
    Tableau = Split(Cells(1, 1))
    
    'boucle sur le tableau pour visualiser le résultat
    For i = 0 To UBound(Tableau)
        'Le résultat s'affiche dans la fenêtre d'execution de l'éditeur de macros
        Debug.Print Tableau(i)
        Cells(1, i + 2) = Tableau(i)
    Next i
    
    If Cells(1, 2) = UCase(Cells(1, 2)) Then
        If Cells(1, 3) = UCase(Cells(1, 3)) Then
            Cells(1, 8) = Cells(1, 2) & " " & Cells(1, 3)
                If Cells(1, 4) <> "" And Cells(1, 5) = "" Then
                    Cells(1, 9) = Cells(1, 4)
                Else
                        If Cells(1, 4) <> "" And Cells(1, 5) <> "" And Cells(1, 6) = "" Then
                            Cells(1, 9) = Cells(1, 4) & " " & Cells(1, 5)
                        Else
                                If Cells(1, 4) <> "" And Cells(1, 5) <> "" And Cells(1, 6) <> "" Then
                                    Cells(1, 9) = Cells(1, 4) & " " & Cells(1, 5) & " " & Cells(1, 6)
                                End If
                        End If
                End If
        Else
            Cells(1, 8) = Cells(1, 2)
        End If
    End If
End Sub


il me reste à l'intégrer dans une boucle.
0

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

Posez votre question
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
Modifié le 26 août 2019 à 14:43
Bonjour,

Plus simple avec RegExp , classeur à télécharger:

http://boisgontierjacques.free.fr/pages_site/chainesvba.htm#RegExp

Sinon si tu tiens à ton code voilà une boucle sur la colonne A:

 Dim derniereLigne As Long
 Dim j As Integer
    derniereLigne = Range("A" & Rows.Count).End(xlUp).Row 'n° de la dernière ligne non vide de la colonne A
    For j = 1 To derniereLigne

'remplacer la ligne 1 par j dans ton code

Next j


0
viret1290 Messages postés 137 Date d'inscription samedi 17 août 2013 Statut Membre Dernière intervention 12 octobre 2022 2
26 août 2019 à 21:25
Merci
0