Débutant VBA à besoin d'aide !! :)

julou

XLDnaute Nouveau
bonjour à tous !! j'ai commencé des études à l'université et j'ai le droit à des supers cours d'informatique.

dès mon premier quadrimestre, on m'initie au codage VBA (les grosses bases)
je dois donc maintenant faire un gros travail qui me demande d'utilisé access et excel

Dans mon fichier excel, on me demande de faire quelques macros VBA et je bloque sur une macro en particulier :

j'ai créé un bouton permettant de lancer la macro mais j'aimerai que celle-ci commence à la première cellule vide de la colonne A. je vous met un screenshot de ma feuille pour que vous visualisiez la chose

Microsoft Excel - info.xlsm.jpg



voici mon code:


Sub bonlivraison()

Dim i As Integer

For i = A1 To Range("A65536").End(xlUp).Row

If ActiveCell.Value = "" Then


' Encode le n° de matricule du bon
Matricule_livraison = InputBox("Entrez le numéro de matricule du bon")
ActiveCell.FormulaR1C1 = Matricule_livraison
ActiveCell.Offset(0, 1).Select

' Encode le lieu de livraison du produit

Lieu_livraison = InputBox("Entrez le lieu de livraison du bon [port]")
ActiveCell.FormulaR1C1 = Lieu_livraison
ActiveCell.Offset(0, 1).Select
' Encode la date d'arrivée du produit
Dim Date_D_arrivée As Date
Date_D_arrivée = InputBox("Entrez la date d'arrivé du produit selon le format jj/mm/aaaa")
ActiveCell.FormulaR1C1 = Date_D_arrivée

'code pour que la date de la colonne D (date d'arrivée du produit) impact sur la colonne E (reçu ou non-reçu)
Dim dateprog As Date
dateprog = DateValue(Now)

For ligne = 2 To 27
colonne = "D"
colonne2 = "E"
If Range(colonne & ligne).Value > dateprog Then Range(colonne2 & ligne).Value = "Non-Reçu"
If Range(colonne & ligne).Value < dateprog Then Range(colonne2 & ligne).Value = "Reçu"

Next ligne

ActiveCell.Offset(1, -4).Select

Else
Selection.Offset(1, 0).Select
Next i

End Sub




malheuresement j'ai un message d'erreur me disant "next sans for".. je pense qu'il y a un problème avec mon for imbriqué mais je ne trouve pas la solution...
 
Dernière édition:

JCGL

XLDnaute Barbatruc
Re : Débutant VBA à besoin d'aide !! :)

Bonjour à tous,

Bienvenue sur XLD

Merci de prendre la bonne habitude de joindre un fichier anonymisé et d'utiliser les balises pour déposer les codes (aller en mode avancé et balise Code)

A+ à tous
 

sourcier08

XLDnaute Occasionnel
Re : Débutant VBA à besoin d'aide !! :)

Bonsoir à tous.

Ce qui me dérange, c'est le :
Code:
For i = A1 To Range("A65536").End(xlUp).Row

Ce serait plus juste :
Code:
For i = 1 to Range("A65536").End(xlUp).Row 'attention aux limites sur EXCEL 2010

Suivi de :
Code:
If range("A" & i) = "" then

Au lieu de :
Code:
If ActiveCell.value = "" then

Pour le reste, il va falloir réfléchir un peu plus. Tu oublies de déclarer des variables et tu sembles vouloir mettre des caractères dans l'instruction ActiveCell.FormulaR1C1. Là, je ne te suis pas.

Comme le rappelle si bien JCGL, un fichier aiderait davantage.

Au mieux que je puisse te proposer, avec ce que tu nous fournis ici, c'est :
Code:
Sub bonlivraison()

Dim i As Integer
Dim Matricule_livraison As String, Lieu_livraison As String
Dim Date_D_arrivée As Date, dateprog As Date

For i = 2 To Range("A65536").End(xlUp).Row 'attention aux limites sur EXCEL 2010

    If Range("A" & i) = "" Then

        ' Encode le n° de matricule du bon
        Matricule_livraison = InputBox("Entrez le numéro de matricule du bon")
        Cells(i, 2) = Matricule_livraison

        ' Encode le lieu de livraison du produit

        Lieu_livraison = InputBox("Entrez le lieu de livraison du bon [port]")
        Cells(i, 3) = Lieu_livraison

        ' Encode la date d'arrivée du produit
        Date_D_arrivée = InputBox("Entrez la date d'arrivé du produit selon le format jj/mm/aaaa")
        Cells(i, 4) = Date_D_arrivée

        'code pour que la date de la colonne D (date d'arrivée du produit) impact sur la colonne E (reçu ou non-reçu)
        dateprog = DateValue(Now)
        
        If Cells(i, 4) > dateprog Then Cells(i, 5) = "Non-Reçu"
        If Cells(i, 4) < dateprog Then Cells(i, 5) = "Reçu"
        
    End If 
Next i

End Sub

Ou alors, il s'agit bien de mettre une ligne en plus en bas de ton tableau, auquel cas, ce serait plutôt un code proche de :
Code:
Sub bonlivraison()

Dim i As Integer
Dim Matricule_livraison As String, Lieu_livraison As String
Dim Date_D_arrivée As Date, dateprog As Date

i = Range("A65536").End(xlUp).Row +1 'attention aux limites sur EXCEL 2010

' Encode le n° de matricule du bon
Matricule_livraison = InputBox("Entrez le numéro de matricule du bon")
Cells(i, 2) = Matricule_livraison

' Encode le lieu de livraison du produit
Lieu_livraison = InputBox("Entrez le lieu de livraison du bon [port]")
Cells(i, 3) = Lieu_livraison

