Parcourir une collection et copier la collection dans une range

Bonjour,

Je bute sévère sur un problème de collection.
Je ne connais pas bien et c'est la première fois que j'en crée une.
J'ai récupéré une feuille de données complète dans un tableau (69 lignes et 13 colonnes --> nb de lignes variable, nb de colonnes fixe)

data = Sheet_EFY.Range("A1:M" & lastRow).Value

Comme je vais faire un traitement qui modifie certaines cellules de toutes les lignes du tableau "data", à l'aide d'une boucle, j'extrais chaque ligne dans un variant "newRow" à chaque itération de ma boucle for-next

newRow = Application.Index(data, compteurBoucle, 0)

Je fais mon traitement qui modifie 2 cellules dans 2 colonnes et je mets à jour mon variant "newRow":

 newRow(8) = versionName 'vient modifier en stockant la valeur versionName dans la colonne 8 de "newRow"
 newRow(13) = versionCONF

 'Toute ligne newRow modifiée est ajoutée dans la collection NewData
 newData.Add newRow

Lorsque mon traitement est fini et que je veux copier le contenu de ma collection newData dans ma feuille excel dans la range "A2:Mxxx": ça pêche...

Sheet_EFY.Range("A2:M" & lastRow).ClearContents
Sheet_EFY.Range(Sheet_EFY.Cells(2, 1), Sheet_EFY.Cells(newData.Count, 13)) = data

J'ai compris qu'une collection ne peut avoir qu'une dimension par rapport aux arrays, que ce n'est pas aussi chiant en termes de redimensionnement, qui'il n'y avait que 2 méthodes et 2 propriétés et donc ça me paraissait hyper pratique.

Par contre, je suis incapable de, ne serait-ce que lire une entrée de cette collection:

newData.count 'fonctionne --> 1061 lignes dans mon fichier traitement finalisé
MsgBox newData.Item1(i) 'Erreur dexécution '438': Propriété ou méthode non gérée par cet objet
MsgBox newData(1) 'Erreur dexécuton ' 13 : Incompatibilité de type
MsgBox newData(1).Cells(1).Value 'Erreur 424 Objet requis

La fenêtre espion montre pourtant qu'elle contient bien des données:

capture 0155

Dans chaque item de la collection, il y a 13 sous-items qui stockent les valeurs de mes 13 colonnes.
Suite au traitement, ma collection est censée contenir 1061 lignes mais la fenêtre espion ne recense que 256 items...
Bref, comment importer les données de ma collection dans la feuille excel et comment lire une entrée de la collection ?

Merci d'avance pour votre aide et bonne journée.

Cordialement.

bonjour pipout64,

pourquoi ce contournement vers cette collection ?

si vous lisez votre plage dans une matrice, puis vous modifiez vos colonnes (8 et 13??), et puis vous collez la matrice complète ou partielle vers votre plage, prêt.

avec vous un fichier anonymisé ?

Bonjour BsAlv,

Merci pour votre retour.
Ben, j'avoue que je ne connaissais pas les collections à part de nom et que je trouvais pratique d'utiliser ça sans s'embêter avec des boucles.
Vous trouverez attaché le fichier anonymisé.
Merci de vous pencher sur mon problème.
Mais quand même pour ma culture d'homme du monde, j'aimerais bien lire des entrées de ma collection !

23conf-anonymise.xlsx (20.29 Ko)

Bonsoir à tous, 🙂

pipout64, c'est quoi le rapport entre ta question initiale et le fichier joint 😵‍💫

En fait, tu veux splitter la colonne "CONFIGURATION" de la feuille "EFY" en autant de lignes que de nombres inclus entre les accolades.

Si pas d"accolades, on ne renvoie qu'une ligne de données pour résumer grossièrement la problématique 🤪

J'aimerais bien voir les adeptes de Power Query se pencher sur le problème 😉 ou peut-être à l'aide d'un regex 🙃

klin89

