Microsoft 365 macro-formule pour recopier une ligne automatiquement à chaque changement de nom

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 !

fabguilb

XLDnaute Nouveau
Bonjour,

J'ai un fichier excel d'un grand livre fournisseur en pièce jointe

Je tente en vain avec des formules ou une macro afin de recopier le nom du fournisseur (401xxx) en face de chaque écriture comptable avec une date (col B) ou un libellé (col E) et qui a un montant au débit (colonne F) et/ ou au credit (colonne G), et cela à chaque changement de fournisseur
Par exemple en ligne A3 le nom 401AC devrait se recopier de la ligne A4 à A 10 et, au changement du nom en A12 que celui ci puisse se recopier en A13 jusqu'à A17 etc...
Quelqu'un peut-il m'aider ?
je vous joins le fichier
Merci à tous par avance
 
Bonjour fabguilb

Voici un code à mettre dans un module et à tester
VB:
Sub RecopieNom()
  Dim dLig As Long, Lig As Long
  Dim MemNom As String
  With ActiveSheet
    dLig = .Range("A" & Rows.Count).End(xlUp).Row
    Lig = 3
    Do While Lig <= dLig
      If .Range("A" & Lig) <> "" Then
        If InStr(1, .Range("A" & Lig), "Total", vbTextCompare) = 0 Then
          MemNom = .Range("A" & Lig)
          GoTo SuiteLig
        Else
          MemNom = ""
        End If
      End If
      If .Range("A" & Lig) = "" And MemNom <> "" Then
        .Range("A" & Lig) = MemNom
      End If
SuiteLig:
      ' Incrémenter la ligne
      Lig = Lig + 1
    Loop
  End With
End Sub

Il fonctionne parfaitement bien chez moi, sur le fichier exemple 😜

A+
 
Bonjour fabguilb

Voici un code à mettre dans un module et à tester
VB:
Sub RecopieNom()
  Dim dLig As Long, Lig As Long
  Dim MemNom As String
  With ActiveSheet
    dLig = .Range("A" & Rows.Count).End(xlUp).Row
    Lig = 3
    Do While Lig <= dLig
      If .Range("A" & Lig) <> "" Then
        If InStr(1, .Range("A" & Lig), "Total", vbTextCompare) = 0 Then
          MemNom = .Range("A" & Lig)
          GoTo SuiteLig
        Else
          MemNom = ""
        End If
      End If
      If .Range("A" & Lig) = "" And MemNom <> "" Then
        .Range("A" & Lig) = MemNom
      End If
SuiteLig:
      ' Incrémenter la ligne
      Lig = Lig + 1
    Loop
  End With
End Sub

Il fonctionne parfaitement bien chez moi, sur le fichier exemple 😜

A+
Merci je vais tester
 
Bonsoir,
Une autre solution est possible, mais comme tu as supprimé ton fichier initial, je ne vais pas poster le fichier réponse. (peut-être pour un souci de confidentialité?)
Si cela t'intéresse, tu le dis
PS, dans le fichier que je pourrais te joindre, j'ai supprimé le TCD du premier onglet.
Bonne soirée
 
- 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

Réponses
2
Affichages
1 K
Retour