Vba left ( varaible , 1) ou l'inclure dans mon code

fifi56

XLDnaute Junior
bonjour a tous

j'ai une petit code vba qui fonctionne bien

il cherche dans une plage un mot et copie toutes les cellules de la colonne tant que celle ci n'est pas vide dans un autre endroit

cela fonctionne bien mais je souhaiterai extraire une partie de la cellule ( partie gauche 1 ere lettre du penon )
je souhaite utilise letf car après je pourrais adapter et utiliser right au besoin

par contre du coup me voici perdu avec ma fonction left je ne sais pas ou la placer dans mon code

ci joint un fichier

Code:
Sub Macro1()


Dim cel12
Dim lig As Long, maplage As Range


    With F1
        'Définition de la plage de recherche
       Set maplage = .Range("A6:c6", .Cells(Rows.Count, Columns.Count))
      
     
        'Recherche dans la plage
       Set cel12 = maplage.Find("Prenoms", LookIn:=xlValues)
       '....
       
         ' si non vide recopie
        
        If Not cel12 Is Nothing Then
         'cel12 = Left(cel12, 1)  un essai qu i ne fonctionne pas 


         .Range(cel12, .Cells(Rows.Count, cel12.Column).End(xlUp)).Copy
           Feuil2.Range("A1").PasteSpecial Paste:=xlPasteValues ' destination


            Application.CutCopyMode = False
        End If
    End With

End Sub

Ps : je pense aussi changer le range vba ( destination ) par un offset ce qui me permet de mettre les données les une a la suites des autres !
 

Pièces jointes

  • Classeur1.xlsm
    15.8 KB · Affichages: 32
  • Classeur1.xlsm
    15.8 KB · Affichages: 36
  • Classeur1.xlsm
    15.8 KB · Affichages: 32

camarchepas

XLDnaute Barbatruc
Re : Vba left ( varaible , 1) ou l'inclure dans mon code

Bonjour ,

une autre solution :

Code:
Sub Essai()
 Dim Plage  As Range
 Dim Debut As Long, Fin As Long
 Dim Cellule As Range
 Debut = Range("A1").End(xlDown).Row
 Fin = Range("A" & Rows.Count).End(xlUp).Row
 Set Plage = Range("A" & Debut & ":A" & Fin)
 For Each Cellule In Plage
  Cellule.Offset(0, 5) = Left(Cellule, 1)
 Next
 

fifi56

XLDnaute Junior
Re : Vba left ( varaible , 1) ou l'inclure dans mon code

bonjour

je viens de lire ton code , je n'ai pas essayer ( je le ferai plus tard dans la journée )
mais je pense qu'il y aura un souci , ma colonne "Prénom " a parfois tendance a ce se promener sur ma ligne
une fois en A une autre fois en B ou en C

c'est pourquoi il y a le Find("Prenoms", )


mais en modifiant ton code au niveau du plage cela doit fonctionner

merci de m'avoir répondu et pour ce bout de code :)
 

camarchepas

XLDnaute Barbatruc
Re : Vba left ( varaible , 1) ou l'inclure dans mon code

Bonjour Fifi,

Allez la même avec une colonne et ligne de début changeante

Code:
Sub Essai()
 Dim Plage  As Range, Cellule As Range, Trouve As Range
 Dim Debut As String, Fin As String
 With Sheets("F1")
  Set Trouve = .Cells.Find("Prenoms", LookIn:=xlValues, lookat:=xlWhole)
  If Trouve Is Nothing Then MsgBox " La balise Prenoms n'a pas été trouvée dans cette feuille, sortie du traitement": Exit Sub
  Debut = Trouve.Offset(1, 0).Address
  Fin = .Range(Split(Debut, "$")(1) & Rows.Count).End(xlUp).Address
  Set Plage = .Range(Debut & ":" & Fin)
  For Each Cellule In Plage
   Cellule.Offset(0, 5) = Left(Cellule, 1)
  Next
 End With
End Sub
 

fifi56

XLDnaute Junior
Re : Vba left ( varaible , 1) ou l'inclure dans mon code

cela fonctionne tres bien merci , j'ai juste remise une plage pour qu'il ne cherche que sur une ligne

Set maplage = .Range("A6:c6", .Cells(Rows.Count, Columns.Count))
Set Trouve = maplage.Find("Prenoms", LookIn:=xlValues, lookat:=xlWhole)

je ne comprend pas trop cette ligne ?

Fin = .Range(Split(Debut, "$")(1) & Rows.Count).End(xlUp).Address

