Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/01/2012, 09h52   #1
Membre du Club
 
Femme Annie MARTINEZ
Étudiant
Inscription : janvier 2012
Messages : 61
Détails du profil
Informations personnelles :
Nom : Femme Annie MARTINEZ
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Étudiant
Secteur : Transports

Informations forums :
Inscription : janvier 2012
Messages : 61
Points : 63
Points : 63
Par défaut Concatenation de deux colonnes et inserer cette concatenation dans une nouvelle colonne

Bonjour à tous,

J'ai créé une macro qui me permet de concatener deux colonnes cell(i,1) et cell(i,2).

Ensuite je souhaites inserer une colonne automatiquement pour inserer les valeurs de ma concatenation.

Voici ci dessous ma macro

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Sub Traitement_Donnees()
 
Dim i As Long 'variable pour le nombre de lignes
Dim j As Long 'variable pour le nombre de colonnes
Dim lMaxRow As Long
Dim lMaxCol As Long
 
lMaxRow = SearchLastRow(CurrentWsSource) 'fonction 
lMaxCol = SearchLastCol(CurrentWsSource) 'fonction
 
For i = 2 To lMaxRow - 1 'en partant de la ligne 2 à l'avant derniere ligne
lMaxCol = 3 '3 eme colonne
Columns(i, lMaxCol).Insert
Cells(i, lMaxCol).Value = Cells(i, 1).Value & "_" & Cells(i, 2).Value 'concatenation
 
End sub
Je recois un message d'erreur à la ligne Columns(i,lmaxcol).insert et je ne sais pas pourquoi, il devrais inserer une troisieme colonne automatiquement et recuperer mon resultat (cells(i,lmaxcol).value).

j'esperes que mon explication est assez claire. Je vous remercie par avance pour vos aides.
Ozer45 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2012, 10h35   #2
Membre Expert
 
Homme
Retraité
Inscription : avril 2011
Messages : 700
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Retraité

Informations forums :
Inscription : avril 2011
Messages : 700
Points : 1 460
Points : 1 460
Bonjour,

As-tu essayé avec
Code :
Columns(lMaxCol).Insert
Cordialement.
gFZT82 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2012, 10h55   #3
Membre du Club
 
Femme Annie MARTINEZ
Étudiant
Inscription : janvier 2012
Messages : 61
Détails du profil
Informations personnelles :
Nom : Femme Annie MARTINEZ
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Étudiant
Secteur : Transports

Informations forums :
Inscription : janvier 2012
Messages : 61
Points : 63
Points : 63
Salut,

Merci pour ta reponse.

J'ai essayé Columns(lMaxCol).Insert mais ca me créé une colonne pour chaque ligne (si j'ai 50 lignes, il me crée 50 colonnes). Ca ne me crée pas une seule colonne

J'ai essayé de mettre ceci :

Code :
1
2
3
4
5
6
Sheets("source").Columns("C:C").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
For i = 2 To lMaxRow - 1
lMaxCol = 3
Cells(i, lMaxCol).Value = Cells(i, 1).Value & "_" & Cells(i, 2).Value 'concatenation des deux premieres colonnes
Next i
Le code ci dessus, me crée certes une nouvelle ligne mais cependant, il créé une nouvelle ligne à chaque fois que je lance ma macro et c'est pas vraiment ce que je souhaites.

J'aimerais garder la meme colonne insérée à chaque fois que je lance ma macro.
Ozer45 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2012, 11h18   #4
Membre Expert
 
Homme
Retraité
Inscription : avril 2011
Messages : 700
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Retraité

Informations forums :
Inscription : avril 2011
Messages : 700
Points : 1 460
Points : 1 460
Citation:
Le code ci dessus, me crée certes une nouvelle ligne mais cependant, il créé une nouvelle ligne à chaque fois que je lance ma macro et c'est pas vraiment ce que je souhaites.
De quelle ligne parles-tu ? C’est bien une colonne que tu ajoutes, non ?

Citation:
J'aimerais garder la même colonne insérée à chaque fois que je lance ma macro.
Si tu souhaites insérer ta colonne une seule fois, tu dois différencier les 2 traitements.
Tu as le choix entre plusieurs solutions :
- Tu effectues 2 traitements distincts
- Tu effectues un traitement unique qui intègre un test de présence de la 3eme colonne.
- Tu crée ta 3eme colonne avant d’effectuer le traitement.
C’est selon ….

Cordialement.
gFZT82 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 27/01/2012, 11h31   #5
Membre du Club
 
Femme Annie MARTINEZ
Étudiant
Inscription : janvier 2012
Messages : 61
Détails du profil
Informations personnelles :
Nom : Femme Annie MARTINEZ
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Étudiant
Secteur : Transports

