Formule et limite de 32767 caractères par cellule : macro pour splitter les résultats

bool2gom

XLDnaute Junior
Bonjour ;)

Je dispose du fichier suivant (1mo, donc uploadé sur un Wetransfer).


Au sein d'une macro (dont le code est ci-dessous) :
-Je fais un vlookup dans la colonne D
-La formule est copiée jusqu'en cellule D3000 (j'ai besoin d'aller jusqu'à la ligne 30000 et des brouettes)

La limite de 32767 caractères est atteinte en cellule D2710. A partir de la ligne suivante, tous les caractères sont tronqués au delà de 32767 caractères. :(

J'aurais donc besoin :
-d'une macro qui "splitte" le résultat obtenu en colonne D en autant de colonnes que nécessaires (D, E, F, etc...), par groupe de ~12000 caractères (pas plus).
-que le premier caractère dans chaque colonne soit la première lettre qui arrive après le "|"
-que le dernier caractère dans chaque colonne soit un "|"

Merci d'avance pour votre aide !

Code :

Code:
'
' Macro1 Macro
'

'
    Range("C1").Select
    ActiveCell.FormulaR1C1 = "concat"
    Range("D1").Select
    ActiveCell.FormulaR1C1 = "regex"
    Range("E1").Select
    ActiveCell.FormulaR1C1 = "nbchar"
    Range("C2").Select
    ActiveCell.FormulaR1C1 = "=RC[-1]&""|"""
    Range("C2").Select
    Selection.AutoFill Destination:=Range("C2:C31659")
    Range("C2:C31659").Select
    Range("D2").Select
    ActiveCell.FormulaR1C1 = "=IF(RC[-3]=R[-1]C[-3],R[-1]C&RC[-1],RC[-1])"
    Range("D2").Select
    Selection.Copy
    Range("D2:D9").Select
    ActiveSheet.Paste
    Range("D9").Select
    Application.CutCopyMode = False
    Selection.Copy
    Range("D9:D16").Select
    ActiveSheet.Paste
    
    Range("D9").Select
    Application.CutCopyMode = False
    Selection.Copy
    Range("D9:D3000").Select
    ActiveSheet.Paste
    
    



For Each sh In ActiveWorkbook.Sheets
If sh.Name Like "Sheet2" Then
 sh.Name = "skumapping"

End If
Next sh

End Sub
 
Dernière édition:

camarchepas

XLDnaute Barbatruc
Re : Formule et limite de 32767 caractères par cellule : macro pour splitter les résu

Bonjour ,

Voulu tester pour voir :
La macro NewC

plantage ici

Sheets("1").Select
Et oui , pas de feuille nommée 1 dans le classeur.

L'on créé bien une nouvelle feuille , mais pas de renommage comme prévu puisque la condition n'est pas respectée.

Il manque un truc non ?
 

bool2gom

XLDnaute Junior
Re : Formule et limite de 32767 caractères par cellule : macro pour splitter les résu

Bonjour,

Sorry, j'ai volontairement supprimé les autres feuilles (car info perso).
La macro à prendre en compte est à la fin du code :

Code:
'
' Macro1 Macro
'

'
    Range("C1").Select
    ActiveCell.FormulaR1C1 = "concat"
    Range("D1").Select
    ActiveCell.FormulaR1C1 = "regex"
    Range("E1").Select
    ActiveCell.FormulaR1C1 = "nbchar"
    Range("C2").Select
    ActiveCell.FormulaR1C1 = "=RC[-1]&""|"""
    Range("C2").Select
    Selection.AutoFill Destination:=Range("C2:C31659")
    Range("C2:C31659").Select
    Range("D2").Select
    ActiveCell.FormulaR1C1 = "=IF(RC[-3]=R[-1]C[-3],R[-1]C&RC[-1],RC[-1])"
    Range("D2").Select
    Selection.Copy
    Range("D2:D9").Select
    ActiveSheet.Paste
    Range("D9").Select
    Application.CutCopyMode = False
    Selection.Copy
    Range("D9:D16").Select
    ActiveSheet.Paste
    
    Range("D9").Select
    Application.CutCopyMode = False
    Selection.Copy
    Range("D9:D3000").Select
    ActiveSheet.Paste
 

camarchepas

XLDnaute Barbatruc
Re : Formule et limite de 32767 caractères par cellule : macro pour splitter les résu

Bon ,

Si j'ai tout compris ,

Le calcul étant automatique , il y avait télescopage entre la macro et le calcul interne.

j'ai également compacté un peu le code sans trop me fatiguer .

et là plus d'erreur

Code:
Sub Test()
'
    Range("C1").FormulaR1C1 = "concat"
    Range("D1").FormulaR1C1 = "regex"
    Range("E1").FormulaR1C1 = "nbchar"
    Range("C2").FormulaR1C1 = "=RC[-1]&""|"""
    Range("C2").AutoFill Destination:=Range("C2:C31659")
    Application.Calculation = xlCalculationManual
      Range("D2").FormulaR1C1 = "=IF(RC[-3]=R[-1]C[-3],R[-1]C&RC[-1],RC[-1])"
      Range("D2").AutoFill Destination:=Range("D2:D31659")
    Application.Calculation = xlCalculationAutomatic
    Application.CutCopyMode = False



For Each sh In ActiveWorkbook.Sheets
If sh.Name Like "Sheet2" Then
 sh.Name = "skumapping"

End If
Next sh

End Sub
 

bool2gom

XLDnaute Junior
Re : Formule et limite de 32767 caractères par cellule : macro pour splitter les résu

Merci beaucoup.

Mais ça me donne ça :

image.jpg

+ quand je refais tourner la macro entière avec ton code modifié, j'ai encore l'erreur de manque de mémoire (car je dépasse 32767 caractères).

2ywyhw3.jpg


En fait il faut que la macro continue à copier les données dans la cellule / colonne adjacente, pour éviter l'erreur des 32767 caacatères.
 

Pièces jointes

  • image.jpg
    image.jpg
    47.9 KB · Affichages: 49
  • image.jpg
    image.jpg
    47.9 KB · Affichages: 50
Dernière édition:

bool2gom

XLDnaute Junior
Re : Formule et limite de 32767 caractères par cellule : macro pour splitter les résu

Modifié le 1er post en plus simple pour une meilleure compréhension.

OK pour passer le calcul d'automatique à manuel pendant la copie de la formule.
Je remarque qu'en fait la macro ne plante pas, mais ne copie que les 32767 premiers caractères dans la cellule (les autres sont tronqués).
Peut-être que l'erreur ne vient que de la quantité de données à calculer, finalement ?

Merci.
 
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Formule et limite de 32767 caractères par cellule : macro pour splitter les résu

Bonsoir bool2gom,


Et Hop! Un essai dans le fichier joint. Quelques valeurs on été supprimées pour alléger le fichier. Le code est dans module1.

nota: le tableau source doit être trié par catégorie.

nota: voir fichier dans le message #15.
 
Dernière édition:

bool2gom

XLDnaute Junior
Re : Formule et limite de 32767 caractères par cellule : macro pour splitter les résu

Il me faudrait juste une dernière chose : que dans chaque colonne, les données :
-commencent par "([lettre]..."
-finissent par "...[lettre])" (=enlever le "|")

Merci 1000 FOIS pour ton aide !!!
Merci le forum !
 

Discussions similaires

Réponses
13
Affichages
2 K

Statistiques des forums

Discussions
314 619
Messages
2 111 215
Membres
111 068
dernier inscrit
Lirije