[Déplacé VB6 --> VBA] /!\ Chaîne de caractères: Aidez moi SVP !

HiiiCoach Messages postés 27 Date d'inscription vendredi 30 avril 2010 Statut Membre Dernière intervention 1 juin 2011 - 17 mai 2010 à 12:02
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 - 17 mai 2010 à 16:07
Bonjour,

J'ai récemment codé un programme en VBA pour permettre une extraction rapide de données de gros fichiers excel.

J'aimerai aujourd'hui coder une fonction supplémentaire. En effet, je voudrai que l'utilisateur puisse choisir de n'extraire que les données correspondant à la chaine 'chaine' (entrée par ce même utilisateur).

Par exemple, admettons que la feuille excel se présente comme suit:

A B C D E F
1 (1) (2) (1) (1) (2) (1)
2 C12 to cc ba jo ko


Si l'utilisateur entre '(1)' par exemple, alors les cases A2,C2,D2, et F2 seront extraites dans un fichier .csv. En revanche, les cases B2 et E2 seront volontairement omises dans l'extraction. Le fichier .csv aura la forme:

C12|cc|ba|ko (Le programme que j'ai créé gère déjà les séparateurs etc...)

Je vous sollicite seulement pour savoir comment ajouter un contrôle de chaîne de caractère selon le principe que j'ai énoncé.

Je vous colle une partie de mon code actuel ci-dessous:


Private Sub CommandButton1_Click()

chemin = TextBox7.Text
occurence = TextBox8.Text
separateur = TextBox9.Text

'Il s'agit de la chaine qui sera entrée par l'utilisateur dans la TextBox10
chaine = TextBox10.Text

If TextBox1.Text = "" Then
MsgBox ("Veuillez choisir un nom au fichier")
End If


If TextBox9.Text = "" Or Len(TextBox9.Text) > 1 Then
MsgBox ("Veuillez indiquer un séparateur (1 caractère)")
End If

If TextBox7.Text = "" Then
MsgBox ("Veuillez indiquer un emplacement")
End If

If Len(TextBox8.Text) <> 7 And Len(TextBox8.Text) <> 0 Then
MsgBox ("Veuillez entrer un numéro d'occurence de 7 caractères ou laisser le champ vide")
End If

If TextBox3.Text "" Or TextBox4.Text "" Then
MsgBox ("Veuillez renseigner les numéros de colonnes")
End If

If TextBox5.Text "" Or TextBox6.Text "" Then
MsgBox ("Veuillez renseigner les numéros de lignes")
End If



If TextBox1.Text <> "" And (TextBox9.Text <> "" Or Len(TextBox9.Text) > 1) And TextBox7.Text <> "" And TextBox3.Text <> "" And TextBox4.Text <> "" And TextBox5.Text <> "" And TextBox6.Text <> "" And (Len(TextBox8.Text) 7 Or Len(TextBox8.Text) 0) Then

ChDir chemin
F = FreeFile
Open chemin & "\PLF_" & TextBox1.Text & "_" & Format(Now, "yyyymmdd") & "_" & Format(Time, "hhmmss") & "_" & occurence & ".csv" For Append As #F

Print #F, ("DEBUT")

'Il s'agit de coder à cet endroit un principe qui prenne en compte les caractères de la variable "chaîne" afin d'extraire seulement les données dont l'intitulé correspond à cette variable

For j = xlColumnValue(TextBox3.Text) To xlColumnValue(TextBox4.Text)

For i = TextBox5.Text To TextBox6.Text

valeur = valeur & Cells(i, j) & (separateur)

Next i

Print #F, (valeur)
valeur = ""
i = 1

Next j

Print #F, ("FIN")

Close #F

MsgBox ("Fichier PLF_" & TextBox1.Text & "_" & Format(Now, "yyyymmdd") & "_" & Format(Time, "hhmmss") & "_" & occurence & ".csv généré avec succés dans le répértoire " & chemin)

End If



End Sub

Merci d'avance !

Cordialement.

Julien.

1 réponse

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
17 mai 2010 à 16:07
Salut
Explications bien compliquées ...

Donc, tu as ces données :
   A   B   C   D   E   F
1 (1) (2) (1) (1) (2) (1)
2 C12 to  cc  ba  jo  ko

Et tu voudrais sélectionner le contenu des cellules de la ligne 2 en fonction d'un choix listé en ligne 1 :
    Dim monChoix As String
    Dim monResultat As String
    Dim maCellule As Range
    monChoix = "(1)"
    monResultat = ""
    ' Tu passes en revue toutes les cellules de la ligne 1
    For Each maCellule In Range("A1:F1")
        If maCellule.Value = monChoix Then
            monResultat = monResultat & _
                          maCellule.Offset(1, 0).Value & _
                          Separateur
        End If
    Next
    MsgBox monResultat

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
Rejoignez-nous