Re 🙂

Ici par exemple, le split doit renvoyer 3 lignes de YU et 1 ligne de JG, c'est bien ça ?

YU(GBM0{1,2,3});JG(GBM03)

klin89

Bonsoir,

MsgBox newData(1) 'Erreur dexécuton ' 13 : Incompatibilité de type

newData(1) renvoie bien le premier élément de la collection sauf que celui-ci étant un tableau et non une valeur, l'instruction MsgBox renvoie une erreur.

Par ailleurs, votre collection ne contenant que les éléments modifiés sans référence à la ligne de votre feuille concernée, elle ne pourra fournir qu'une feuille finale des seuls éléments modifiés.

Enfin, il n'existe pas de méthode pour l'objet collection permettant globalement de la copier dans une plage. Il faut parcourir ses éléments un par un.

Bonsoir,

...

J'aimerais bien voir les adeptes de Power Query se pencher sur le problème 😉

...

Si gentiment demandé

Un essai, donnant les 1061 lignes attendues... Mais certainement améliorable

Fichier modifié

Le code M :

let
    Source = Excel.CurrentWorkbook(){[Name="T_Data"]}[Content],
    Fract = Table.ExpandListColumn(Table.TransformColumns(Source, {{"CONFIGURATION", Splitter.SplitTextByDelimiter(";", QuoteStyle.Csv),
        let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "CONFIGURATION"),
    DeterVersion = Table.ReplaceValue(Fract,each [VERSION], each Text.BeforeDelimiter([CONFIGURATION],"("),Replacer.ReplaceValue,{"VERSION"}),
    Final = Table.ExpandListColumn(Table.TransformColumns(DeterVersion, {{"CONFIGURATION", each List.TransformMany({
        [a = Text.BetweenDelimiters(_,"(","{"), b = Text.Split(Text.BetweenDelimiters(_,"{","}"),",")]},
        each [b], (s,c) => [rec = Text.Remove(s[a],")") & Text.From(c)][rec])}}), "CONFIGURATION")
in
    Final
Sub Splitter()
     Dim Arr, Dict, i, j, aOut(1 To 12), N

     Set Dict = CreateObject("scripting.dictionary")     'créer un dictionaire pour le Output

     Arr = Sheets("EFY").Range("A1").CurrentRegion.Resize(, 13).Value2     'lire le contenu de "EFY"
     For i = 2 To UBound(Arr)                'boucler les lignes
          For j = 1 To UBound(aOut)
               aOut(j) = Arr(i, j)           'les 12 cellules par ligne
          Next
          sp = Split(Arr(i, 13), ";")        'splitter la 13eme cellule avec séparateur ";"
          For j = 0 To UBound(sp)            'boucler les parts
               sp1 = Split(Replace(sp(j), "{", "("), "(")     'splitter ce part avec séparateurs "(" et "{"
               If UBound(sp1) = 1 Then N = 1 Else N = UBound(Split(sp1(2), ",")) + 1     ' si on n'a que 2 parts, aucun doublon, sinon le nombre de doublons est le nombre d'éléments entre les accolades
               aOut(8) = sp1(0)              'nom de la version
               For k = 1 To N                'nombre de doublons
                    Dict.Add Dict.Count, aOut     'ajouter cette matrice au dictionaire
               Next
          Next
     Next

     Application.ScreenUpdating = False
     With Sheets("EFY_RESULTAT eSPéré").Range("A28")     'à partir de cette cellule
          .Resize(10000, UBound(aOut)).ClearContents     'RAZ cette plage (grand assez !!!)
          If Dict.Count > 2 Then .Resize(Dict.Count, UBound(aOut)).Value = Application.Index(Dict.items, 0, 0)     'coller les items du dictionaire
     End With

     MsgBox Dict.Count & " lignes à partir de A28"

End Sub

Salut thev, cousinhub, il n'y avait pas encore votre réaction au moment où je commençais à répondre ...

BonsoirKlin89 (d'Auxerre ?).

C'est exactement ça !

Dans la feuille "EFY", en colonne M "CONFIGURATION", il y des versions déclinées en 2 lettres majuscules (YU, JG, BV, LK, DH, etc...) et pour chacune de ces versions sont associées des numéros de configurations s'échelonnant de 1 à 9 et indiquées dans les accolades si une version est applicable à plusieurs n° de configuration.

Le n° de configuration est GBM0x (x = 1 à 9) mais pour prendre moins de place, un formatage a été défini et on écrit un préfixe GBM0 avec les digits entre accolades.

Ainsi (GBM0{1,2,3}) = GBM01, GBM02 et GBM03.

Si une version n'est applicable qu'à une seule configuration, alors le n° de configuration se retrouve entre parenthèses (ex: JG(GBM03)).

Ainsi, la première ligne "YU(GBM0{1,2,3});JG(GBM03);BV(GBM03);LK(GBM03)" signifie que je vais dupliquer la ligne d'origine (donc celle la row 2 pour cet exemple) 6 fois.

  • Une ligne pour la version YU avec le n° de configuration GBM01
  • Une ligne pour la version YU avec le n° de configuration GBM02
  • Une ligne pour la version YU avec le n° de configuration GBM03
  • Une ligne pour la version JG avec le n° de configuration GBM02
  • Une ligne pour la version BV avec le n° de configuration GBM03
  • Une ligne pour la version LK3 avec le n° de configuration GBM01

Et la ligne d'origine disparait au profit de ces 6 lignes.
Je sais traiter tout ça avec des boucles For-Next mais j'en ai marre de ces boucles à gérer et comme je ne suis pas un dieu en VBA, je me disais qu'il y avait d'autres méthodes où tu fais tout direct et comme j'ai un paquet de lignes j'aimerais que ça se fasse rapidement.

Exemple des arrays où on te dit de passer par des boucles pour le remplir alors qu'en utilisant une instruction du style

data = Sheet_EFY.Range("A1:M" & lastRow).Value

ça se fait en un clin d'oeil.

Du coup, je voulais "me renouveler" et tenter des trucs d'où cette notion de collection.

  1. Le tableau data contient tout le contenu de la sheet EFY.
  2. Une boucle est créée pour créer extraire une ligne complète du tableau data et transférée dans un variant "newRow".
  3. Je fais mes traitements de versions et de configuration qui m'oblige à écrire la version dans l'index (?) 8 (colonne H) et le n° de configuration dans l'index 13 (colonne M) de cette newRow: toutes les autres données restent identiques puisque la ligne est dupliquée/
  4. J'ajoute cette newRow fraichement créée dans la collection newData qui concatène donc toutes les newRow créées.

Et c'est là que ça pêche...
J'arrive jusque là mais impossible de coller le contenu dans la feuille excel...

Sub DupliquerLignesAvecConfigurationsOptimise()

Dim Sheet_EFY As Worksheet
Dim data_EFY_Array As Variant 'Tableau à 2 dimensions dans lequel sont stockées toutes les cellules de la sheet EFY
Dim newData As Collection
Dim versionConfigArray() As String 'Stocke chq version avec ses n° de configurations associés après split --> YU(GBM0{1,2,3,4})
Dim versionConfig As String 'Après le splitte d'une EFY complète, on a une version et ses n° de configurations --> YU(GBM0{1,2,3,4})
Dim NumeroConfig As String 'stocke le n° de configuration
Dim NumeroConfigArray() As String 'Array qui stocke les n° de configuration splittés (pour une ligne)
Dim i As Integer, j As Integer
Dim newRow As Variant
Dim originalRow As Integer
Dim versionName As String
Dim lastRow As Long

Set Sheet_EFY = ActiveWorkbook.Sheets("EFY")
lastRow = Sheet_EFY.Cells(Sheet_EFY.Rows.Count, "M").End(xlUp).Row

' Charger les données de la feuille dans le tableau "data_EFY_Array"
data_EFY_Array = Sheet_EFY.Range("A1:M" & lastRow).Value

Set newData = New Collection 'nouvelle collection pour stocker les lignes modifiées

' Parcourir chaque ligne du tableau "data_EFY_Array"
For originalRow = 2 To lastRow
    If Not IsEmpty(data_EFY_Array(originalRow, 13)) Then
        ' Splitte les différentes versions par le point-virgule
        versionConfigArray = Split(data_EFY_Array(originalRow, 13), ";") 'On commence par la première EFY donc ligne 2 et colonne M (M2)
        'versions est un variant, une sorte de tableau qui stocke autant de valeurs qu'il y a de splits séparés par le ";"

        ' Parcourir chaque version
        For i = LBound(versionConfigArray) To UBound(versionConfigArray)
            versionConfig = Trim(versionConfigArray(i)) ' Supprimer les espaces autour de chaque version --> ne sert à rien car il n'y a pas d'espace dans les EFY

            ' Vérifier si la version contient des configurations entre accolades ou entre parenthèses
            If InStr(versionConfig, "{") > 0 Then
                ' Si plusieurs configurations sont dans des accolades
                NumeroConfig = Mid(versionConfig, InStr(versionConfig, "GHM0") + 4)
                NumeroConfig = Replace(NumeroConfig, "}", "") ' Supprimer accolade fermante
                NumeroConfig = Replace(NumeroConfig, "{", "") ' Supprimer accolade ouvrante
                NumeroConfig = Replace(NumeroConfig, ")", "") ' Supprimer parenthèse fermante
                NumeroConfigArray = Split(NumeroConfig, ",") 'Splitte la liste des EFY pour un MOV

                ' Dupliquer la ligne pour chaque configuration
                For j = LBound(NumeroConfigArray) To UBound(NumeroConfigArray) ' Si FE(GHM0{1,2,3}) alors on a 3 EFY et comme on est en base 0, on j = de 0 à 2
                    ' Préparer une nouvelle ligne
                    newRow = Application.Index(data_EFY_Array, originalRow, 0) ' Copie les données de la ligne originale stockées ds le tableau "data_EFY_Array"
                    'L'instruction Application.Index(data_EFY_Array, originalRow, 0) permet de copier toute la ligne de données correspondante à originalRow
                    'dans le tableau data_EFY_Array et de la stocker dans la variable newRow.
                    'En gros, si originalRow = 2, ça récupère la ligne 2 entière du tableau data_EFY_Array (c-a-d les données des colonnes A à M de la ligne 2 dans la sheet EFY).
                    'newRow devient une copie de cette ligne, ce qui nous permet ensuite de la modifier avant de la réécrire dans la feuille.
                    'Le dernier paramètre ds la fonction Index (ici = 0) signifie qu'on veut ttes les colonnes de la ligne spécifiée (et pas qu'une seule colonne).
                    'Ça renvoie donc la ligne complète sous forme de tableau.

                    versionName = Trim(Split(versionConfig, "(")(0)) ' Extrait le nom de la version (avant les parenthèses)
                    newRow(8) = versionName 'permet d'accéder et modifier une cellule spécifique (colonne H) ds la ligne newRow copiée à p.de la ligne d'origine
                    newRow(13) = "*GBM0" & Trim(NumeroConfigArray(j)) ' Met à jour la colonne M (13) avec la configuration spécifique

                    ' Ajouter cette nouvelle ligne au tableau
                    newData.Add newRow
                Next j
            ElseIf InStr(versionConfig, "(") > 0 Then ' Si une seule configuration, ajouter l'astérisque devant
                NumeroConfig = Mid(versionConfig, InStr(versionConfig, "GBM0") + 4, 1)
                newRow = Application.Index(data_EFY_Array, originalRow, 0) ' Copie des données de la ligne originale
                versionName = Trim(Split(versionConfig, "(")(0))
                newRow(8) = versionName
                newRow(13) = "*GHM0" & NumeroConfig
                newData.Add newRow ' Ajoute la nouvelle ligne newRow dans la collection newData
            End If
        Next i
    End If
Next originalRow

Sheet_EFY.Range("A2:M" & lastRow).ClearContents ' Effacer les anciennes lignes

Debug.Print newData.Count '--> fonctionne = 1061 lignes
MsgBox newData.Item1(i) 'Erreur dexécution '438': Propriété ou méthode non gérée par cet objet
MsgBox newData(1) 'Erreur dexécuton ' 13 : Incompatibilité de type
MsgBox newData(1).Cells(1).Value 'Erreur 424 Objet requis

'Foirage total : Opération FIASCO enclenchée :-((
For i = 1 To newData.Count
    Debug.Print newData.Item1(i) 'Erreur dexécution '438': Propriété ou méthode non gérée par cet objet
Next i

'Sheet_EFY.Range("A2").Resize(newData.Count, 13).Value = Application.Transpose(Application.Transpose(Application.Index(newData, 0)))
'Sheet_EFY.Range(Sheet_EFY.Cells(2, 1), Sheet_EFY.Cells(newData.Count, 13)) = newData
Sheet_EFY.Range(Sheet_EFY.Cells(2, 1), Sheet_EFY.Cells(newData.Count, 13)) = newData

'Sheet_EFY.Range("A2") = Cell A2 de la sheet "EFY" = cell de de départ pour placer les données modifiées
'Resize(newData.Count, 13) --> Cette méthode redimensionne la plage à partir de la cellule A2 en fonction du nombre de lignes à insérer et du nombre de colonnes.
'newData.Count donne le nombre total de nouvelles lignes (ex: s'il y a 12 nelles lignes à ajouter, newData.Count = 12).
'13 : Cela signifie que nous allons redimensionner la plage pour contenir 13 colonnes (de la colonne A à M).
'Donc, cela spécifie que la plage commence à A2, et aura newData.Count de lignes et 13 colonnes.

'Application.Transpose(Application.Transpose(Application.Index(newData, 0))) --> Partie un peu complexe pr convertir les données du tableau newData ds un format
'qui peut être écrit dans la feuille Excel
'--> Application.Index(newData, 0) :
'Application.Index permet d'extraire les données d'un tableau.
'Quand on utilise 0 comme deuxième argument dans Index, cela signifie qu'on veut toutes les lignes du tableau newData.
'Donc, Application.Index(newData, 0) retourne toutes les lignes de newData sous forme de tableau 2D (tableau de n lignes et 13 colonnes).

End Sub

Voili-voilou...
Soyez indulgents: je suis un bricoleur du VBA avec des rudiments qui n'évoluent que lentement.
J'utilise toujours les même boucles, les mêmes trucs de base et donc, dès que je me frotte à un truc nouveau, je bataille toujours des heures au carré.
J'ai toujours pas compris la différence entre worksheet et worksheets même si j''entends encore le coup du membre de la collection...

Bonne soirée !

Oups !
Sans les commentaires !

Sub DupliquerLignesAvecConfigurationsOptimise()

Dim Sheet_EFY As Worksheet
Dim data_EFY_Array As Variant 'Tableau à 2 dimensions dans lequel sont stockées toutes les cellules de la sheet EFY
Dim newData As Collection
Dim versionConfigArray() As String 'Stocke chq version avec ses n° de configurations associés après split --> YU(GBM0{1,2,3,4})
Dim versionConfig As String 'Après le splitte d'une EFY complète, on a une version et ses n° de configurations --> YU(GBM0{1,2,3,4})
Dim NumeroConfig As String 'stocke le n° de configuration
Dim NumeroConfigArray() As String 'Array qui stocke les n° de configuration splittés (pour une ligne)
Dim i As Integer, j As Integer
Dim newRow As Variant
Dim originalRow As Integer
Dim versionName As String
Dim lastRow As Long

lastRow = Sheet_EFY.Cells(Sheet_EFY.Rows.Count, "M").End(xlUp).Row

' Charger les données de la feuille dans le tableau "data_EFY_Array"
data_EFY_Array = Sheet_EFY.Range("A1:M" & lastRow).Value

Set newData = New Collection

' Parcourir chaque ligne du tableau "data_EFY_Array"
For originalRow = 2 To lastRow
    If Not IsEmpty(data_EFY_Array(originalRow, 13)) Then
        ' Splitte les différentes versions par le point-virgule
        versionConfigArray = Split(data_EFY_Array(originalRow, 13), ";") 

        ' Parcourir chaque version
        For i = LBound(versionConfigArray) To UBound(versionConfigArray)
            versionConfig = Trim(versionConfigArray(i))

            ' Vérifier si la version contient des configurations entre accolades ou entre parenthèses
            If InStr(versionConfig, "{") > 0 Then
                ' Si plusieurs configurations sont dans des accolades
                NumeroConfig = Mid(versionConfig, InStr(versionConfig, "GHM0") + 4)
                NumeroConfig = Replace(NumeroConfig, "}", "") ' Supprimer accolade fermante
                NumeroConfig = Replace(NumeroConfig, "{", "") ' Supprimer accolade ouvrante
                NumeroConfig = Replace(NumeroConfig, ")", "") ' Supprimer parenthèse fermante
                NumeroConfigArray = Split(NumeroConfig, ",") 'Splitte la liste des EFY pour un MOV

                ' Dupliquer la ligne pour chaque configuration
                For j = LBound(NumeroConfigArray) To UBound(NumeroConfigArray) ' Si FE(GHM0{1,2,3}) alors on a 3 EFY et comme on est en base 0, on j = de 0 à 2
                    ' Préparer une nouvelle ligne
                    newRow = Application.Index(data_EFY_Array, originalRow, 0) 
                    versionName = Trim(Split(versionConfig, "(")(0)) ' Extrait le nom de la version (avant les parenthèses)
                    newRow(8) = versionName 
                    newRow(13) = "*GBM0" & Trim(NumeroConfigArray(j))
                    newData.Add newRow
                Next j
            ElseIf InStr(versionConfig, "(") > 0 Then ' Si une seule configuration, ajouter l'astérisque devant
                NumeroConfig = Mid(versionConfig, InStr(versionConfig, "GBM0") + 4, 1)
                newRow = Application.Index(data_EFY_Array, originalRow, 0) ' Copie des données de la ligne originale
                versionName = Trim(Split(versionConfig, "(")(0))
                newRow(8) = versionName
                newRow(13) = "*GHM0" & NumeroConfig
                newData.Add newRow ' Ajoute la nouvelle ligne newRow dans la collection newData
            End If
        Next i
    End If
Next originalRow

Sheet_EFY.Range("A2:M" & lastRow).ClearContents ' Effacer les anciennes lignes
'Foirage total : Opération FIASCO enclenchée :-((
Sheet_EFY.Range(Sheet_EFY.Cells(2, 1), Sheet_EFY.Cells(newData.Count, 13)) = newData

End Sub

re,

ma 13eme colonne n'était pas là

Sub Splitter()
     Dim Arr, Dict, i, j, k, aOut(1 To 13), N, sp, sp1, sp2, t

     t = Timer
     Set Dict = CreateObject("scripting.dictionary")     'créer un dictionaire pour le Output

     Arr = Sheets("EFY").Range("A1").CurrentRegion.Resize(, 13).Value2     'lire le contenu de "EFY"
     For i = 2 To UBound(Arr)                'boucler les lignes
          For j = 1 To UBound(aOut)
               aOut(j) = Arr(i, j)           'les 12 cellules par ligne
          Next
          sp = Split(Arr(i, 13), ";")        'splitter la 13eme cellule avec séparateur ";"
          For j = 0 To UBound(sp)            'boucler les parts
               sp1 = Split(Replace(Replace(Replace(sp(j), "{", "("), ")", ""), "}", ""), "(")     'splitter ce part avec séparateurs "(" et "{"
               aOut(8) = sp1(0)              'nom de la version

               If UBound(sp1) = 1 Then
                    N = 1
               Else
                    sp2 = Split(sp1(2), ",")
                    N = UBound(sp2) + 1      ' si on n'a que 2 parts, aucun doublon, sinon le nombre de doublons est le nombre d'éléments entre les accolades
               End If

               For k = 1 To N                'nombre de doublons
                    aOut(13) = "*" & sp1(1)  'texte entre les parenthèses
                    If UBound(sp1) > 1 Then aOut(13) = "*" & sp1(1) & sp2(k - 1)      '1ier part et puis un part d'entre les accolades
                    Dict.Add Dict.Count, aOut     'ajouter cette matrice au dictionaire
               Next
          Next
     Next

     Application.ScreenUpdating = False
     With Sheets("EFY_RESULTAT eSPéré").Range("A28")     'à partir de cette cellule
          .Resize(10000, UBound(aOut)).ClearContents     'RAZ cette plage (grand assez !!!)
          If Dict.Count > 2 Then .Resize(Dict.Count, UBound(aOut)).Value = Application.Index(Dict.items, 0, 0)     'coller les items du dictionaire
     End With

     MsgBox Format(Dict.Count, "#,###") & " lignes à partir de A28" & vbLf & "en " & Format(Timer - t, "0.000\s")

End Sub

re,

maintenant avec fichier et votre macro fonctionnant

26conf-anonymise.xlsb (57.67 Ko)

Bonjour à tous,

Allez, moi aussi j'y vais de ma p'tite version (rien que du tableau et de la boucle donc très rapide surtout quand la taille du tableau source augmente). Cliquez sur le bouton Hop!

nota 1 : le code ( dansModule1) est un peu commenté.

nota 2 : la fonction Eclater(texte) (qui renvoie la liste des codes séparés par des ";" ) est utilisable sur les feuilles de calcul (exemple en cellule P4)

Salut à tous,

mafraise , si tu repasses, la colonne 8 doit renvoyer la version déclinée en 2 lettres majuscules (YU, JG, BV, LK, DH, etc...) comme nous l'a indiqué pipout64.

Retouche ton code.

C'est dingue ce que l'on peut réaliser en quelques lignes avec Power Query, faudra quand même que je m'y mette un jour, mais bon je n'ai toujours pas eu le déclic

klin89

Bonsoir à tous, bonsoir Klin89,

Monsieur Klin89 a écrit :
mafraise , si tu repasses, la colonne 8 doit renvoyer la version déclinée en 2 lettres majuscules (YU, JG, BV, LK, DH, etc...) comme nous l'a indiqué pipout64.

Retouche ton code.

Bon je vais voir ce que c'est...

Damoiseau Klin89 a tapoté :

C'est dingue ce que l'on peut réaliser en quelques lignes avec Power Query, faudra quand même que je m'y mette un jour, mais bon je n'ai toujours pas eu le déclic

Je l'ai eu le déclic. Donc j'ai commandé un manuel pour accélérer l'apprentissage. Mais Colissimo m'a dit m'avoir livré le bouquin alors que je n'ai rien reçu. Du coup ça m'a stoppé dans mon élan. Mais on n'y coupera pas me semble-t-il

Re Klin89 et pipout64 ,

Je n'avais pas vu qu'il fallait compléter la colonne 8. Klin89 me l'a signalé (contrairement à l'auteur de la question)

Voici donc la version v2 qui complète maintenant aussi la colonne 8. il n'y a pas eu beaucoup de modification à faire.

Rechercher des sujets similaires à "parcourir collection copier range"