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,
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.
@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
Bonne continuation