VBA copier coller caractères avec exception

  • Initiateur de la discussion Membre supprimé 156683
  • Date de début
M

Membre supprimé 156683

Guest
Bonjour à tous,

Je rencontre 2 problèmes assez récurrents concernant un copier coller particulier:

1er problème :

je copie toute une colonne vers un autre tableau (pas de problème) sauf que parmi les chaines de caractères copiées il y a des caractères chinois qu'il ne faut pas exporter vers le nouveau tableau.
Je voudrais donc savoir si c'est possible de copier une chaine de caractères tout en faisant exception à une certaine police ou s'il existe une autre solution.
Pour précision, la taille des chaines copiées est variable (je ne peux donc pas copier du caractère 1 au numéro 14 par exemple).

Exemple : sur mon premier tableau le file_name est:

TX-X-NIXA-BB-DC-1234-1/1-A-PCE-英文

et je voudrais obtenir dans mon nouveau tableau :

TX-X-NIXA-BB-DC-1234-1/1-A-PCE


2ème problème :

je cherche à concaténer 2 colonnes dont le nombre est de lignes est variable suivant le tableau (mais les 2 colonnes ont toujours le même nombre de lignes par tableau). Cette concaténation doit apparaitre dans un nouveau tableau cible. En gros c'est un "copier" de 2 colonnes d'un premier tableau, puis un "coller" des 2 colonnes concaténées dans un autre tableau.

exemple:

sur mon premier tableau j'ai : (dans une colonne) AC ; (dans l'autre) X

et je voudrais faire apparaitre dans mon 2ème tableau (dans une colonne précise): AC-X

J'espère avoir été assez clair dans mes explications :D

Je vous remercie d'avance pour vos réponses,

M&m
 
M

Membre supprimé 156683

Guest
Re : VBA copier coller caractères avec exception

J'ai codé comme un sagouin ma macro ;)

En résumé ce n'est juste qu'un copier coller de template vers un autre .

Mes problèmes ne demandent pas de réponses précises par rapport à mon code, mais juste les fonctions générales par rapport à mes problèmes: je ne trouve strictement rien sur une fonction qui ferait exception d'une certaine police (est ce possible déjà?) ou sur la concaténation j'ai pu trouver sur le forum :

Sub ConcatenerColonnes()
For Each cl In Range(Cells(1, ActiveCell.Column), Cells(65536, ActiveCell.Column).End(xlUp))
cl.Offset(, 2).Value = cl.Value & cl.Offset(, 1)
Next cl

End Sub
 

Pierrot93

XLDnaute Barbatruc
Re : VBA copier coller caractères avec exception

Bonjour Master, Bernard

pour ton 2ème problème, tu dois pouvoir t'inspirer de ceci en adaptant le nom des feuilles et numéros de colonnes :
Code:
    With Sheets("Feuil2").Range("A:A")
        .FormulaR1C1 = "=Feuil1!RC1&""-""&Feuil1!RC2"
        .Value = .Value
    End With

bonne journée
@+
 
M

Membre supprimé 156683

Guest
Re : VBA copier coller caractères avec exception

Je crois que j'ai omis de préciser pour mon 2 ème problème, que les valeurs des cellules des 2 colonnes ne sont pas constantes:

En gros voila ce que je vais faire:

- copier coller les 2 colonnes dans mon nouveau tableau dans des colonnes plus loin que mon template.

- une fois qu'elles sont dans le bon tableau, concaténer les 2 colonnes dans la colonne juste à coté des 2 : c'est là que je trouve pas la formule qui me permet de récupérer les valeurs des 2 cellules d'une ligne et de me les concat' dans la 3ème et ainsi de suite pour chaque ligne jusqu'à la fin.

