Répéter une cellule X fois selon la valeur d'une autre cellule (VBA)

Bonjour à tous,

Je travaille actuellement sur un fichier de gestion de flotte pour ma boite. J'essaye de réaliser actuellement quelque chose mais je me heurte aux limites des formules. J'imagine que le VBA est préféré pour l'opération que je souhaite faire, langage que je ne maîtrise absolument pas.

J'ai ajouté le fichier pour une meilleure compréhension.

Tous les jours, j'importe un fichier CSV dans la cellule C1, feuille "Import".

Dans cette feuille, chaque ligne représente un véhicule. Par exemple pour la première ligne, j'ai l'immatriculation du véhicule (F2), le parking sur lequel il est affecté (C2), ainsi que des infos sur ce parking comme le nombre de places souscrites (D2), et le nombre de places actuellement occupées (E2).

Dans la feuille "Dashboard", colonne A, je souhaiterais répéter chaque parking (Import!colonne C) autant de fois qu'il y a de places (soit la valeur en Import!D2). Il faut que je vois également comment éviter les doublons sans pour autant toucher au CSV.

Ainsi, si j'ai 5 places en parking "Arcueil - La Vache Noire" pour seulement 4 places occupées, le dashboard doit printer ceci :

Arcueil - La Vache Noire | Arcueil - La Vache Noire1 | XX-XXX-XX
Arcueil - La Vache Noire | Arcueil - La Vache Noire2 | XX-XXX-XX
Arcueil - La Vache Noire | Arcueil - La Vache Noire3 | XX-XXX-XX
Arcueil - La Vache Noire | Arcueil - La Vache Noire4 | XX-XXX-XX
Arcueil - La Vache Noire | Arcueil - La Vache Noire5 |

L'objectif étant d'avoir dans "dashboard", une ligne par place de parking et de voir facilement celles qui ne sont pas occupées.

Si vous pouvez me donner quelques pistes d'améliorations

Merci par avance et bonne journée à vous,

40dash-exemple.xlsm (855.10 Ko)

bonjour,

une proposition via une macro

Sub aargh()
    Dim parking()
    Set ws = Sheets("dashboard")
    ws.Range("D2:D100000").Clear
    With Sheets("import")
        dl = .Cells(Rows.Count, "c").End(xlUp).Row
        ptr = -1
        curpar = ""
        For i = 2 To dl
            If curpar <> .Cells(i, "c") Then
                If i > 2 Then
                    pd = .Cells(i - 1, "D")
                    pu = .Cells(i - 1, "E")
                    For j = pu + 1 To pd
                        ptr = ptr + 1
                        ReDim Preserve parking(ptr)
                        parking(ptr) = curpar & j
                    Next j
                End If
                curpar = .Cells(i, "c")
            End If
            ptr = ptr + 1
            ReDim Preserve parking(ptr)
            parking(ptr) = .Cells(i, "A")
        Next i
        ws.Range("D2").Resize(ptr + 1) = Application.Transpose(parking)
    End With
End Sub

Bonjour,

En fait la macro que tu demandes, c'est juste une macro de recopie qui insère des lignes vides quand nécessaire, je t'ai fait une macro de test qui t'exporte correctement les 5 premières colonnes suivant ce que tu souhaites:

Pour la gestion des doublons, si par exemple tu as les infos d'un parking ligne 1 à 5, puis 30 à 32, seules les informations lignes 1 à 5 vont être prises, les premières que rencontre le programme, qui s'exécute du haut vers le bas.

Bonjour h2so4

Bonjour à vous,

Merci beaucoup pour votre aide !

@h2so4 : Malheureusement j'ai une erreur "Incompatibilité de type (Erreur 13)" lorsque j'essaye d'éxécuter ton code. J'ai affecté la macro à un bouton.

fgnbfo1

@Ausecour : C'est exactement ça ! Je viens de tester ta macro et ça fonctionne niquel ! Merci merci merci beaucoup !!

Juste un point : Pour les parkings contenant le mot "Garage" (ex : "Z - Garage - Livraison"; "Z - Garage - Restitution"), ce sont des garages fictifs sur lequel je n'ai pas besoin d'afficher une ligne par place.

Comment pourrais-je faire pour que le code ne tienne pas compte de ces lignes, et qu'il affiche directement, dans la colonne B, une ligne par véhicule et non pas une ligne par place ?

Bonne journée,

Bonjour,

Merci pour ce retour, j'ai modifié un peu le programme que je t'avais fournis pour que les lignes qui contiennent "garage" ne créent pas de lignes en plus, et j'ai regardé le résultat du test, je n'avais aucune ligne contenant garage de vide, et il y avait toujours des lignes vides bien entendu.

Je te transmets le fichier modifié:

bonjour,

@h2so4 : Malheureusement j'ai une erreur "Incompatibilité de type (Erreur 13)" lorsque j'essaye d'éxécuter ton code. J'ai affecté la macro à un bouton. IMAGE

j'ai testé la macro sur le fichier que tu as donné, elle fonctionne. c'est que ton fichier réel est différent, soit de par sa structure soit de par le type de données que certaines colonnes contiennent (ici, l'erreur est dûe au fait que la colonne nombre de places disponibles et/ou places occupées ne contient pas un nombre dans une ligne >2 ).

mais tu as une solution de la part d'ausecour qui fonctionne donc tout est pour le mieux dans le meilleur des mondes.

Bonjour,

Merci pour ce retour, j'ai modifié un peu le programme que je t'avais fournis pour que les lignes qui contiennent "garage" ne créent pas de lignes en plus, et j'ai regardé le résultat du test, je n'avais aucune ligne contenant garage de vide, et il y avait toujours des lignes vides bien entendu.

Je te transmets le fichier modifié:

Copie de DASH_exemple.xlsm

Merci infiniment, c'est exactement ce que je souhaitais et cela fonctionne parfaitement !!

Cela donne envie d'apprendre le VBA vu ce qu'on peut faire avec...

Merci encore !

@h2so4 : Effectivement, après avoir testé l'erreur venait de mon côté, désolé. Merci beaucoup malgré tout pour ton aide

Bonjour,

Excel permet déjà plein de choses, mais VBA donne aussi beaucoup de possibilités oui Si tu souhaites apprendre un peu le langage VBA, tu trouveras des cours sur ce site.

Bonne continuation

Rechercher des sujets similaires à "repeter fois valeur vba"