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 !

Re : abc client

Bonjour Alessandro,

peut-être
si tu nous expliques la logique de la disposition
Qu'est-ce qui fait que les données se retrouvent dans les groupes 01, 02, 03, ...? dans les colonnes A, B, C, P ?

A+
OK je viens de comprendre la colonne I
Je regarde
qu'est-ce qu'on fait quand il y a C (ou P) sans 01/02/... ?
 
Dernière modification par un modérateur:
Re : abc client

bn soir
non tous les clients on leur 01/02/03/04/05 je seulent oublie du le mettre
Alessandro

peut-être
si tu nous expliques la logique de la disposition
Qu'est-ce qui fait que les données se retrouvent dans les groupes 01, 02, 03, ...? dans les colonnes A, B, C, P ?

A+
OK je viens de comprendre la colonne I
Je regarde
qu'est-ce qu'on fait quand il y a C (ou P) sans 01/02/... ?[/QUOTE]
 
Re : abc client

Bonsoir le fil, bonsoir le forum,

Je n'ai pas trouvé de solution sans passer par un second onglet (Foglio2). En pièce jointe ton fichier modifié avec le code commenté. Il doit y avoir beaucoup plus simple mais ça à l'air de fonctionner...
Le fichier :

 

Pièces jointes

Re : abc client

Bonsoir alessandro, Xwprft,

Bonsoir Robert 🙂, ch'uis encore battu sur le fil! 😉

Un essai dans le fichier joint (pas forcément le plus optimisé).
.

  • dans le code, il y a une constante Base, modifiable bien entendu, qui est la première colonne où écrire les résultats.
  • cliquer sur le bouton noir pour lancer la macro.
  • le code devrait permettre les catégories de A01 à Z99
  • une Mise en Forme Conditionnelle (MFC) colore les cellules non vides du résultat en gris.
  • le code est dans le module de code de la feuille "Foglio1
  • le code est un peu commenté
VB:
Sub ventiler()

'Base est la colonne de début
Const Base = "M"

Dim Source, Lettres$(), Numeros(), i&, n&, j&, j2&, s$, Col&
Dim ligne&, cpt&, max&

Application.ScreenUpdating = False
'lecture du tableau Source
Source = Range(Cells(2, 1), Cells(Rows.Count, 1).End(xlUp)).Resize(, 9).Value
'ajoute une colonne au tableau source
ReDim Preserve Source(1 To UBound(Source), 1 To 10)

'lecture des numéros sans doublons
'et dans la colonne 10 de Source, on met le numéro
ReDim Numeros(0 To 99)
For i = 1 To UBound(Source)
  n = Val("0" & Right(Source(i, 9), 2))
  Numeros(n) = n
  Source(i, 10) = n
Next i

'lecture des lettres sanns doublons
'et dans la colonne 9 de Source, on met la lettre en majuscule
ReDim Lettres(1 To 26)
For i = 1 To UBound(Source)
  s = UCase(Left(Source(i, 9), 1))
  Lettres(Asc(s) - 64) = s
  Source(i, 9) = s
Next i
  
'effacement des colonnes de résultats
Range(Cells(1, Range(Base & 1).Column), Cells(1, Range(Base & 1).Column + 26)).EntireColumn.ClearContents
'ligne où commencer l'écriture pour un début de numéro
ligne = 2
For n = 1 To 99     'boucle sur les numros possibles
  If Numeros(n) > 0 Then
    'le numéro existe dans la Source
    Col = Range(Base & 1).Column    'numéro de la colonne d'écriture pour le numéro
    Cells(ligne, Col).NumberFormat = "00"   'écriture du numero
    Cells(ligne, Col) = Format(Numeros(n), "00")   'format du numero
    For j = 1 To 26   'boucle sur les lettres
      If Len(Lettres(j)) > 0 Then
        'la lettre existe dans la Source
        Col = Col + 1 'numéro de la prochaine colonne d'écriture pour la 1ière lettre
        Cells(1, Col) = Lettres(j)  'écriture de la lettre en ligne 1
        cpt = ligne   'prochaine ligne où écrire RASCL et LOCCL
        For i = 1 To UBound(Source)   'boucle sur la source
          If Source(i, 9) = Lettres(j) And Source(i, 10) = Numeros(n) Then
           ' le code correspond au numéro en cours de traitement
           ' et à la lettre en cours de traitement
            Cells(cpt, Col) = Source(i, 2)  'écriture de RASCL
            Cells(cpt, Col + 1) = Source(i, 3)  'écriture de LOCCL
            cpt = cpt + 1   'prochaine ligne d'écriture
          End If
          'max est la ligne max d'écriture pour le numéro en cours
          If cpt > max Then max = cpt
        Next i
      'on vient de traiter une lettre, on incrémente la colonne de 1
      'en fait, il faut l'incrémenter de 2
      ' le second incrément se fait au début de la boucle j
      Col = Col + 1
      End If
    Next j
    ' on vient de traiter un numéro on saute quelques lignes
    ligne = 2 + max + 1
    max = 0
  End If
Next n
      
Application.ScreenUpdating = True
End Sub
 

Pièces jointes

Dernière édition:
Re : abc client

Bonsoir le fil, bonsoir le forum,

Après plus de test j'ai vu qu'il y avait des bugs. Voici la version 02 corrigée :

[Édition]
Bonsoir MaPomme je ne t'avais pas vu. Battu peut-être mais ma version 1 était pleine de bugs...
 

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

  • Question Question
Microsoft 365 Rechercher date
Réponses
5
Affichages
226
Réponses
13
Affichages
306
Réponses
7
Affichages
249
Réponses
15
Affichages
582
Réponses
2
Affichages
470
Retour