(précision: j'ai définit une variable "nb_ligne" qui représente le nombre de lignes totales, les 2 colonnes ont le même nombre de lignes)

-puis copier/coller la fameuse 3ème colonne au bon endroit et effacer les 3 colonnes mal placées.

à l'heure actuelle c'est ce qui me parait le plus faisable xD

M&m
 
M

Membre supprimé 156683

Guest
Re : VBA copier coller caractères avec exception

Oui parce qu'en fait j'ai l'impression que la fonction que tu m'as fournis (merci au passage ^^) prend la valeur de la première cellule de chaque colonne puis les concatène et répète ce résultat pour tous le reste de la colonne.

J'ai donc vérifié mon post et je n'avais pas précisé que les valeurs de chaque cellule des 2 colonnes sont variables. Donc je chercherais une formule qui récupère les valeurs de chacune des cellules pour les concaténer.

As tu compris Pierrot où je voulais en venir ?

Peut être n'ai je pas compris la fonction que tu as posté aussi :x

M&m
 
M

Membre supprimé 156683

Guest
Re : VBA copier coller caractères avec exception

Problème de concaténation résolu ;)

Quand au premier problème (virer les caractères chinois de chaque métadonnées de la colonne), j'ai pu me renseigner et ce seront toujours les 3 derniers caractères de chaque cellule de la colonne qu'il faudrait supprimer (-英文).

J'avais pensé aussi à un Replace :

Range("A:A").replace "-英文",""

sauf que ça me vire tous les "-" de toute la ligne aussi, de plus les caractères chinois apparaissent comme 2 points d'interrogation dans Visual Basic Editor.

Bref je cherche donc maintenant la fonction qui me permet de virer les 3 derniers caractères d'une chaine.

Cordialement,

M&m
 
Dernière modification par un modérateur:

Pierrot93

XLDnaute Barbatruc
Re : VBA copier coller caractères avec exception

Bonjour,

essaye ainsi, s'applique à la colonne A de la feuille active, à adapter :
Code:
Sub test()
Dim c As Range
For Each c In Range("A1", Range("A65536").End(xlUp))
    If Len(c) > 2 Then c = Mid(c, 1, Len(c) - 3)
Next c
End Sub

bonne soirée
@+
 
M

Membre supprimé 156683

Guest
Re : VBA copier coller caractères avec exception

Merci Pierrot de t'occuper de mon cas, ;)

J'ai pu tester le code que tu m'as fournis (pour la suppression des 3 derniers caractères)

Sur la colonne:

Exemple
Exemple
Exemple
Exemple
Exemple
Exemple
Suite

J'ai obtenu:

mple
mple
mple
mple
mple
mple
uite

Comme tu peux le voir, ce ne sont pas les 3 derniers qui sont supprimés mais les 3 premiers, et sur le mot "Suite', il n'y a que le "S" qui est viré (ce que je ne m'explique pas à la vue du code).

Si tu as une petite correction à apporter , je suis preneur, ^^

M&m
 
M

Membre supprimé 156683

Guest
Re : VBA copier coller caractères avec exception

Oui j'ai copié/collé ton code sans y touché avec une colonne de données bidon mais sans filtre ni rien.

Bref mais j'ai trouvé le problème et la solution

Au lieu de mettre

Code:
 If Len(c) > 2 Then c = Mid(c, 1, Len(c) - 3)

Il faut :

Code:
 If Len(c) > 2 Then c = Left(c, Len(c) - 3)

et là ça marche sans problème ;)

Encore merci pour tout Pierrot,

Je pense qu'on peut classer ce topic comme résolu.

M&m
 

Pierrot93

XLDnaute Barbatruc
Re : VBA copier coller caractères avec exception

Re,

si tu avais bien déclaré la variable (en rouge) :
Code:
Sub test()
[COLOR="Red"][B]Dim c As Range[/B][/COLOR]
For Each c In Range("A1", Range("A65536").End(xlUp))
    If Len(c) > 2 Then c = Mid(c, 1, Len(c) - 3)
Next c
End Sub

la réaction sur ton poste est étrange....
 

Discussions similaires

Statistiques des forums

Discussions
312 196
Messages
2 086 097
Membres
103 116
dernier inscrit
kutobi87