[demande d'aide]Dissociation de liste en plusieurs onglets

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

barthsdee

XLDnaute Nouveau
Bonjour

J'ai un petit souci avec Excel

Je dispose d'un tableau de 12000 ligne par 30 colonnes environ. 12 000 lignes c'est beaucoup.... Je souhaite répartir ces 12000 lignes en onglet en me basant sur le contenu d'une colonne.


Ma colonne contient 319 communes différentes (les noms sont standardisés et sans accent ). J'aimerais trouver un système qui "lit mon tableau global ligne par ligne" et qui envoie ou copie chaque ligne dans des onglets spécifiques (un onglet par commune) et si possible qui crée les onglets automatiquement avec le nom de mes communes comme nom de feuilles. (je sais que ça représente un gros défi. mais si vous avez des solutions à me proposer, je suis preneur.
 
Re : [demande d'aide]Dissociation de liste en plusieurs onglets

Je vous envoie un exemple un peu bidouillé comme exemple plus poussé

J'ai continué mes investigations, ça ne vient pas des balises <br/>

Si je raccourcis la description, il n' y a plus de bug 1004 mais un nouveau apparait: les onglets sont tous créés mais seul une ligne est transférée...

Si je supprime la case description, tout marche
 

Pièces jointes

Dernière édition:
Re : [demande d'aide]Dissociation de liste en plusieurs onglets

J'ai continué mes investigations, ça ne vient pas des balises <br/>

Si je raccourcis la description (je vais m'adapter, il n' y a plus de bug 1004 mais un nouveau apparait: les onglets sont tous créés mais seul une ligne est transférée...

Je ne capte plus rien quand il y a trois colonnes à copier en critère tout passe, si j'en met 4 ça plante

J'ai pensé que c'était lié aux types de données:

J'ai fait un copier coller des valeurs de tout le tableau résultat => pareil
Je me suis dit que c'était peut être une colonne ou deux qui coince....

Je garde mes trois colonnes à copier, je laisse les communes en tant que critère de sélection => pas de souci , le système de tri marche uniquement avec 3 colonnes quelque soit ce que j'ai mis à l'intérieur (je change les contenus, ce n'est donc pas lié au formatage, ou au case vide)

Quand je met que la table contient 2 colonnes ça plante aussi => il doit y avoir un paramètre dans la v2 / v3 v4 qui fait que ça coince sur ces trois colonnes (le code initial étant prévu pour trois colonnes peut être ? )

J'épluche maintenant le code du truc et je trouve pas l'origine du problème

Option Explicit
Private Const Col As Long = 3 '<==== Colonne ou se trouve le discriminant
Private Const c As Long = 3 '<==== NB. de colonnes à traiter
Private Const En_Tete As Boolean = True '<==== Prendre en compte les en têtes True = Oui, False = Non
Private Sub CommandButton1_Click()
Load UserForm1
UserForm1.Show
Unload UserForm1
End Sub
Private Function toto(sh As Worksheet)
Dim i&, dDat(), dat(), oColl As New Collection
dDat = Array()
On Error Resume Next
With sh
For i = 1 + IIf(En_Tete = True, 1, 0) To .Cells(.Rows.Count, Col).End(xlUp).Row
If .Cells(i, Col).Value <> "" Then
oColl.Add CStr(.Cells(i, Col).Value), CStr(.Cells(i, Col).Value)
End If
Next
End With
On Error GoTo 0
ReDim dDat(oColl.Count - 1)
For i = 1 To oColl.Count: dDat(i - 1) = Array(oColl(i), dat): Next
toto = dDat
End Function

Sub tata(x$)
Dim i&, j&, k&, m&, s$, dDat(), oDat, dat(), F As Worksheet
Set F = Sheets("Tous") '<==== Nom de la feuille portant la liste
dDat = toto(F)
If dDat(0)(0) = "" Then Exit Sub
With F
For i = 1 To .Cells(.Rows.Count, 1).End(xlUp).Row
If .Cells(i, Col).Value <> "" Then
s = CStr(.Cells(i, Col).Value)
For j = 0 To UBound(dDat)
If dDat(j)(0) = s Then
oDat = dDat(j)(1)
m = 0
On Error Resume Next
m = 1 + UBound(oDat, c - 1)
On Error GoTo 0
ReDim Preserve oDat(0 To c - 1, 0 To m)
For k = 1 To c: oDat(k - 1, m) = Cells(i, k): Next
dDat(j)(1) = oDat
End If
Next j
End If
Next i
With Application: .ScreenUpdating = 0: .Calculation = -4135: .EnableEvents = 0: End With
For j = 0 To UBound(dDat)
On Error GoTo 0
oDat = dDat(j)(1)
On Error GoTo NF
With Sheets(dDat(j)(0))
If x = "Remplacer" Then
.[A1].CurrentRegion.ClearContents
If En_Tete = True Then .Rows(1).Value = Sheets("Tous").Rows(1).Value
End If
.Cells(.Rows.Count, 1).End(xlUp).Offset(1 + IsEmpty(.[A1]), 0).Resize(UBound(oDat, 2) + 1, c).Value = WorksheetFunction.Transpose(oDat)
.Columns(1).Resize(, c).Columns.AutoFit
End With
Next
.Activate
End With
With Application: .EnableEvents = 1: .Calculation = -4105: .ScreenUpdating = 1: End With
Exit Sub
NF:
Sheets.Add After:=Sheets(IIf(j, dDat(j + (j <> 0))(0), Me.Name))
With ActiveSheet
.Name = dDat(j)(0)
Debug.Print dDat(j)(0)
If En_Tete = True Then .Rows(1).Value = Sheets("Tous").Rows(1).Value
End With
Resume
End Sub


J'ai pensé que ça pouvait venir d'une inversion quelque part dans le code entre les variables Col et C mais même en m'arrangeant pour que Col et C soient égales => ça marche pas
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour