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.

100userliste.zip (25.50 Ko)

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,

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 ?

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 :

- que rentres-tu dans une case pour faire appel à cette macro ?

On ne rentre rien. Ce n'est pas une formule mais une macro programmée en VBA.
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 !

Tu fais un clic droit sur le bouton et tu déplaces le bouton en pointant sur la bordure.

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,

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 !)

Effectivement ! En fait mon code comptait le vide en D2 comme un mot. Remplace tout le code par celui-ci :
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 Sub

A 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 Sub

Bonjour,

Oui ça devrait être ça (si la colonne a été ajoutée après la colonne F). A toi de tester.

Rechercher des sujets similaires à "regrouper colonnes meme type seule"