XL 2021 Recopier tableau en divisant une intervalle

Guillaumeg3

XLDnaute Junior
Supporter XLD
Bonjour à tous,

Je viens vers vous car j'ai un problème que je n'arrive pas à résoudre sous VBA.
J'ai un tableau où dans mon exemple, la colonne F a une classe d'âge sous forme 0-17, 18-25, 26-30 etc...
Moi je voudrais recopier ce tableau dans une nouvelle feuille mais plus avec des intervalles d'âges mais l'âge direct 0,1,2,3,4,5,6.... avec les données associées dans les autres colonnes.
Exemple dans le nouveau tableau j'ai en "F" le chiffre 14, je dois avoir dans les autres colonnes les mêmes données que dans la ligne de la tranche d'âge 0-17. Si j'ai 26, je dois avoir les mêmes données que dans la ligne 26-36 etc.
Comme la colonee H ne contient pas toujous une intervalle j'avais défini :
If InStr(ws.Range("F" & i).Value, "-") > 0 Then
pour ensuite dire soit de spliter l'intervalle où de recopier la ligne telle quelle.

Merci de votre aide.
 

Pièces jointes

  • Classeur1test.xlsx
    11.1 KB · Affichages: 3
Dernière édition:

Guillaumeg3

XLDnaute Junior
Supporter XLD
Bonjour Sylvanu.
En fait c'est un tableau exemple. Je ne cherche pas à corrélé spécifiquement une case à une autre mais uniquement splitter mes tranches d'âge en âge tout court et associé l'ensemble de la ligne correspondante à cette tranche d'âge. Dans cette ligne il peut il y avoir un tarif une devise etc
J'ai mis un exemple ou les ... correspond à etc.
Je ne sais pas si cela est plus clair.
 

Pièces jointes

  • Classeur1test (1).xlsx
    14.3 KB · Affichages: 1

Guillaumeg3

XLDnaute Junior
Supporter XLD
Aie je viens de voir que mon énoncé n'était pas claire j'ai confondu F et H pour le tiret.
Je l'ai modifié.
Mon exemple de tableau est déjà ultra simplifié par rapport à ce que je dois traiter^^. C'est peut être mon énoncé qui n'est pas clair du coup et c'est pour cela que je m'emmele les pinceaux.
Ce que je veux dire c'est que je veux recopié mon tableau en feuil1 mais si en F j'ai un tiret alors on split la ligne en âge distinct.
Ici J'ai18-25 en F4 alors dans le nouveau tableau j'ai en F4 18 avec les même données entre A4 et K4
en F5 j'aurai 19 en F6 j'aurai 20 etc toujours avec les même données dans F4 de l'intervale 18-25 et si il n'y pas de tiret alors on copie la ligne telle quelle.
 

CHRIS1945

XLDnaute Occasionnel
Bonjour Guillaumeg3,

Ton barème n'est pas très clair : tu mets 2 fois une série de date et parfois pas de date ???
Si tu veux faire des séries différentes, il faut donner les critères de sélection.
Je ne connais pas assez ton application pour te conseiller comment organiser ton signalétique.
En attendant, j'ai répondu, je crois, à ton besoin de savoir comment rechercher les informations correspondantes à un âge parmi un barème de fourchette d'âges.
Le traitement se fait par 2 VBA :
1 VBA évènementiel qui se déclenche dès que l'on change dans la colonne F de la feuill2
Ce VBA se contente de vérifier que : l'on change quelque chose dans colonne F dans la Feuill2 et que ce queque chose est <= 70. alors il fait appel au deuxième VBA appelé MAJ
2 VBA appelé MAJ : c'est le VBA qui fait le travail de recherche : j'ai fortement documenté les VBA

Donc maintenant si tu introduit dans la feuill2 et dans la colonne F de la ligne 2 à 20 un âge, le VBA va réinitialiser toute la colonne H et initialiser le tarif correspondant aux âges demandés
Dès que le VBA rencontre une cellule vide, il s'arrête (à voir si cela convient - si nécessaire d'avoir des lignes vides il faudra adapter le VBA)

S'il faut d'autres renseignements, il suffit d'ajouter les variables nécessaires et d'insérer les instructions dans le VBA (c'est indiqué dans les commentaires du VBA)
Si c'est trop compliqué pour toi, il faudra que tu te montres plus précis dans ta demande qui est un peu nébuleuse et je le ferai.
Merci de confirmer si cela répond à tes attentes.
Bonne continuation
Chris
 

Pièces jointes

  • Recopier tableau.xlsm
    23.8 KB · Affichages: 3

Guillaumeg3

XLDnaute Junior
Supporter XLD
Merci Chris1945,

Je me suis rendu compte que mon explication n'était pas clair et donc je ma formule VBA aussi.
J'ai réussi avec cà
VB:
Sub CopierTableau()
    Dim feuille1 As Worksheet
    Dim feuille2 As Worksheet
    Dim derniereLigne As Long
    Dim i As Long
    Dim intervalle As String
    Dim debut As Integer
    Dim fin As Integer
    Dim age As Integer
    Dim ligneDest As Long
    
    Set feuille1 = ThisWorkbook.Sheets("Feuille1")
    Set feuille2 = ThisWorkbook.Sheets("Feuille2")
    
    derniereLigne = feuille1.Cells(Rows.Count, 1).End(xlUp).Row
    
    ligneDest = 2
    
    For i = 2 To derniereLigne ' Commencer à la ligne 2 pour ignorer l'en-tête
        intervalle = feuille1.Range("F" & i).Value
        
        If InStr(intervalle, "-") > 0 Then
            debut = Split(intervalle, "-")(0)
            fin = Split(intervalle, "-")(1)
            
            For age = debut To fin
                feuille2.Cells(ligneDest, "A").Resize(1, 11).Value = feuille1.Cells(i, "A").Resize(1, 11).Value
                feuille2.Cells(ligneDest, "F").Value = age
                ligneDest = ligneDest + 1
            Next age
        Else
            feuille2.Cells(ligneDest, "A").Resize(1, 11).Value = feuille1.Cells(i, "A").Resize(1, 11).Value
            ligneDest = ligneDest + 1
        End If
    Next i
End Sub
 

Discussions similaires

Réponses
7
Affichages
266
Réponses
25
Affichages
600

Statistiques des forums

Discussions
311 709
Messages
2 081 774
Membres
101 816
dernier inscrit
Jfrcs