Problème de manque lignes aléatoire (difficile)
Bonjour à tous, je débute en macro Excel et j'essaye d'automatiser une base de donnée.
Mon problème est le suivant : Dans mon Excel, il me manque des lignes, il existe dans ma base de donnée 2 états (Plein;Vide) or je voudrai en faire apparaître un troisième.(CasierVide) Ce nouvel état correspondrai à toutes les lignes qui n'apparaissent pas actuellement sur mon Excel.
Tout d'abord, la construction du tableau n'est pas facile à comprendre. Mon système est un stockage avec 9216 rangements et mon objectif est de faire apparaître chacun de ces rangements avec son état associé. Or le problème est le troisième état (CasierVide) car les lignes correspondantes à ce dernier n'apparaissent pas. Il faut donc réussir dans un premier temps à détecter automatiquement toutes lignes manquantes pour la faire apparaître dans le tableau avec son état associé. La difficulté est le fait que les espaces de lignes manquants sont aléatoires.
Pour une allée il y a 4608 emplacements (A01 / A02)
Chaque allée possèdes deux étages (R02 / R03)
Pour chaque étages il y'a donc 2304 emplacements avec:
une hauteur y (1 : 9)
une longueur x (1 : 128)
pour chaque position (x;y) il existe 2 coté
J'ai donc dans un premier temps organiser mon excel par Allée/étage
Exemple : Sur ma pièce jointe, dès la première ligne il mange déjà deux lignes qui devraient être celle-ci,
| Etat | allée | étage | coté | x | y |
| CasierVide | D01 | A01 | R02 | 1 | 1 | 1 |
| CasierVide | D01 | A01 | R02 | 2 | 1 | 1 |
J'ai essayé des méthodes utilisé sur d'autres Post mais je n'arrive pas à utiliser correctement la fonction (Selection.insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove)
Je ne connais pas trop le nom des fonctions sur Excel et j'utilise l'enregistrement de macro pour m'aider en générale, mais ici cela ne fonction pas.
Finalement, est-ce que quelqu'un pourrait à résoudre ce casse tête ? ^^
Si besoin, je peux vous apportez des informations complémentaires, n'hésiter pas à me solliciter !
PS : Je suis débutant dans ce langage de programmation, Si vous me donné des éléments de réponse en langage VBA n'hésitez pas à me détaller le fonctionnement <3
bonjour,
une proposition (ajoute les manquants à la suite des données déjà présentes dans la feuille), ne fonctionne pas sur MAC
Sub aargh()
Dim manquants(1 To 10000, 1 To 7) '10000 manquants maximum, à adapter éventuellement
With Sheets("16_08vrai") 'on travaille avec cette feuille
t = .UsedRange
Set dict = CreateObject("scripting.dictionary") 'dictionnaire des clés existantes
For i = 2 To UBound(t) 'on remplit le dictionnaire
cle = ""
For j = 2 To 7
cle = cle & t(i, j)
Next j
If dict.exists(cle) Then
MsgBox "doublon détecté " & cle & "ligne " & i & " et " & dict(cle): Exit Sub
Else
dict.Add cle, i
End If
Next i
' on détecte les manquant, on passe en revue toutes les combinaisons et on vérifie si la combinaison est présente dans le dictionnaire
For d = 1 To 1 ' tous les D
sd = "D" & Format(d, "00")
For a = 1 To 2 ' toutes les allées
sa = "A" & Format(a, "00")
For r = 2 To 3 'tous les étages
sr = "R" & Format(r, "00")
For c = 1 To 2 'tous les côtés
For x = 1 To 128 'tous les x
For y = 1 To 9 'tous les y
cle = sd & sa & sr & c & x & y 'on crée la clé pour la recherche dans le dictionnaire
If Not dict.exists(cle) Then
compteur_manquants = compteur_manquants + 1
dict.Add cle, compteur_manquants
manquants(compteur_manquants, 1) = "Casiervide"
manquants(compteur_manquants, 2) = sd
manquants(compteur_manquants, 3) = sa
manquants(compteur_manquants, 4) = sr
manquants(compteur_manquants, 5) = c
manquants(compteur_manquants, 6) = x
manquants(compteur_manquants, 7) = y
End If
Next y
Next x
Next c
Next r
Next a
Next d
.Cells(UBound(t) + 1, 1).Resize(compteur_manquants, 7) = manquants 'ajouter les manquants sur la feuille
End With
End Sub
C'est INCROYABLE ! ça fonction hyper bien, j'ai juste à refaire un filtre derrière et je retrouve tous mes manquants O_O
Merci énormément H2so4 <3