Problème détection dernière colonne

Bonjour à tous,

Je travail sur un fichier qui doit optimiser le transport de colis, pour l'instant c'est du gribouillage mais je bloque quand même sur une étape depuis plusieurs heures et je ne trouve pas de solution, c'est pour cela que je m'adresse à vous.

Sur le fichier joint, quand la ligne:

dercol3 = Cells(b, 2).End(xlToRight).Column

passe lors de la deuxième boucle (ok=4), au lieu de prendre la dernière colonne remplie sa me prend la première colonne remplie et je ne comprends pas pourquoi .

Sinon ne faites pas trop attention au reste du code à partir du commentaire :

'commencer le transport au J+2

Je débute sur VBA soyez cléments

Merci à vous.

12dropship-test.xlsm (24.21 Ko)

Bonjour,

essaie ceci

dercol3 = Cells(b, Columns.Count).End(xlToLeft).Column

Hum...

Cells C2 n'a pas de sens

de même que cells("B,2") non plus

ni Cells(b,2)

A moins que b ne soit une variable : (dans ce cas il faut le préciser !)

Mais ce n'est visiblement pas le cas dans le fichier joint !

La syntaxe de Cells c'est ...

Cells(N° de ligne, N° de colonne) c'est pourtant pas compliqué !

A+

Bonjour,

Sa ne marche toujours pas, et sinon le b est effectivement une variable.

Bonjour,

Difficile d'être indulgent dans ces conditions ! La programmation est un art qui exige une grande rigueur : Les gribouillages ne sont pas de mise !

Pour essayer de positiver, si tu débutes dans VBA, va dans le menu VBA : Outils > Options et assure toi que toutes les options sont cochées.

Concernant ta page de code : rajoute tout en haut (Sur la première ligne) Option Explicit

Ensuite avant d'exécuter une macro va dans débogage et assure toi dans le menu Débogage en cliquant Compiler VBA Project que ton code est correct.

N'utilise aucune variable avec une seule lettre et utilise des noms de variables explicit (évocateur, compréhensible) :

Si le correcteur téméraire qui relie ton code essaie de corriger un peu, une lettre isolée ne peut pas être remplacée dans ton code tandis que des noms de variable de 2 ou 3 caractères sont facilement identifiables et remplaçables si quelque chose est peu compréhensible dans ton code...

DerCol et DerLig sont à la rigueur convenable pour peu qu'il n'y en ai pas un pour chaque ligne et chaque colonne...

DerLig et DerCol s'entendent pour toutes les lignes de ta feuille il n'y a aucune bonne raison pour que DerColA et DerColB soit différents. Idem pour DerLig...

Si c'est le cas c'est que le nom de ta variable est mal choisi. Ou la feuille mal conçue...

Dans l'immédiat ce code est incompréhensible et m'a mis de fort méchante humeur ! Il me faudra bien un bon petit déjeuner un une bonne partie de l'après midi pour essayer de comprendre ce que tu as voulu bricoler.

Dans l'immédiat, là, trop c'est trop !

Je relirai donc cela à tête reposé quand j'aurai quelques heures devant moi pour réécrire le tout de manière intelligible.

A+

Bonjour à toi,

Je sais que mon code est vraiment un gros gribouillage oui, merci de prendre le temps de le comprendre et surtout merci pour tout tes conseils ! Je vais essayer de supprimer toutes les variables qui ne sont pas nécessaires (il y en a énormément ) et de bien le réécrire.

Merci et bonne journée !

Bonjour,

Je donne ici le fruit de ce que j'ai "compris" !

Option Explicit
Sub transport()
Dim vol&, DD&
Dim iR%, iC%, iRV%, iLR%, iLC%, kP%
'Comprenez: & = As Long % = As Integer
'Comprenez: DD = DateDébut
'           iR = RowCourante        iLR = LastRow
'           iC = ColonneCourante    iLC = LAstColonne
'           iRV = RowVol
   kP = 5000
   iR = 20
   iC = 2
   iLR = Range("A19").End(xlDown).Row
   iRV = 3
   While Cells(iRV, 2) <> ""
      'Eventuellement la ligne suivante pourrait être "variabilisée"
            DD = CLng(Sheets("Data").Cells(13, 6)) + 2
      While CLng(Cells(19, iC)) < DD: iC = iC + 1: Wend
      vol = Cells(iRV, 2)
      Do While vol > kP
      While (Weekday(Cells(19, iC), 2) > 5): iC = iC + 1: Wend
         Cells(iR, iC) = kP
         iC = iC + 1
         vol = vol - kP
      Loop
      If vol > 0 Then
         While (Weekday(Cells(19, iC), 2) > 5): iC = iC + 1: Wend
         Cells(iR, iC) = vol
         iC = iC + 1
      End If
      iRV = iRV + 1
      iR = iR + 1
   Wend
End Sub

A+

8dropship-vg.xlsm (25.88 Ko)

Bonjour Galopin01,

Sa fais plaisir de tomber sur un code aussi clean que sa de bon matin !

Je vais essayer de m'inspirer de ton style pour mes futurs développements et je vais aussi "essayer" de variabiliser la DD

Merci énormément, passe une bonne journée.

je vais aussi "essayer" de variabiliser la DD

Ça n'a d'intéret que si certaines DD peuvent être supérieures à la précédente date de fin !

A+

Rechercher des sujets similaires à "probleme detection derniere colonne"