Test sur un texte commençant par

Résolu/Fermé
Agi - 22 déc. 2016 à 09:14
 agi - 22 mai 2017 à 12:04
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

A voir également:

9 réponses

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
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 931
22 déc. 2016 à 13:06
Bonjour,

Ça marche aussi, mais sa demande est un code vba.
0
Utilisateur anonyme > Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024
22 déc. 2016 à 13:24
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
Tu n'as pas oublié ce détail : "...contient un texte commençant par O5a-xxxx alors..." ?
0
Utilisateur anonyme > Utilisateur anonyme
Modifié par albkan le 22/12/2016 à 14:10
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
Utilisateur anonyme
22 déc. 2016 à 14:08
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
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 931
22 déc. 2016 à 09:19
Bonjour

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

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

Cordialement
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 931
26 déc. 2016 à 18:24
Bonsoir, donc on en revient à ma première proposition regarde l'opérateur like, ou alors une regex
0
 
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
agi > Utilisateur anonyme
12 janv. 2017 à 12:07
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
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
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 931
27 déc. 2016 à 19:15
Bonnes fêtes à toi aussi
0
Utilisateur anonyme
12 janv. 2017 à 16:17
 
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
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
Utilisateur anonyme
13 janv. 2017 à 15:46
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
agi > Utilisateur anonyme
13 janv. 2017 à 16:46
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
Utilisateur anonyme > agi
13 janv. 2017 à 18:46
 
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
agi > Utilisateur anonyme
13 janv. 2017 à 21:20
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
Utilisateur anonyme > agi
Modifié par albkan le 15/01/2017 à 22:33
 
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
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