Ok, je commence à comprendre.
Le coupable est cette instruction:
LaVoie = SupprimerEspace(Sheets(NOM_FEUILLE_DEST_GENERALE).Cells(LaLigneOrig, COL_DEST_DEPART_GARAGE))
Le problème est que tu vas lire des cellules fusionnées.
Il te faut tester la propriété MergeCells de la plage, et lire la première cellule de la plage fusionnée, que tu obtiens via la propriété MergeArea.
La fonction suivante devrait te satisfaire:
1 2 3 4 5 6 7 8 9
| Private Function GetCellValue(ByRef Rng As Excel.Range) As String
If (Rng.MergeCells) Then
Dim Data As Excel.Range
Set Data = Rng.MergeArea
GetCellValue = Data.Cells(1).Value
Else
GetCellValue = Rng.Value
End If
End Function |
Autre points:
- Ajoute la directive Option Explicit en tête de chaque module, et configure ton IDE pour le faire automatiquement.
- Tes fonctions sont trop grandes et violent le SRP (
https://en.wikipedia.org/wiki/Single...lity_principle). Divise les en plusieurs fonction plus petites.
- Tu as des variables non déclarées, et non typées.
- Utilise des références explicite plutôt que des références implicites.
- Les objets "Actifs" sont fortement dépendant du contexte, à bannir.
- Evite les noms de fonction avec des accents, ce n'est pas portable.
- Ton code ne devrait pas avoir besoin de sélectionner ni d'activer quoi que ce soit, c'est lent et fait ressembler ton classeur à un sapin de Noël.
- Utilise des références autant que possible pour alléger tes lignes.
Partager