Informations forums :
Inscription : janvier 2012
Messages : 61
Points : 63
Points : 63
Citation:
Envoyé par gFZT82 Voir le message
De quelle ligne parles-tu ? C’est bien une colonne que tu ajoutes, non ?
oui je rajoute une colonne, je me suis trompée en ecrivant desolée!!!!



Citation:
Envoyé par gFZT82 Voir le message
Tu as le choix entre plusieurs solutions :
- Tu effectues 2 traitements distincts
- Tu effectues un traitement unique qui intègre un test de présence de la 3eme colonne.
- Tu crée ta 3eme colonne avant d’effectuer le traitement.
C’est selon ….
as tu des idées de codes pour ta troisieme solution??? ca m'interesse

Merci
Ozer45 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2012, 11h45   #6
Membre Expert
 
Homme
Retraité
Inscription : avril 2011
Messages : 700
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Retraité

Informations forums :
Inscription : avril 2011
Messages : 700
Points : 1 460
Points : 1 460
La 3eme c’est la plus simple.
Sous Excel, avec ton mulot tu te positionnes sur la colonne, bouton droit, insertion … et le tour est joué .

Cordialement.
gFZT82 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 27/01/2012, 12h09   #7
Membre du Club
 
Femme Annie MARTINEZ
Étudiant
Inscription : janvier 2012
Messages : 61
Détails du profil
Informations personnelles :
Nom : Femme Annie MARTINEZ
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Étudiant
Secteur : Transports

Informations forums :
Inscription : janvier 2012
Messages : 61
Points : 63
Points : 63
Citation:
Envoyé par gFZT82 Voir le message
La 3eme c’est la plus simple.
Sous Excel, avec ton mulot tu te positionnes sur la colonne, bouton droit, insertion … et le tour est joué .

Cordialement.
ce ne sera plus automatique alors, il faudra à chaque fois creer manuellement une colonne pour ma macro c'est ca?

j'ai essayé ceci :

Code :
1
2
'Sheets("source").Columns("C:C").Select
'Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
mais comme je t'ai dit tout à l'heure, ca me créé une nouvelle colonne à chaque fois que je lance ma macro

PS: ce que j'ai oublié de dire c'est ma feuille "Source" contient un tableau de donnée avec colonne 1 : composant , colonne 2: site de fabrication et à partir de colonne 3: volume de composant produit par an
Ozer45 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2012, 12h12   #8
Membre du Club
 
Femme Annie MARTINEZ
Étudiant
Inscription : janvier 2012
Messages : 61
Détails du profil
Informations personnelles :
Nom : Femme Annie MARTINEZ
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Étudiant
Secteur : Transports

Informations forums :
Inscription : janvier 2012
Messages : 61
Points : 63
Points : 63
Voici un exemple de mon fichier!!!!
Fichiers attachés
Type de fichier : xls Exemple de tableau.xls (30,0 Ko, 1 affichages)
Ozer45 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2012, 13h12   #9
Membre Expert
 
Homme
Retraité
Inscription : avril 2011
Messages : 700
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Retraité

Informations forums :
Inscription : avril 2011
Messages : 700
Points : 1 460
Points : 1 460
Voici un exemple de code avec un test sur la 3eme colonne.
Si l'en-tête de cette colonne n'est pas "Concat", alors on insère une colonne et on écrit l'en-tête "Concat".

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Sub Traitement_Donnees()
 
Dim i As Long 'variable pour le nombre de lignes
Dim j As Long 'variable pour le nombre de colonnes
Dim lMaxRow As Long
Dim lMaxCol As Long
 
lMaxRow = SearchLastRow(CurrentWsSource) 'fonction
lMaxCol = SearchLastCol(CurrentWsSource) 'fonction
 
With Worksheets("source")
    If .Range("C1") <> "Concat" Then
        .Columns(3).Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
        .Range("C1") = "Concat"
    End If
    For i = 2 To lMaxRow - 1 'en partant de la ligne 2 à l'avant derniere ligne
        lMaxCol = 3 '3 eme colonne
        .Cells(i, lMaxCol).Value = .Cells(i, 1).Value & "_" & .Cells(i, 2).Value 'concatenation
    Next i
End With
 
End Sub
Cordialement.
gFZT82 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 27/01/2012, 14h10   #10
Membre du Club
 
Femme Annie MARTINEZ
Étudiant
Inscription : janvier 2012
Messages : 61
Détails du profil
Informations personnelles :
Nom : Femme Annie MARTINEZ
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Étudiant
Secteur : Transports

Informations forums :
Inscription : janvier 2012
Messages : 61
Points : 63
Points : 63
merci gFZT82 pour ton aide,

ca fonctionne!!!


je te remercie grandement ca faisait deux jours que je m'attarde dessus.
Ozer45 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h47.


 
 
 
 
Partenaires

Hébergement Web