Test sur un texte commençant par

Résolu
Agi -  
 agi -
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

  1. Utilisateur anonyme
     
    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. Utilisateur anonyme
       
      Bonjour,

      Ça marche aussi, mais sa demande est un code vba.
      0
    2. Utilisateur anonyme > Utilisateur anonyme
       
      Tu 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. Utilisateur anonyme
       
      Tu n'as pas oublié ce détail : "...contient un texte commençant par O5a-xxxx alors..." ?
      0
    4. Utilisateur anonyme > Utilisateur anonyme
       
      Bonjour 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. Utilisateur anonyme
       
      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. Utilisateur anonyme
     
    Bonjour

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

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

    Cordialement
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. agi
     
    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. Utilisateur anonyme
       
      Bonsoir, donc on en revient à ma première proposition regarde l'opérateur like, ou alors une regex
      0
    2. Utilisateur anonyme
       
       
      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
      1. agi > Utilisateur anonyme
         
        Bonjour 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
  7. agi
     
    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. Utilisateur anonyme
       
      Bonnes fêtes à toi aussi
      0
  8. Utilisateur anonyme
     
     
    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
  9. agi
     
    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. Utilisateur anonyme
       
      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. agi > Utilisateur anonyme
       
      Bonjour 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. Utilisateur anonyme > 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. agi > Utilisateur anonyme
       
      Bonsoir 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. Utilisateur anonyme > 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
  10. agi
     
    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