Probleme Resolu pour moi Merci
 

camarchepas

XLDnaute Barbatruc
Re : Vba left ( varaible , 1) ou l'inclure dans mon code

Bonjour ,

et bien pour info :

debut contient l'adresse de l'entête sous le format exemple : $B$1

split permet de trancher une chaine en segment séparé par le caractère précisé.


donc le split("$B$1","$")(1) renvoie le B donc le split ("$B$1","$")(2) renvoie le 1

ensuite donc cela reviens à
.range("B" & rows.count).end(xlup).address

redonne un truc comme $B$8 par exemple

Voilà , mais si tu maitrises mieux l'autre méthode pas de souci
 

fifi56

XLDnaute Junior
Re : Vba left ( varaible , 1) ou l'inclure dans mon code

bon j'ai parler un peu vite

bah zut alors je 'arrive pas a afficher mon résultat sur une autre feuille

feuil 2 par exemple


??? y a des subtilités que je comprend pas !!!
 

fifi56

XLDnaute Junior
Re : Vba left ( varaible , 1) ou l'inclure dans mon code

:confused:

- oui j'avais bien la bonne partie , j'avais essayer de mettre le feuil2 dans la plage et apres le for each ......

- oui plus facile a comprendre pour moi
" ensuite donc cela reviens à
.range("B" & rows.count).end(xlup).address "

- et si je veux afficher le résultats en page 2 et en colonne F ?


( décidément j'arrive a rien ce jour même un bout de code qui marchais bien refuse de fonctionne ce jour ( like*' mot*)
 

fifi56

XLDnaute Junior
Re : Vba left ( varaible , 1) ou l'inclure dans mon code

Cela fonctionne sur le fichier test
( pas pour le moment dans le ficheir defnitif surement une erreur de retranscription )

je pensais pas autant me galérer pour un left ......

voici le code

Code:
Sub Essai()
 Dim Plage  As Range, Cellule As Range, Trouve As Range, maplage As Range
 Dim Debut As String, Fin As String
 
 With Sheets("F1")
 Set maplage = .Range("A6:c6", .Cells(Rows.Count, Columns.Count))
  Set Trouve = maplage.Find("Prenoms", LookIn:=xlValues, lookat:=xlWhole)
  
 If Not Trouve Is Nothing Then
         Debut = Trouve.Offset(1, 0).Address
         Fin = .Range(Split(Debut, "$")(1) & Rows.Count).End(xlUp).Address
         Set Plage = Range(Debut & ":" & Fin)
         For Each Cellule In Plage
         Feuil2.Range("F" & Cellule.Row) = Left(Cellule, 1)
         Next
        End If

 End With
End Sub

j'ai ajouter un end if car qd tu ouvre tu dois fermer :D non ?


et merci pour ton aide !
 
Dernière édition:

camarchepas

XLDnaute Barbatruc
Re : Vba left ( varaible , 1) ou l'inclure dans mon code

Le end if dans ton cas , oui ,

Dans mon exemple , le if tata then action : exit sub sort ,directement de la routine, sinon pour le reste ça colle,

sinon dans la feuille originale tu peux ajouter une colonne à formule = gauche("A4",1) et copier uniquement cette colonne en valeur bien sur ..
 

gosselien

XLDnaute Barbatruc
Re : Vba left ( varaible , 1) ou l'inclure dans mon code

Bonjour,

pour copier en feuille 2 b colonne B:

Sub Essai()
Dim Plage As Range, Cellule As Range, Trouve As Range
Dim Debut As String, Fin As String
Dim Ligne As Long
Dim WS2 As Worksheet
Set WS2 = Sheets("Feuil2")
With Sheets("F1")
Set Trouve = .Cells.Find("Prenoms", LookIn:=xlValues, lookat:=xlWhole)
If Trouve Is Nothing Then MsgBox " La balise Prenoms n'a pas été trouvée dans cette feuille, sortie du traitement": Exit Sub
Debut = Trouve.Offset(1, 0).Address
Fin = .Range(Split(Debut, "$")(1) & Rows.Count).End(xlUp).Address
Set Plage = .Range(Debut & ":" & Fin)
For Each Cellule In Plage
WS2.[B65000].End(xlUp)(2).Value = Left(Cellule, 1)
Next
End With
End Sub

P.
 

Discussions similaires

Statistiques des forums

Discussions
312 379
Messages
2 087 761
Membres
103 661
dernier inscrit
fcleves