créer un nombre de feuilles à partir d une colonne qui contient des données et insérer ces données

  • Auteur de la discussion Steph Tex
  • Date de début

Steph Tex

Nouveau membre
Bonjour à la communauté,
Je fais appel aux plus vaillants.
Je suis très débutante dans la programmation vba et voici la macro que j'aimerai utiliser. Aussi je me dis que peut être que je vois un grand.

Dans une feuille excel où j'ai extrait des données d un logiciel comptable, dans ma première colonne j'ai les numéros des comptes comptables rangés par ordre croissant.
Ces numéros de comptes apparaissent plusieurs fois dans cette colonnes.
exemple car je ne sais pas si je suis claire:
A1: T4011
B1: T4011
C1: T4011
D1: T4014
E1: T4014
F1: T4018
Dans cette exemple je voudrais créer 3 feuilles nommées T4011, T4014 et T4018
et sur chacune de ses feuilles, dans une cellule, disons dans la cellule A1 pour faire simple, je voudrai qu il y ait soit T4011 en A1 sur la feuille T4011, T4014 en A1 sur le feuille T4014 etc...
Et là ou ça se corse, c'est que je ne sais pas à l avance combien de numéros de comptes différents il pourrait y avoir lors de mon extraction du logiciel comptable vers excel.

Pour l instant j'ai réussi à récupérer sur le net un code qui me permet de calculer le nombre de comptes différents qu il y a dans ma colonne...mais je sèche pour la suite...
Voici le code que j'ai récupéré pour calculer le nombre de compte différents présents dans la colonne A sans connaitre le nombre de lignes définies.

Code:
Sub CptDiffVal()

'Compte le nombre de valeurs différentes contenues dans une colonne.
Dim Li, Col, Buf1, Cpt1, CptLi, CptCol, I, J, K
 
Li = 1  'N° de la ligne où la liste des valeurs à compter commence
Col = 1 'N° de la colonne où la liste des valeurs à compter commence
 
'Initialiser les variables
CptLi = 0
CptCol = 0
Cpt1 = 0

For I = Li To 65535
    If IsEmpty(ActiveSheet.Cells(I, Col)) = False Then
        CptLi = CptLi + 1
    Else
        Exit For
    End If
Next I

'Compter le nombre de valeurs différentes contenues dans la colonne choisie
Buf1 = ActiveSheet.Cells(Li, Col).Value
Cpt1 = 1
For K = Li To (Li - 1) + CptLi 'Lire chaque cellule de la colonne
    '---   'Si une valeur différente de la précédante dans la cellule visitée
    If ActiveSheet.Cells(K, Col) <> Buf1 Then
        Cpt1 = Cpt1 + 1 'Incrémenter le compteur
        Buf1 = ActiveSheet.Cells(K, Col).Value
    End If
Next K
 
ActiveSheet.Cells(K, Col).Value = Cpt1  'Récupère le nombre de valeurs différentes

End Sub

Merci pour votre aide précieuse.
 

zeb

Modérateur
Salut,

M'enfin, pourquoi veux-tu tout calculer d'avance ?
Vas-y ligne par ligne. Si une feuille s'appelant T1234 n'existe pas, la créer.

---------------------------

Pour présenter du code sur ce forum, merci d'utiliser la balise code.
C'est facile. Au début du code, tu écris [code=vb], et à la fin, [/code].

Je t'invite même à corriger ton premier message, avant que le modérateur ne s'en aperçoive !
Il ne badine pas sur le règlement.
 

Steph Tex

Nouveau membre
Merci pour l info de la balise code et pour le reste aussi.
Oui du coup j'ai trouvé ça et ca fonctionne plutot bien mais ce n'est pas moi qui l'ai fait
Je la laisse si ca peut aider quelqu'un. Enplus lapersonne qui me l' fait l'a super bien expliqué pour quelqu un qui debute comme moi:
Code:
Sub Macro1()
Dim OB As Object 'déclare la variable OB (Onglet de Base)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim PL As Range 'déclare la variable PL (PLage)
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim CEL As Range 'déclare la variable CEL (CELlule)
Dim TMP As Variant 'déclare la variable TMP (tableau TeMPoraire)
Dim I As Integer 'déclare la variable I (Incrément)
Dim R As Range 'déclare la variable R (Recherche)

Set OB = Sheets("Feuil1") 'définit l'onglet OB
DL = OB.Cells(Application.Rows.Count, 1).End(xlUp).Row + 1 'définit la dernière ligne éditée DL de la colonne 1 (=A) de l'onglet OB
Set PL = OB.Range("A1:A" & DL) 'définit la plage PL
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
For Each CEL In PL 'boucle sur toutes les cellules CEL de la plage PL
    If CEL.Value <> "" Then D(CEL.Value) = "" 'si la cellule n'est pas vide, alimente le dictionnaire D
Next CEL 'prochaine cellule de la boucle
TMP = D.keys 'récupère les valeurs uniques (sans doublons) de la colonne A dans le tableau temporaire TMP
For I = 0 To UBound(TMP) 'boucle sur toutes les valeurs (uniques) du tableau TMP
    'définit la recherche R (recherche la valeur unique dans la plage PL, en partant de la dernìere ligne de cette plage, valeur entière)
    Set R = PL.Find(TMP(I), OB.Cells(DL, 1), xlValues, xlWhole)
    Application.Sheets.Add after:=Sheets(Sheets.Count) 'ajoute un nouvel onglet en dernière position
    ActiveSheet.Name = TMP(I) 'renomme l'omglet avec le nom de la valeur unique
    R.EntireRow.Copy Sheets(TMP(I)).Range("A1") 'copie la ligne de la première occurrence trouvée dans la cellule A1 du nouvel onglet
Next I 'nouvelle valeur unique de la boucle
End Sub
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 128
Messages
6 717 832
Membres
1 586 367
Dernier membre
ramkin
Partager cette page
Haut