Insérer des lignes sous conditions
Bonjour à toutes et tous,
Je suis proche du niveau 0 en VBA et je peux malheureusement y consacrer que peu de temps. Toutefois, je remplis régulièrement des fichiers qui me prennent beaucoup de temps. Je serais reconnaissant à l'un d'entre vous de m'apporter de l'aide pour résoudre mon problème.
Je vais tâcher de joindre un fichier pour bien expliquer.
En colonne H, se trouve des chiffres qui ne doivent pas dépasser 55, si c'est le cas, je dois m'arranger pour corriger cela. Je prends l'exemple de la ligne 2 du fichier joint, dont le volume en H est initialement de 150.
- j'insère une à deux lignes vierges (selon si le volume est plus ou moins important, ici, je dois en mettre 2) sous la ligne contenant un "Volume_Eau" en colonne H supérieur à 55
- Je copie-colle les informations de la ligne contenant ce volume trop gros dans les lignes vierges que je viens de créer. A savoir les infos se trouvant de la colonne A à F (cf exemple).
- Dans les lignes vierges insérées, en colonne G, je mets la valeur 0.
- Enfin, en colonne H des lignes vierges (plus maintenant) et de la ligne initiale (2), je divise le nombre initial (150) pour que le volume soit inférieur à 55. Ici, j'ai divisé en 3, j'ai donc trois lignes (2, 3 et 4) avec 50 en volume_eau (colonne H).
J'ai tâché d'être le plus clair possible, j'ai toutefois conscience que c'est un peu alambiqué...
En vous remerciant par avance si quelqu'un trouve le temps pour m'apporter une solution limitant le temps de travail...
Cordialement,
Romain.
ps: note peu utile, mais il s'agit d'un fichier pour faire travailler un robot pipeteur qui distribue des volumes d'ADN et d'eau afin de les diluer. En m'aidant, vous aiderez la recherche au CNRS à aller plus vite! ^^
Salut rcaussev,
n'étant guère féru dans tes matières, je suppose qu'il y aura un hic quelque part.
J'ai dû convertir les valeurs en [H:H] en remplaçant les "." par des "," pour arriver à quelque chose.
Á toi de me dire comment ça fonctionne...
Un double-clic sur la feuille démarre la macro.
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'
Dim iIdx%
'
Cancel = True
Application.ScreenUpdating = False
'
Columns("H").Replace What:=".", Replacement:=","
Columns("H").NumberFormat = "##0.00"
Columns("G:H").HorizontalAlignment = xlHAlignRight
'
For x = Range("A" & Rows.Count).End(xlUp).Row To 2 Step -1
If CDbl(Range("H" & x).Value) > 55 Then
iIdx = 1
Do
iIdx = iIdx + 1
Loop While CDbl(Range("H" & x).Value) / iIdx > 55
Range("A" & x + 1 & ":A" & x + (iIdx - 1)).EntireRow.Insert
Range("A" & x + 1).Resize(iIdx - 1, 6).Value = Range("A" & x).Resize(1, 6).Value
Range("G" & x + 1).Resize(iIdx - 1, 1).Value = 0
Range("H" & x).Resize(iIdx, 1).Value = CDbl(Range("H" & x).Value) / iIdx
End If
Next
'
Application.ScreenUpdating = True
'
End Sub
A+
Bonjour curulis57,
Merci beaucoup pour votre réponse!
Je vais prendre le temps de checker ça convenablement durant les jours prochains et je vous tiens au courant. :)
Je me ferais également un plaisir, si tout roule comme sur des roulettes, de vous transmettre une petite vidéo du robot que ce fichier est censé alimenter! Une sorte de récompense... :)
Cordialement,
Romain.
Bonjour Curulis,
Excellent, ça correspond tout à fait à ce dont j'ai besoin, y compris ce que je n'avais pas précisé. Mes vérifications semblent avoir balayé tous les cas. :)
Grand merci, donc! Je tâcherais de vous transmettre quelques nouvelles par mp.
Je vais clôre ce sujet mais il est possible que je revienne à la charge avec une autre cas
A bientôt!
Romain.