Mettre cette formule en VBA

viret1290 Messages postés 146 Statut Membre -  
viret1290 Messages postés 146 Statut Membre -
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

6 réponses

  1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
     
    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
  2. viret1290 Messages postés 146 Statut Membre 2
     
    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
    1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      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
  3. viret1290 Messages postés 146 Statut Membre 2
     
    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
    1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      Tu fais in split avec comme séparateur l'espace et le tour est joué
      0
    2. viret1290 Messages postés 146 Statut Membre 2
       
      Comment faire si le nom de famille est composé (VASQUEZ PINTO José)
      0
  4. viret1290 Messages postés 146 Statut Membre 2
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    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
  7. viret1290 Messages postés 146 Statut Membre 2
     
    Merci
    0