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,

    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
    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 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,

        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
      2. 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
      3. Bonjour albkan,

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

        Cordialement
        0
        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. Merci Whismeril, je vais essayé avec ça !
          0
          1. Bonjour

            Regarde l'opérateur Like ou l'opérateur Left
            0