IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

manipulation de chaine


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Inscrit en
    Octobre 2006
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 360
    Par défaut manipulation de chaine
    Bonjour tout le monde

    Mon petit problème du jour est le suivant :

    en utilisant Date$, il me donne la valeur suivante :
    19/07/2010

    Moi je voudrais qu'il me retourne 20100719 en gardant le format string

    Le bute de la manœuvre étant qu'avant de modifier quoi que ce soit du fichier source appelé toto.xls, je crée une copie SAV20100719toto.xls

    voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    Sub Macro2()
     
     
        Public Type stockdate
            jour As String
            mois As String
            annee As String
        End Type
     
        'Mid("Vendredi", 5, 2)           renvoie "re"    Mid(chaine, start, nb_caractere)
     
        stockdate = Date$
        stockdate.jour = Mid(stockdate, 1, 2)
        stockdate.mois = Mid(stockdate, 4, 2)
        stockdate.annee = Mid(stockdate, 7, 4)
     
        stockdate = stockdate.annee & stockdate.mois & stockdate.jour
     
        Cells(1, "E") = stockdate
     
    End Sub
    je stocke dans la cellule E1 pour vérifier si ça a bien fonctionné pour ensuite
    remplacer ce stockage par la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    nomfichier = "C:\Documents and Settings\laborder\Bureau\SAV" & stockdate & ".xls"
    FileCopy "C:\Documents and Settings\laborder\Bureau\toto.xls", nomfichier
    mais apparemment, il y a un problème avec la déclaration de la structure stockdate

    merci d'avance pour votre aide

  2. #2
    Inactif  
    Profil pro
    Inscrit en
    Février 2010
    Messages
    517
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 517
    Par défaut
    salut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox Format(Date, "yyyymmdd")

  3. #3
    Membre éclairé
    Inscrit en
    Octobre 2006
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 360
    Par défaut
    merci cette fonction est bien plus simple que mon petit module et fonctionne très bien

    du moins, je n'ai pas tenté de créer le fichier mais je récupère la bonne valeur donc merci beaucoup.

    par contre si quelqu'un peut me dire pourquoi ma structure ne fonctionne pas, je suis très intéressé car je compte travailler avec ce genre de structure pour la suite des opérations dans mon fichier. Donc merci d'avance a celui qui résoudra ce problème.

  4. #4
    Inactif  
    Profil pro
    Inscrit en
    Février 2010
    Messages
    517
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 517
    Par défaut
    Citation Envoyé par teen6517 Voir le message

    par contre si quelqu'un peut me dire pourquoi ma structure ne marche pas je suis tres intéréssé car je compte travailler avec se genre de structure pour la suite des opération dans mon fichier donc merci d'avance a celui qui résoudra se probleme
    parce que tu n'utilises pas ta structure comme il se doit de le faire .
    Voici un exemple (puisque c'est d'un exemple que tu as besoin) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Private Type stockdate
            jour As String * 2
            mois As String * 2
            annee As String * 4
    End Type
     
    Private Sub CommandButton1_Click()
      Dim ladate As Date
      ladate = Date
      MsgBox mescomposantes(ladate).annee & mescomposantes(ladate).mois & mescomposantes(ladate).jour
    End Sub
    Private Function mescomposantes(ByVal ladate As Date) As stockdate
     mescomposantes.annee = Format(Year(ladate), "0000")
     mescomposantes.mois = Format(Month(ladate), "00")
     mescomposantes.jour = Format(Day(ladate), "00")
    End Function
    je n'ai pas voulu utiliser tes "Mid", car existent tout de même les fonctions Year, Month et Day !
    Rien ne t'empêche toutefois de les utiliser, si tu y tiens. L'essentiel de cet exemple demeure la manière d'utiliser une structure.

  5. #5
    Membre éclairé
    Inscrit en
    Octobre 2006
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 360
    Par défaut
    merci babaothe

    ne t'inquiète pas, j'ai appliqué tes modifications pour créer la sauvegarde journalière de mon fichier .xls

    j'avais besoin effectivement d'un petit exemple pour fixé le méthode de fonctionnement d'une structure
    le tutoriel que j'utilise n'est pas très explicite et les exemples compliqués à suivre

    je vais tenter d'adapter ma façon de penser au fonctionnement de se petit langage.

    merci

  6. #6
    Membre éclairé
    Inscrit en
    Octobre 2006
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 360
    Par défaut
    babaothe je vien de tenter en minspirent de ton exemple de déclarer ma stucture

    mais échec

    il s'embleré que de cette facon, il n'est pas possible de déclaré une structure dans une macro

    a oui c'est vrai que j'ai pa précisé mais mon petit programme est en réaliter une simple macro que je suis entrain de créé

    le but étant d'ouvrir le fichier.xls
    lancer la macro et tous se fait tous seul, sans lintervansion de personne
    il ny a pas bouton n'y rien pour l'utilisateur

    pour avoir une petite idée de mon environnement (ou appeller sa comme vous voulez) :
    j'ai un fichier (toto.xls) : se sont les personne du jour
    je l'ouvre
    je lanca ma macro
    premiere chose aven toute modif comme le fichier toto est assé lour a généré on en fait une sovegarde qui sapelle SAV20100719.xls
    une foi la sovegarde faite on commence a modifier directement le fichier ouver par des petit remplacement dan les cellules
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
        With Columns("A:A")
           .Replace "'", " "                      'remplace l'apostrophe par un espace
           .Replace """", " "                     'remplace les guillemets par un expace
        End With
     
        With Columns("B:B")
           .Replace "'", " "                      'remplace l'apostrophe par un espace
           .Replace """", " "                     'remplace les guillemets par un expace
        End With
     
        With Columns("C:C")
           .Replace "'", " "                      'remplace l'apostrophe par un espace
           .Replace """", " "                     'remplace les guillemets par un expace
        End With
     
        With Columns("D:D")
           .Replace "'", " "                      'remplace l'apostrophe par un espace
           .Replace """", " "                     'remplace les guillemets par un expace
        End With
     
        With Columns("E:E")
           .Replace "'", " "                      'remplace l'apostrophe par un espace
           .Replace """", " "                     'remplace les guillemets par un expace
           .Replace "", "Village"                 'remplace les cellules vide par Village
        End With
     
        With Columns("F:F")
           .Replace "'", " "                      'remplace l'apostrophe par un espace
           .Replace """", " "                     'remplace les guillemets par un expace
        End With
     
        With Columns("G:G")
           .Replace "'", " "                      'remplace l'apostrophe par un espace
           .Replace """", " "                     'remplace les guillemets par un expace
        End With
     
        With Columns("H:H")
           .Replace "'", " "                      'remplace l'apostrophe par un espace
           .Replace """", " "                     'remplace les guillemets par un expace
           .Replace ",", "."                      'remplace les virgules par les points
        End With
     
        With Columns("I:I")
           .Replace "'", " "                      'remplace l'apostrophe par un espace
           .Replace """", " "                     'remplace les guillemets par un expace
        End With
    la le gros du traitement est fait

    il ne me reste qu'a parcourire ligne par ligne mon fichier toto.xls
    si la ligne 1 a tous les champ obligatoire diférent de "", jécri cette ligne dans le fichier toto.csv, je suprime cette ligne de mon fichier toto.xls et je passe a la suivante

    de cette facon, les lignes où tous les champ obligatoire ne sont pas remplie reste dans le fichier toto.XLS
    les lignes OK parte dans le fichier toto.CSV
    et j'ai garder une sovegarde du fichier que j'avais ressu que j'ai appeller sav"date".xls

    mais la je bloc terrible donc si quelqu'un pouvais me montrer comment faire pour:
    *créer un fichier .csv
    *lire ligne par ligne mon fichier d'entrer toto.xls (qui est selui d'où s'execute la macro
    *stocker les cellules lu dans une structure du tipe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    private type assmat
    	nomp as string
    	prenom as string
    	num as string
    	libelle as string
    	nomr as string
    	cp as string
    	commune as string
    	tel as string
    	email as string
    end type
     
    assmat_actuel as assmat
    ou me montrer comment accéder a la cellule de ligne en cour de lecture


    merci beaucoup

  7. #7
    Membre éclairé Avatar de Yolak
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Vosges (Lorraine)

    Informations forums :
    Inscription : Mars 2007
    Messages : 341
    Par défaut
    Citation Envoyé par teen6517 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
        With Columns("A:A")
           .Replace "'", " "                      'remplace l'apostrophe par un espace
           .Replace """", " "                     'remplace les guillemets par un expace
        End With
     
        With Columns("B:B")
           .Replace "'", " "                      'remplace l'apostrophe par un espace
           .Replace """", " "                     'remplace les guillemets par un expace
        End With
     
        With Columns("C:C")
           .Replace "'", " "                      'remplace l'apostrophe par un espace
           .Replace """", " "                     'remplace les guillemets par un expace
        End With
     
        With Columns("D:D")
           .Replace "'", " "                      'remplace l'apostrophe par un espace
           .Replace """", " "                     'remplace les guillemets par un expace
        End With
     
        With Columns("E:E")
           .Replace "'", " "                      'remplace l'apostrophe par un espace
           .Replace """", " "                     'remplace les guillemets par un expace
           .Replace "", "Village"                 'remplace les cellules vide par Village
        End With
     
        With Columns("F:F")
           .Replace "'", " "                      'remplace l'apostrophe par un espace
           .Replace """", " "                     'remplace les guillemets par un expace
        End With
     
        With Columns("G:G")
           .Replace "'", " "                      'remplace l'apostrophe par un espace
           .Replace """", " "                     'remplace les guillemets par un expace
        End With
     
        With Columns("H:H")
           .Replace "'", " "                      'remplace l'apostrophe par un espace
           .Replace """", " "                     'remplace les guillemets par un expace
           .Replace ",", "."                      'remplace les virgules par les points
        End With
     
        With Columns("I:I")
           .Replace "'", " "                      'remplace l'apostrophe par un espace
           .Replace """", " "                     'remplace les guillemets par un expace
        End With
    Quelle horreur lol !

    Un peu moins moche:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
           Cells.Replace "'", " "
           Cells.Replace """", " "
           Range("E:E").Replace "", "Village"
           Range("H:H").Replace ",", "."

  8. #8
    Membre éclairé
    Inscrit en
    Octobre 2006
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 360
    Par défaut
    merci a yolak pour m'avoir obtimisé le code ^^



    sinon au sujet de mais trois probleme vous sécher??

Discussions similaires

  1. Manipulation de chaines
    Par tchoukapi dans le forum Shell et commandes GNU
    Réponses: 12
    Dernier message: 04/09/2006, 17h41
  2. [D7] Manipulations de chaines
    Par jer64 dans le forum Delphi
    Réponses: 2
    Dernier message: 21/07/2006, 22h16
  3. [PLSQL] Manipulation des chaines.
    Par zero d dans le forum Oracle
    Réponses: 5
    Dernier message: 14/12/2005, 18h27
  4. Réponses: 4
    Dernier message: 20/08/2004, 10h59
  5. Fonctions de manipulation des chaines et des dates
    Par Fares BELHAOUAS dans le forum Débuter
    Réponses: 3
    Dernier message: 09/11/2002, 22h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo