Regrouper plusieurs colonnes d'un même type en une seule
Bonjour à tous,
je suis doctorant en sociologie et me met à excel pour traiter de nombreuses données.
Actuellement j'aurais besoin de regrouper plusieurs successives en une seule, et que ces colonnes se succèdent dans l'ordre. Pour cela j'ai trouvé une formule :
=OFFSET($A$1;MOD(ROW($A1)-1;COUNTA($A$1:$A$10));INT((ROW($A1)-1)/COUNTA($A$1:$A$1
Mes colonnes représentent sont des années.
J'ai plusieurs colonnes par années. Et j'aimerais regroupé à la suite les colonnes d'une même année.
J'ai donc pensé à un index match avec la valeur de l'année, puis au offset.
Par contre je ne sais pas du tout comment placer les parenthèses ni même si c'est possible au final !
Je vous remercie par avance de votre aide.
Si besoin, le fichier est trouvable à :
(P.S : pour la petite histoire, à l'origine j'ai simplement besoin de savoir quel est le nombre de mots différents dans une cellule. N'ayant trouvé de formule je sépare donc chaque mot sur une colonne différente. Puis transpose en vertical pour trouver les doublons au sein de chaque colonnes. Maintenant il me faudrait regrouper les colonnes par années pour trouver les doublons par années)
Bonsoir et bienvenue
f.guern a écrit :(P.S : pour la petite histoire, à l'origine j'ai simplement besoin de savoir quel est le nombre de mots différents dans une cellule. N'ayant trouvé de formule je sépare donc chaque mot sur une colonne différente. Puis transpose en vertical pour trouver les doublons au sein de chaque colonnes. Maintenant il me faudrait regrouper les colonnes par années pour trouver les doublons par années)
Merci de joindre ton fichier avec les mots dans une cellule. On essaiera de te trouver la formule ou un code.
Amicalement
Nad
Bonsoir Nad et merci pour ta réponse.
Voici donc en pièce jointe le fichier brute que j'ai. D'ailleurs je n'ai laissé que quelques lignes, le fichier total comptabilisant 5330 lignes...
Ce dont j'ai besoin c'est de savoir combien il y a de mots différents dans la cellule" liste de mots précédents" par fichier, mais également par année.
Pour avoir le décompte de mots différents par fichier, j'ai enlever les doublons de chaque ligne, puis réalisé un décompte.
Il me faudrait maintenant mettre tous les mots d'une année sur une colonne, pour supprimer les doublons et réalisé encore un décompte.
Par contre j'imagine qu'il y a peut être plus simple pour des connaisseurs !
Merci encore
f.
Bonjour f.guern,
Une solution par macro (plus facile qu'avec des formules !!) dans le fichier.
Bonjour vba-new,
WAOU ! merci énormément de ton aide, ta macro est tout simplement génial !
Il y a trois choses que je n'ai malheureusement pas compris :
- le total par année des mots différents n'a été réalisé que sur l'année 1996. Comment faire pour avoir ce résultat pour les autres années 1998, 1998, etc ?
- que rentres-tu dans une case pour faire appel à cette macro ?
- je n'y connais tellement rien que je ne sais même pas comment modifier ni même déplacer les boutons !
En tout cas tu me réduits un temps de travail de nombreuses heures au minimum !
Merci encore énormément,
françois
Re,
Oui c'est normal, c'était pour tester et voir si la solution par programmation te convenait. C'est corrigé dans le fichier joint. Tu rajoutes les années que tu veux en colonne G.f.guern a écrit :- le total par année des mots différents n'a été réalisé que sur l'année 1996. Comment faire pour avoir ce résultat pour les autres années 1998, 1998, etc ?
On ne rentre rien. Ce n'est pas une formule mais une macro programmée en VBA.f.guern a écrit :- que rentres-tu dans une case pour faire appel à cette macro ?
Tu fais un clic droit sur le bouton et tu déplaces le bouton en pointant sur la bordure.f.guern a écrit :- je n'y connais tellement rien que je ne sais même pas comment modifier ni même déplacer les boutons !
Pour voir les différents codes appuie sur Alt+F11, ça t'ouvrira l'éditeur VBA et ru pourras voir le code.
Pour affecter une macro à un bouton, fais un clic droit sur le bouton et clique sur affecter une macro puis choisis la macro à affecter.
Bonsoir vba-new et encore une fois : WAOU et merci.
C'est exactement ce que je voulais, donc rien de mieux à dire.
Entre temps j'avais fais à la mano pour quelque année en trouvant un script makelist pour concaténer dans une cellule tous les mots d'une année entière, puis text to column, recherche des doublons, et comptage des mots d'une même ligne.
Avec ce script j'avais un résultat inférieur de 1 par rapport à toi (108 au lieu de 109 par exemple !). Ca ne change pas grande chose au résultat final.
f.
Re,
Effectivement ! En fait mon code comptait le vide en D2 comme un mot. Remplace tout le code par celui-ci :f.guern a écrit :Avec ce script j'avais un résultat inférieur de 1 par rapport à toi (108 au lieu de 109 par exemple !)
Option Explicit
Function nbMotDiff(mot As String)
Dim tbl, temp
Dim ind As Long, i&, j&, cpt&
If mot <> "" Then
tbl = Split(mot, " ")
ReDim temp(1 To UBound(tbl) + 1)
temp(1) = tbl(0)
ind = 1
For i = 0 To UBound(tbl)
cpt = 0
For j = 1 To UBound(tbl) + 1
If temp(j) = tbl(i) Then Exit For
If temp(j) <> tbl(i) And tbl(i) <> "" Then cpt = cpt + 1
Next j
If cpt = UBound(tbl) + 1 Then ind = ind + 1: temp(ind) = tbl(i)
Next i
nbMotDiff = ind
End If
End Function
Sub test()
Dim i As Long, derlignF As Long
Application.ScreenUpdating = False
derlignF = Range("f" & Rows.Count).End(xlUp).Row 'dernière ligne de la colonne F
If derlignF > 1 Then Range("f2:f" & derlignF).ClearContents 'supprime les valeurs de la colonne F
For i = 2 To Range("a" & Rows.Count).End(xlUp).Row
Cells(i, 6) = nbMotDiff(Cells(i, 4))
Next i
End Sub
Sub testannee()
Dim cel As Range, phrase As String, i As Long, derlignH
Application.ScreenUpdating = False 'désactive la mise à jour de l'écran
derlignH = Range("h" & Rows.Count).End(xlUp).Row 'dernière ligne de la colonne H
If derlignH > 1 Then Range("h2:h" & derlignH).ClearContents 'supprime les valeurs de la colonne H
For i = 2 To Range("g" & Rows.Count).End(xlUp).Row
phrase = ""
For Each cel In Range("a:a")
If cel = Cells(i, 7) Then phrase = phrase & " " & cel.Offset(, 3)
Next cel
phrase = Trim(phrase)
If phrase <> "" Then Cells(i, 8) = nbMotDiff(phrase)
Next i
End SubA toi de tester.
Bonjour !
ton code modifié fonctionne pour le mieux. Rien à dire, vraiment. Merci beaucoup !
J'ai inséré une colonne dans mon fichier donc G se retrouve en H, et H se retrouve en I.
Je modifie donc testannée comme suit ?
Option Explicit
Function nbMotDiff(mot As String)
Dim tbl, temp
Dim ind As Long, i&, j&, cpt&
If mot <> "" Then
tbl = Split(mot, " ")
ReDim temp(1 To UBound(tbl) + 1)
temp(1) = tbl(0)
ind = 1
For i = 0 To UBound(tbl)
cpt = 0
For j = 1 To UBound(tbl) + 1
If temp(j) = tbl(i) Then Exit For
If temp(j) <> tbl(i) And tbl(i) <> "" Then cpt = cpt + 1
Next j
If cpt = UBound(tbl) + 1 Then ind = ind + 1: temp(ind) = tbl(i)
Next i
nbMotDiff = ind
End If
End Function
Sub test()
Dim i As Long, derlignF As Long
Application.ScreenUpdating = False
derlignF = Range("f" & Rows.Count).End(xlUp).Row 'dernière ligne de la colonne F
If derlignF > 1 Then Range("f2:f" & derlignF).ClearContents 'supprime les valeurs de la colonne F
For i = 2 To Range("a" & Rows.Count).End(xlUp).Row
Cells(i, 6) = nbMotDiff(Cells(i, 4))
Next i
End Sub
Sub testannee()
Dim cel As Range, phrase As String, i As Long, derlignH
Application.ScreenUpdating = False 'désactive la mise à jour de l'écran
derlignH = Range("I" & Rows.Count).End(xlUp).Row 'dernière ligne de la colonne H
If derlignH > 1 Then Range("i2:i" & derlignH).ClearContents 'supprime les valeurs de la colonne H
For i = 2 To Range("h" & Rows.Count).End(xlUp).Row
phrase = ""
For Each cel In Range("a:a")
If cel = Cells(i, 8) Then phrase = phrase & " " & cel.Offset(, 3)
Next cel
phrase = Trim(phrase)
If phrase <> "" Then Cells(i, 9) = nbMotDiff(phrase)
Next i
End SubBonjour,
Oui ça devrait être ça (si la colonne a été ajoutée après la colonne F). A toi de tester.