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 :

Appliquer un code à l'entiéreté d'une colonne


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Femme Profil pro
    Consultant fonctionnel
    Inscrit en
    Mai 2018
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Consultant fonctionnel

    Informations forums :
    Inscription : Mai 2018
    Messages : 37
    Points : 16
    Points
    16
    Par défaut Appliquer un code à l'entiéreté d'une colonne
    Bonjour à tous,

    Je viens vers vous afin de vous demander de l'aide.
    J'essaye depuis plusieurs jours maintenant d'appliquer le code ci-dessous à l'entiéreté d'une colonne sans succés. Ayant essayer d'utiliser la fonction FillDown et derniere_ligne, qui se sont soldé par un echec, je me suis tourné vers les forum et depuis je n'ai pu trouver de réponse.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Sub test()
     
    With Sheets("Feuil1").range("AJ2")
     
         For i = 1 To derniere_ligne
     
             If IsDate(Mid(.Value, i, 7)) Then
                 Sheets("Feuil1").range("AI2") = Mid(.Value, i, 7)
                 Exit For
             End If
         Next i
     End With
     End Sub
    Pour information, ce code fonctionne parfaitement pour une cellule mais j'aimerais vraiment l'étendre à l'entiéreté des colonnes.

    Votre aide me serais d'un grand secours. merci d'avance

  2. #2
    Membre régulier
    Homme Profil pro
    Évaluation de la performance
    Inscrit en
    Avril 2018
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Canada

    Informations professionnelles :
    Activité : Évaluation de la performance
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2018
    Messages : 39
    Points : 82
    Points
    82
    Par défaut
    Bonjour AimeDija,

    Pour appliquer un code à l'entièreté d'une colonne il te faudra mieux maitriser la boucle for next et appliquer une valeur à ta variable derniere_ligne

    Lorsque tu lance ta macro tel que rédiger tu boucle de la valeur i = 1 à la valeur "vide". Tu boucle donc dans le vide
    Pour affecter une valeur à derniere_ligne, il te faut partir du bas du fichier et remonter jusqu'à la 1ère valeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Derniere_ligne = Sheets("Feuil1").Range("AJ" & Rows.Count).End(xlUp).Row
    Ensuite pour ta boucle, le i doit corespondre à la ligne à laquelle tu veux appliquer ton code. Actuellement, le i ne fait que changer le carctère de départ de la fonction mid et tu boucleras sur la même cellule. En plus, tu sors de la boucle For dès que la conditionelle est vrai avec ton Exit for (si j'étais toi, je cacherais cette ligne qui n'est pas du tout à la mode...)
    exemple de boucle sur l'Ensemble des lignes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i = 1 to derniere_ligne
    Sheets("Feuil1").Range("AI" & i) = ... mettre la suite du code ici
    next i
    Enfin, tu nous dis que ta macro fonctionne mais à quoi sert-elle : la fonction mid que tu utilise retourne une chaine de type variante. Appliquer la fonction isdate à ce résultat, à moins que je me trompe, te retournera toujours faux.

    Je crois que tu serais mieux dexpliquer ce que tu souhaites faire, le conseil que tu recevras sera plus précis

    Bonne chance

  3. #3
    Membre à l'essai
    Femme Profil pro
    Consultant fonctionnel
    Inscrit en
    Mai 2018
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Consultant fonctionnel

    Informations forums :
    Inscription : Mai 2018
    Messages : 37
    Points : 16
    Points
    16
    Par défaut
    Bonjour Lebo 74,

    Un grand merci pour tes explications qui m'aident déja beacoup.

    Travaillant sur un gros fichier ( plus de 65000 lignes) , je cherche à faire en sorte que lorsque je rencontre une date contenue dans une zone de texte (format standard) je puisse extraire cette date, c'est à dire enlever le texte de la cellule et juste laisser cette date:

    par exemple pour lorsque je rencontre ; 12/2017 E170369836 ,12/2017 - E170369837, 01/2018 Maitenance of Co , 07/2018 SK SA7 R/D ,
    ALEA 107038 from 12/03/2018.

    je souhaite juste extraire (12/2017 , 12/2017 , 01/2018, 07/2018, 12/03/2018) la date contenue dans cette cellule peux importe la longeur de celle-ci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Sub test()
     
    With Sheets("Feuil1").range("AJ48")
     
         For i = 1 To Len(.Value)
     
             If IsDate(Mid(.Value, i, 8)) Then
                 Sheets("Feuil1").range("AI48") = Mid(.Value, i, 8)
                 Exit For
             End If
         Next i
      End With
     End Sub
    le code ci-dessus me permet de le faire mais avec certains inconvenient :

    1. Effectue l'opération sur seulement une cellule et pas l'ensemble de la colonne
    2. Ne tiens pas compte du format de la date , il prend seulement en compte le format 06/2018 et non 05/10/2018
    3. Il faudrait qu'il effectue cette opération seulement sur les celules contenant un mix entre texte et date et laisse les cellules déja affectées d'une date comme telles.

  4. #4
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Avant de l'appliquer sur toute la colonne, je suis parti sur la chaîne mise en exemple mais je doute qu'elles soient toutes construites à l'identique (je ne parle pas des date et valeurs). A tester dans un premier temps sur quelques chaînes et revenir pour affiner :
    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
     
    Sub Test()
     
        Dim T1
        Dim T2
        Dim I As Integer
        Dim J As Integer
        Dim Chaine As String
        Dim Result As String
     
        Chaine = "12/2017 E170369836 ,12/2017 - E170369837, 01/2018 Maitenance of Co , 07/2018 SK SA7 R/D ,*ALEA 107038 from 12/03/2018"
     
        'sépare une première fois à l'aide des virgules
        T1 = Split(Chaine, ",")
     
        For I = 0 To UBound(T1)
     
            'une seconde fois à l'aide des espaces (Trim supprime les espaces parasites)
            T2 = Split(Trim(T1(I)), " ")
     
            For J = 0 To UBound(T2)
                If IsDate(T2(J)) Then Result = Result & T2(J) & ", "
     
        Next J, I
     
        'supprime les ", " de fin
        Result = Left(Result, Len(Result) - 2)
     
        MsgBox Result
     
    End Sub

  5. #5
    Membre à l'essai
    Femme Profil pro
    Consultant fonctionnel
    Inscrit en
    Mai 2018
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Consultant fonctionnel

    Informations forums :
    Inscription : Mai 2018
    Messages : 37
    Points : 16
    Points
    16
    Par défaut
    Bonjour Theze,

    Merci pour ton aide, ton code me retourne les valeurs demandé sur msg box.

    En effet, les valeurs dans les cellules ne sont absolument pas toutes construites de la même façon, serais il possible de ne pas mettre tout les exemples existant dans la chaine car je ne les connais pas à l'avance?

    Mon but final est de pouvoir séparer le texte des dates et ne laisser que les dates (quelqu'elles soient) dans la cellule.

Discussions similaires

  1. {VBA Excel}Probleme de code sur l'export Excel à Word
    Par Thomas69 dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 21/06/2007, 10h59
  2. [VBA - Excel]Avoir ce code venant d'outlook qui fonctionne
    Par EvaristeGaloisBis dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 14/05/2007, 22h20
  3. [VBA] Excel modifier un code source.
    Par mike9191 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 02/05/2007, 12h56
  4. [vba Excell] Alleger Les Codes Combobox
    Par CIBOOX dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 25/01/2007, 08h37
  5. [VBA Excel] Récuperer le code source d'une page html dans un string
    Par viniboy dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/07/2006, 19h11

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