Modifier chaine de caractère

Bonjour,

Dans mon programme je définis 2 variables string dont le premier est le nom de l'onglet. Je n'arrive pas définir la seconde sachant qu'elle est une portion de la première.

Mon onglet s'appelle : ABC joueur

Ma première variable est donc ABC joueur

Ma deuxième est ABC

Merci à vous

Salut Karoob,

Quel est le critère qui définit quelle partie de ta 1ère variable ABC joueur devient ta 2ème variable ABC ?

Un nombre de lettres fixe ? le nom de famille du joueur (et donc le critère est l'espace entre les deux éléments de ta variable) ? ou autre chose ?

Salut GazOline,

Merci pour ta réponse réactive. En fait, mon problème est que je n'arrive pas à paramétrer le nombre de caractère dans ma macro qui varie entre 3 et 4 (exemple : ABC joueur, ABCD joueur). En fait j'applique ma macro sur plusieurs onglets. Donc pour te répondre ce serait le nom de famille donc l'espace

Re !

Voici un petit code qui te permet d'extraire le premier mot de ta chaine (grâce à la fonction Split qui sépare la chaine avec les espaces).

L'exemple est basé sur une liste de noms qui commencerait en A1 , la macro copie le 1er mot en B1, puis recommence en A2-B2, A3, B3, etcc... jusqu'à la fin de la liste.

Sub PremierMot()

'définition de la dernière ligne non-vide de la colonne (donc la fin de la liste des noms à séparer)
Dim DernLigne As Long
DernLigne = Range("A65536").End(xlUp).Row

'boucle sur le nombre de ligne, extraction du 1er mot de la chaine de caractères
For a = 1 To DernLigne
    Mot = Split(LTrim(Cells(a, 1)))(0)
    Cells(a, 2).Value = Mot
Next a

End Sub

Re

Merci pour ta réponse. En fait, le problème est que je ne me base pas sur des cellules mais sur le nom de l'onglet. Est ce que la fonction Split s'applique aussi dans ce cas ?

Oui c'est tout à fait possible, excuse-moi j'avais omis ce détail

Voilà un code qui compte combien tu as d'onglets, et qui ensuite, pour chaque onglet, récupère le nom, extrait le 1er mot, et renomme l'onglet avec ce mot.

Sub PremierMot()

'boucle sur le nombre d'onglets, extraction du 1er mot de la chaine de caractères
For a = 1 To ThisWorkbook.Sheets.Count
    Chaine = Worksheets(a).Name
    Mot = Split(LTrim(Chaine))(0)
    Worksheets(a).Name = Mot
Next a

End Sub

en fait, l'idée est de construire un graph et de le déplacer dans un autre onglet. Voici le code sur lequel je travaille :

Dim w As String, w2 As String

w = ActiveSheet.Name 'ici le nom de l'onglet est "ABCD joueur"

w2 = Right("w", 4) 'ici le nom de l'onglet dans lequel je déplace le graphe s'appelle "ABCD"

Range("A1:B10").Select

With Selection.Font

.ThemeColor = xlThemeColorDark1

.TintAndShade = 0

End With

ActiveSheet.Shapes.AddChart.Select

ActiveChart.SetSourceData Source:=ActiveSheet.Range("$A$1:$B$10")

ActiveChart.ChartType = xlPie

ActiveChart.ApplyLayout (1)

ActiveChart.Location Where:=xlLocationAsObject, Name:=w2

Call DeplaceGraph

End Sub


J'aimerai que cela me déplace le graphe dans l'onglet cible "ABCD" dont le nom est une portion de l'onglet initial.

Il faut modifier ton w2, cf ci-dessous en vert.

Après pour le déplacement, je ne peux pas juger je n'ai pas de fichier exemple

Dim w As String, w2 As String

w = ActiveSheet.Name 'ici le nom de l'onglet est "ABCD joueur"
w2 = Split(LTrim(w))(0)

    Range("A1:B10").Select
    With Selection.Font
        .ThemeColor = xlThemeColorDark1
        .TintAndShade = 0
    End With
    ActiveSheet.Shapes.AddChart.Select
    ActiveChart.SetSourceData Source:=ActiveSheet.Range("$A$1:$B$10")
    ActiveChart.ChartType = xlPie
    ActiveChart.ApplyLayout (1)

ActiveChart.Location Where:=xlLocationAsObject, Name:=w2

Call DeplaceGraph

End Sub

oui c'est fait mais cela m'affiche une erreur sur la ligne :

ActiveChart.Location Where:=xlLocationAsObject, Name:=w2

en disant "Erreur 5 Argument ou appel de procédure incorrect"


ca marche !! merci beaucoup !!!

EDIT : ok, cool ! Tu sais où était l'erreur ?

c'est bon tout marche bien ! mille mercis

Non pas vraiment mais le message d'erreur ne s'affiche plus . en tout cas merci beaucoup !!

Par contre, pourrais tu m'apporter ton aide sur une dernière chose que je n'arrive pas à faire ? Dans le fichier joint, j'aimerai modifier le code de façon à ce que mes données se repartissent dans leurs onglets en fonction de la colonne E. Ce problème ressemble beaucoup au précédent c'est pourquoi j'ai posté ici.

3copiercoller.xlsm (22.36 Ko)

Re !

Qu'est-ce qui détermine la répartition dans les onglets ?

Les caractères du début ? le nom "amis, "famille" du milieu ? les caractères de fin ?

le nom "amis", "famille" "travail" du milieu


excuse moi j'ai oublié une chose, je suis un peu fatigué, pardonne moi

la répartition se fait à partir du nom du milieu mais aussi avec une autre condition : si la valeur de la colonne H indique "Autre" alors ça copie colle dans "nomMilieu ABCD" et si c'est "Plus" alors ça copie dans "nomMilieu EFGH"

voici un fichier d'exemple. Je te remercie mille fois

4copiercoller.xlsm (16.58 Ko)

Je regarde

Voilà une proposition de macro.

Je l'ai pas mal commentée pour que tu puisses comprendre comment elle fonctionne


PS : j'ai dû dé-fusionner tes entêtes de tableau, car cela foire la recherche de la dernière ligne sinon.

Globalement évite de fusionner des cellules, c'est souvent une galère quand on veut mettre des macros dessus.

C'est magnifique ! je te suis vraiment reconnaissante ! Mille mercis pour ce travail tu es vraiment douée !!

Je t'en prie, et je suis bien moins douée que beaucoup sur ce forum ^^

c'est souvent de la petite bricole mais ça fonctionne, c'est l'essentiel


PS : Attention dans ta colonne H "Type", tu as certains termes qui ont un espace à la fin : exemple en H16 et H18.

Comme la macro fait une recherche sur le contenu complet de cette cellule, si elle cherche "Autre", elle ne trouveras pas "Autre[espace]", il faut faire attention à ne pas laisser d'espaces "fantômes".

Rechercher des sujets similaires à "modifier chaine caractere"