insertion de données en fonction d'une base

  • Initiateur de la discussion Initiateur de la discussion Hugues
  • Date de début Date de début

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 !

Hugues

XLDnaute Impliqué
Bonjour Le Forum,

Je souhaiterais une aide pour finaliser un projet.
Dans un classeur j'ai deux feuilles :
la première contient l'ensemble du plan comptable (N° de compte, libellé, cycle)
la deuxième contient le grand livre

Je souhaiterais mettre en page le grand livre :
en insérant une colonne dans laquelle on mentionne le cycle,
en fonction du N° de compte, rechercher dans le plan comptable le cycle concerné
répéter le nom du cycle jusqu'au prochain compte

Je vous joins un extrait du plan comptable et d'un grand livre.

Merci par avance,

Hugues
 

Pièces jointes

Re : insertion de données en fonction d'une base

Bonsoir,
Dans un module tu insères une colonne dans ta feuille

Code:
Feuil2.Range("a:a").Insert (xlToRight)

Ensuite tu créés une boucle sur ta colonne de données
Code:
For Ligne = 3 To Feuil2.Range("C65535").End(xlUp).Row

Tu poursuis en découpant le texte et en vérifiant si c'est une valeur numérique :
Code:
If IsNumeric(Mid(Feuil2.Cells(Ligne, 3).Value, 1, 6)) Then
Si c'est une valeur numérique, tu la recherches dans ta premiere feuille
Code:
With Feuil1.Range("a:a")
    Set NumCompte = .Find(Mid(Feuil2.Cells(Ligne, 3).Value, 1, 6), LookIn:=xlValues)

Tu inscris le résultat de la recherche de la troisième colonne de la ligne trouvé dans ta seconde feuille
Code:
Feuil2.Cells(Ligne, 1).Value = Feuil1.Cells(NumCompte.Row, 3).Value
sinon tu recopies la valeur du dessus
Code:
Feuil2.Cells(Ligne, 1).Value = Feuil2.Cells(Ligne - 1, 1).Value

et tu reboucles.


Dans un module, tu peux inserer le code suivant:
Code:
Option Explicit
Sub MEF()
Dim Ligne As Long
Dim NumCompte As Variant
Dim Cpt_Cherche As Long

Feuil2.Range("a:a").Insert (xlToRight)

For Ligne = 3 To Feuil2.Range("C65535").End(xlUp).Row

If IsNumeric(Mid(Feuil2.Cells(Ligne, 3).Value, 1, 6)) Then
    With Feuil1.Range("a:a")
    Set NumCompte = .Find(Mid(Feuil2.Cells(Ligne, 3).Value, 1, 6), LookIn:=xlValues)
    If Not NumCompte Is Nothing Then
        Feuil2.Cells(Ligne, 1).Value = Feuil1.Cells(NumCompte.Row, 3).Value

    Else
    Feuil2.Cells(Ligne, 1).Value = Feuil2.Cells(Ligne - 1, 1).Value
    End If
    End With



Else
    Feuil2.Cells(Ligne, 1).Value = Feuil2.Cells(Ligne - 1, 1).Value
End If
Next Ligne

End Sub

Je te remet ton fichier, tu n'as plus qu'a executer la macro MEF.

A+

Domic
 

Pièces jointes

Re : insertion de données en fonction d'une base

Bonsoir, hugues et Domic

sensiblement le même cheminement :

Code:
Sub Macro1()
    Columns("A:A").Insert Shift:=xlToRight
    For Each cel In Range("C2:C" & [C65000].End(xlUp).Row)
        If IsNumeric(Left(cel, 6)) Then _
            Cells(cel.Row, 1).Value = Evaluate("index(Cycle,MATCH(" & Left(cel, 6) & ",N__cpte,0))")
    Next cel
    Range("A2:A" & [c65536].End(xlUp).Row) _
        .SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=R[-1]C"
    Range("A2:A" & [c65536].End(xlUp).Row).Value = Range("A2:A" & [c65536].End(xlUp).Row).Value
    Columns("A:A").EntireColumn.AutoFit
End Sub
 

Pièces jointes

- 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