' Encode la date d'arrivée du produit
Date_D_arrivée = InputBox("Entrez la date d'arrivé du produit selon le format jj/mm/aaaa")
Cells(i, 4) = Date_D_arrivée

'code pour que la date de la colonne D (date d'arrivée du produit) impact sur la colonne E (reçu ou non-reçu)
dateprog = DateValue(Now)
       
If Cells(i, 4) > dateprog Then Cells(i, 5) = "Non-Reçu"
If Cells(i, 4) < dateprog Then Cells(i, 5) = "Reçu"
       
End Sub

Un fichier et des explications plus claires nous permettraient de fournir une meilleure aide.
 
Dernière édition:

JCGL

XLDnaute Barbatruc
Re : Débutant VBA à besoin d'aide !! :)

Bonjour à tous,
Salut les amis,

Peux-tu essayer avec :

VB:
Option Explicit

Sub BL()
    Dim i&, Lig&
    For i = Range("A65536").End(xlUp).Row To 2 Step -1
        Cells(i, 1).Select
        If ActiveCell = "" Then
            ActiveCell = InputBox("Entrez le numéro du bon", "Choix", "0000000")
            ActiveCell.Offset(0, 1) = InputBox("Entrez le lieu de livraison", "Choix", "1019")
            ActiveCell.Offset(0, 2) = Format(InputBox("Entrez la date de réception du produit selon le format jj/mm/aaaa", "Choix", Date), "ddd dd/mm/yyyy")
        End If
    Next i

    For Lig = Range("A65536").End(xlUp).Row To 2 Step -1
        If Range("C" & Lig) > 0 Then Range("D" & Lig) = "Réceptionné"
        If Range("C" & Lig) = "" Then Range("D" & Lig) = "En Attente"
    Next Lig
End Sub
A+ à tous
 

Pièces jointes

  • JC Suivi BL.xlsm
    28.5 KB · Affichages: 65

julou

XLDnaute Nouveau
Re : Débutant VBA à besoin d'aide !! :)

Microsoft Excel - info.xlsm_3.jpgJCGL, ton code ne marche pas :( mais un grand merci d'avoir pris le temps de m'aider, je sais que mon erreur est de n'avoir pas mis assez d'information à votre disposition.

Sourcier08, ton code marche super bien ! ton code est vraiment super !! :)

il me reste 2 petites questions :

1) dans le code de JCGL, j'ai l'impression d'avoir vu un masque de saisie, est-il donc possible de le rajouter au code de sourcier08?
2) est-il possible de demander à ma macro/mon code de rajouter automatiquement un numéro dès l'ajout d'une nouvelle ligne ?? d'avoir donc un numéro 27 (voir image ci-dessus)
 

sourcier08

XLDnaute Occasionnel
Re : Débutant VBA à besoin d'aide !! :)

Voici ma proposition. J'ai ajouté le cas de figure où le tableau est vierge.

Code VBA:
Sub bonlivraison()

Dim i As Integer
Dim dateprog As Date

i = Range("A65536").End(xlUp).Row + 1 'attention aux limites sur EXCEL 2010

If Cells(2, 1) = "" Then

Cells(2, 1) = "1"
Cells(2, 2) = InputBox("Entrez le numéro du bon", "Choix", "0000000")
Cells(2, 3) = InputBox("Entrez le lieu de livraison", "Choix", "1019")
Cells(2, 4) = CDate(InputBox("Entrez la date de réception du produit selon le format jj/mm/aaaa", "Choix", Date))
dateprog = DateValue(Now)
If Cells(2, 4) > dateprog Then Cells(2, 5) = "Non-Reçu"
If Cells(2, 4) < dateprog Then Cells(2, 5) = "Reçu"

Else

Cells(i, 1) = Cells(i - 1, 1) + 1

' Encode le n° de matricule du bon
Cells(i, 2) = InputBox("Entrez le numéro du bon", "Choix", "0000000")

' Encode le lieu de livraison du produit
Cells(i, 3) = InputBox("Entrez le lieu de livraison", "Choix", "1019")

' Encode la date d'arrivée du produit
Cells(i, 4) = CDate(InputBox("Entrez la date de réception du produit selon le format jj/mm/aaaa", "Choix", Date))

'code pour que la date de la colonne D (date d'arrivée du produit) impact sur la colonne E (reçu ou non-reçu)
dateprog = DateValue(Now)

If Cells(i, 4) > dateprog Then Cells(i, 5) = "Non-Reçu"
If Cells(i, 4) < dateprog Then Cells(i, 5) = "Reçu"

End If

End Sub





JCGL, avec ta fonction format, lorsque j'entrais "10/01/2014", par exemple, la date sortait en "01/01/2014. Je ne sais pas pourquoi.
J'ai repris ton idée mais modifiée en CDate.

@++
 
Dernière modification par un modérateur:

julou

XLDnaute Nouveau
Re : Débutant VBA à besoin d'aide !! :)

J'ai encore besoin de votre aide pour un truc : j'essai de faire un petit code mettant en couleur toutes les cellules contenant "Non-Reçu" en bref, voice mon code et mon fichier :Microsoft Visual Basic pour Applications - infoVBA.xlsm [arrêt] - [Feuil3 (Code)].jpg



donc j'essai de mettre une couleur de fond d'une cellule si elle contient "Non-Reçu"

merci d'avance pour le temps que vous me consacrez !!

amicalement,

jules
 
Dernière modification par un modérateur:

Discussions similaires

Statistiques des forums

Discussions
312 095
Messages
2 085 249
Membres
102 835
dernier inscrit
Alexandrax971