Test sur un texte commençant par

Résolu
Bonjour,
je suis débutant et j'aimerais faire un code en vba qui consiste à :

exemple: si la colonne A contient un texte commençant par O5a-xxxx alors écrire dans la colonne B le chiffre 5.

Merci pour votre aide

9 réponses

Résumé de la discussion

Un débutant recherche une macro VBA permettant de tester si le texte de la colonne A commence par O5a-xxxx et d’écrire 5 dans la colonne B. La meilleure réponse propose une procédure qui parcourt les lignes jusqu’à la dernière cellule non vide, lit le contenu de la colonne A et écrit dans B le caractère correspondant. Le code utilise Mid$(chn, 2, 1) et gère les lignes vides en s’arrêtant à la dernière ligne non vide, assurant l’application correcte même lorsque des cellules A restent vides. D’autres échanges évoquent des améliorations possibles, comme le recours à Like ou à une regex, mais la solution retenue privilégie une décomposition simple du texte.

Bobot (l’IA à votre service)
  1. Bonjour Agi,

    Je te propose ce code VBA :

    
    Option Explicit
    
    Sub Essai()
      Application.ScreenUpdating = False
      Dim chn As String, dlig As Long, lig As Long
      dlig = Range("A" & Rows.Count).End(xlUp).Row
      For lig = 1 To dlig
        chn = Cells(lig, 1)
        If Len(chn) > 1 Then Cells(lig, 2) = Mid$(chn, 2, 1)
      Next lig
    End Sub
    
    

    Ça fera le travail en colonne B, pour A1 à la dernière donnée
    de la colonne A, même s'il y a des cellules vides dans cette
    colonne A ; cela grâce à dlig : dernière ligne.

    Si ton problème est réglé, merci de l'indiquer,
    pour que le sujet puisse être passé en résolu.

    Cordialement.  :)

    PS : Bonjour à Whismeril en passant.  ;)
     
    1
    1. Bonjour,

      Ça marche aussi, mais sa demande est un code vba.
      0
    2. @Utilisateur anonymeTu as raison : j'ai zappé que c'était à faire en code VBA ! Merci pour ta remarque.
      Je vais corriger mon message tout de suite.  :)
      0
    3. Tu n'as pas oublié ce détail : "...contient un texte commençant par O5a-xxxx alors..." ?
      0
    4. @Utilisateur anonymeBonjour Help-Jason,
      J'ai compris ceci : le texte qui est en A est « O5a-xxxx » ; donc il commence par
      un code du genre « O5a » suivi de « -xxxx » ; et dans ce cas, mon code VBA
      retourne bien le 2ème caractère : « 5 » ; c'est bien ce qu'il faut, je crois, non ?
      Je suis ouvert à toute suggestion. Cordialement.  :)
      0
    5. Il faut que la cellule de la colonne A contienne un texte, oui (donc Len(chn) > 1) mais aussi qu'il commence par O5a sinon ton programme fonctionne avec n'importe quelle chaîne de caractère non vide.
      0
  2. Bonjour

    Regarde l'opérateur Like ou l'opérateur Left
    0
    1. Merci Whismeril, je vais essayé avec ça !
      0
      1. Bonjour albkan,

        je te remercie pour ton code, il marche super bien
        merci à toi aussi Whismeril

        Cordialement
        0
        1. Bonjour albkan,

          je reviens vers toi à propos de ton code, est ce que il y a moyen de préciser pour qu'il ne fonctionne que dans le cas ou on la lettre "O" ( exemple O5a-xxxx) ou de la lettre "E" ( exemple E5a-xxxx) et pas le reste les lettres de l'alphabet.
          Merci pour ton aide et bonnes fêtes

          Agi
          0
          1. Bonsoir, donc on en revient à ma première proposition regarde l'opérateur like, ou alors une regex
            0
          2.  
            Bonjour Agi,

            Voici le nouveau code VBA :

            
            Option Explicit
            
            Sub Essai()
              Application.ScreenUpdating = False
              Dim chn As String, dlig As Long, lig As Long
              dlig = Range("A" & Rows.Count).End(xlUp).Row
              For lig = 1 To dlig
                chn = Cells(lig, 1)
                If InStr("EO", Left$(chn, 1)) > 0 Then
                  Cells(lig, 2) = Mid$(chn, 2, 1)
                End If
              Next lig
            End Sub
            
            

            Si tu as besoin de préciser aussi les codes qui commencent (par exemple)
            par B et G, il te suffit de modifier ainsi la ligne #10 :

                If InStr("BEGO", Left$(chn, 1)) > 0 Then
            

            Tu peux placer les initiales dans l'ordre que tu veux, par exemple "OEGB",
            mais autant les placer dans l'ordre alphabétique, n'est-ce-pas ?  ;)

            Bonnes fêtes à toi aussi !  :)
             
            0
          3. @Utilisateur anonymeBonjour Albkan et meilleurs vœux !
            Je reviens vers toi, voilà :
            J’ai un fichier Excel avec des dates (en colonne « A ») sachant que plusieurs lignes peuvent contenir la même date, J’aimerais savoir comment faire une macro qui, en entrant la date de début et date de fin, par InputBox, elle me fait la copie de toutes les lignes comprises dans cette tranche de dates de ce fichier vers un autre fichier Excel.
            Merci par avance !
            0
        2. Bonjour albkan,

          Je te remercie pour ta réponse, c'est exactement ce qu'il me faut..
          Passe un bon réveillant, et à toi aussi Whismeril passe de bonnes fêtes.

          A bientôt

          Agi
          0
          1. Bonnes fêtes à toi aussi
            0
        3.  
          Bonjour agi et meilleurs vœux à toi aussi !

          Pour ta demande, il manque beaucoup trop d'informations !

          Quand on veut faire une copie, il y a la source (= les données à copier)
          et la destination (là où on veut faire la copie).

          ==============================

          Pour la source :

          a) nom du fichier 1 ? exemple : "Classeur 1.xlsm"
          b) nom de la feuille ? exemple : "Feuil3"

          c) n° de la ligne d'en-têtes du tableau ? ; exemple : ligne 5
          d) 1ère ligne des données ? en principe juste après la ligne d'en-têtes => 6
          e) dernière ligne des données ? : exemple : 100 (ou variable)
          f) lignes à copier : de date début à date fin : OK

          g) colonnes à copier : de la colonne A à quelle colonne ? G ? autre ?
          h) ta colonne A contient des dates ; quel est le format de ces cellules ?
              format date jj/mm/aaaa ? autre format date ? format texte ?

          ----------------------------------------------------

          exemple de résumé pour c) à h) :

          des lignes 5 à 100 (et +), la ligne 5 étant une ligne d'en-têtes,
          des colonnes A à G, dates au format jj/mm/aaaa

          mais n'oublie pas de répondre aussi à a) et b) !

          Et je vais supposer que toutes tes lignes de données sont continues,
          c'est-à-dire sans ligne vide entre ; sinon, à toi de me le dire.

          ==============================

          Pour la destination :

          a) nom du fichier 2 ? exemple : "Classeur 2.xlsm"
          b) nom de la feuille : "Feuil1" ? autre ?

          c) cellule du coin supérieur gauche du futur tableau ? D8 ? autre ?
              si D8, ça signifie que la ligne d'en-têtes sera la ligne 8 ; la 1ère ligne
              de données copiée sera en ligne 9 et les autres seront dessous ;
              s'il y avait 7 colonnes (de A à G) pour la source, la destination aura
              7 colonnes aussi (de D à J). Et cela si pour une ligne copiée, tu veux
              toutes les 7 colonnes de la source, mais ce n'est pas forcé : tu peux
              vouloir seulement 2 ou 3 colonnes et pas les autres ! Si oui, à toi
              de l'indiquer : on ne peut pas deviner ce que tu préfères !  ;)

          ==============================

          Ça te fait beaucoup de réponses à donner, hein ? Ce serait peut être
          plus simple en joignant ton fichier (sans données confidentielles) via
          mon-partage.fr ; ça m'aidera bien plus pour la source, mais il faudra
          quand même indiquer tout ce que j'ai demandé pour la destination.

          À te lire.  :)
           
          0
          1. Bonjour Albkan,
            Voilà les données

            Fichier source:

            Classeur : Source.xls
            Feuille : Feuil1

            Colonne A: date
            Colonne B: commune
            Colonne C: adresse
            Colonne D: référence
            Colonne E: intitulé
            Colonne F: type
            Colonne G: état

            Fichier cible:

            Classeur : Cible.xls ( qui se trouve dans un autre répertoire nommé "dsp")
            Feuille : Feuil2

            Colonne A: date
            Colonne B: commune
            Colonne C: adresse
            Colonne D: référence
            Colonne E: intitulé
            Colonne F: type
            Colonne G: état

            L'idée est de copier une partie du fichier source et de la coller dans le fichier cible sachant que la cible et la source sont identiques, sauf que la cible ne contiendra que les lignes dont les dates sont comprises dans la fourchette choisie par "InputBox"
            (exemple: copie: du 16/01/2017 au 23/01/2017) tout copier car plusieurs lignes peuvent contenir la même date.

            Je reste à ta disposition pour tout tout info en plus

            Merci infiniment

            Agi
            0
            1. Bonjour agi, relis bien en entier mon message #19 : tu verras que tu as oublié
              beaucoup d'informations ! Les exemples que j'ai mis dans ce message sont là
              tout exprès pour te guider. A+  :)
              0
            2. @Utilisateur anonymeBonjour Albkan,

              Pour la source :

              a) nom du fichier : "Classeur 1.xls" placé dans un répertoire Rep1
              b) nom de la feuille : "Feuil1"
              c) n° de la ligne d'en-têtes du tableau : pas d'en-tête
              d) 1 ère ligne des données ligne 1
              e) dernière ligne des données variable
              f) lignes à copier : de date début à date fin : OK
              g) colonnes à copier : de la colonne A la colonne G
              h) la colonne A contient des dates sous le format jj/mm/aaaa

              Pour la destination :

              a) nom du fichier 2 : "Classeur 2.xls" placé dans un répertoire Rep2
              b) nom de la feuille : "Feuil2"
              c) cellule du coin supérieur gauche du futur tableau A1

              - j'aimerais la copie de toute les colonnes, infos dont j'aurais besoin pas la suite.
              - dans le fichier source, il y a une ligne vide entre chaque jour différent de la semaine.

              par exemple : 5 lignes de la date de 15/11/2016 / 1 ligne vide / 3 lignes de 16/11/2016
              / 1 ligne vide / 6 lignes de 17/11/2016 / 1 ligne vide / etc..

              les deux fichiers sont dans 2 répertoires différents

              j'espère que je n'ai rien oublié, merci encore pour ta patience et ton aide

              Agi
              0
            3. @agi 
              a) Pour le classeur 2 : es-tu bien sûr que c'est Feuil2 et pas Feuil1 ?

              b) Les lignes vides compliquent la tâche, et en plus, elles empêchent
                  d'utiliser le filtre automatique et le filtre avancé ! Peux-tu enlever
                  toutes tes lignes vides ? Si oui, ça sera plus facile, mais si vraiment
                  tu y tiens, laisse-les et je ferai avec (mais sans les filtres).

              c) J'ai réalisé que c'est bien difficile de le faire sans un exemple réel !
                  Aussi, je te demande de m'envoyer un fichier Excel significatif, donc
                  avec une centaine de lignes (dont les lignes vides si tu y tiens), mais
                  sans données confidentielles => à toi d'en inventer. Joins ton fichier
                  via le site mon-partage.fr : tu dois copier le lien de téléchargement
                  dans ton prochain message.

              Rappel : pour un filtre (automatique ou avancé), la 1ère ligne vide rencontrée
              détermine la fin du tableau => les lignes qui sont en dessous sont ignorées ;
              donc on ne peut utiliser les filtres que sur un tableau de lignes contigües,
              sans aucune ligne vide entre elles.
               
              0
            4. @Utilisateur anonymeBonsoir albkan, on peut faire sauter les lignes vides car ce fichier issu d'un import depuis un logiciel et j'ai la main dessus. Pour le classeur 2 j'ai opté pour la feuille 2 mais si c'est un problème je peux me débrouiller, tu peux faire au mieux. Je vais voir si je peux t'envoyer le fichier au fait je ne l'ai jamais fait c'est pour ça mais ça ne dois pas être compliqué. Bonne soirée à toi
              agi
              0
            5. @agi 
              Bonsoir agi,

              Voici comment joindre un fichier via mon-partage.fr :

              Étape 1 : clic sur la grande case longue, ou sur le bouton jaune
              « CHOISIR UN FICHIER » ; sélectionne le fichier à joindre.

              Étape 2 : clic sur « Modifier la durée de partage » ; à droite
              et plus haut, coche la case pour pouvoir entrer les 2 dates
              de début et fin : à sélectionner dans le petit calendrier.

              Étape 3 : clic sur le bouton jaune Uploader ; attendre un peu
              que le fichier soit chargé ; tu pourras ensuite voir le lien de
              téléchargement.

              Tu dois faire un copier / coller de celui-ci
              dans ton prochain message sur le forum.

              albkan
              0
          2. Bonjour,

            Juste une erreur de syntaxe:
            Voici le bon code

            Workbooks("Classeur1.xls").Sheets(Sheets.Count).Select
            Cells.Copy _
            Workbooks("Classeur2.xls").Worksheets("feuille2").Range("A1")

            Bonne journée

            Agi
            0