XL 2010 [RESOLU]Problème écriture de valeur dans une feuille Excel

Pozaec

XLDnaute Nouveau
bonjour à tous,

je suis très novice en vba et j'apprends un peut sur le tas avec mes maigres connaissances en programmation.

Je viens d’entamer un stage ou l'on me demande de gérer des stock en fonction de production, pour se faire je développe un programme vba qui "chapeaute" différentes feuilles excel.

j'ai un souci dans mon code que je n'arrive pas a régler, et ayant écumé pas mal de forum je commence à désespéré

je voudrais que mon programme stocke une valeur puis ailles l'écrire dans une feuille prévue a cet effet, le truc tout bête, mais la ligne ne vas pas, aucune idée du pourquoi du comment

voici le code :

Sub remplissage_val_conso()
Dim reference As String
Dim surfacetotale, coefmatiere As Single
Dim nbmatiere, cpt1, ligne, colonne, lig, col As Integer
Dim c As Range

cpt1 = 0
ligne = 2
colonne = 2
'trouve le nombre de matière
nbmatiere = (Sheets("coef matière").Cells(1, Columns.Count).End(xlToLeft).Column) - 3

'trouve la reference et la surface de production, statique pour l'instant mais se modifiera a l'avenir pour pouvoir faire toutes les productions
reference = Sheets("planning informatique").Cells(306, 10)
surfacetotale = Sheets("planning informatique").Cells(306, 15)


'trouve la ligne de la référence dans le fichier coef matière
Set c = Sheets("coef matière").[A:A].Find(reference, LookIn:=xlValues)
lig = c.Row
col = c.Column
col = col + 3


'boucle pour écrire dans la feuille valeur de conso(feuille tampon)
Do While cpt1 < nbmatiere
coefmatiere = Sheets("coef matière").Cells(lig, col)
Sheets("valeur de conso").Cells(ligne, colonne).Value = coefmatiere <= ligne qui bug
cpt1 = cpt1 + 1
ligne = ligne + 1
col = col + 1

Loop


End Sub

Merci d'avance

Bonne journée
 
Dernière modification par un modérateur:

Robert

XLDnaute Barbatruc
Repose en paix
Re : Problème écriture de valeur dans une feuille Excel

Bonjour Pazaec, bonjour le forum,

D'abord la déclaration des variables. Tu peux en déclarer plusieurs sur la même ligne mais il te faut les typer individuellement, sinon elle prennent le type Variant par défaut :

Code:
Dim reference As String
Dim surfacetotale As Single, coefmatiere As Single
Dim nbmatiere As Integer, cpt1 As Integer, ligne As Integer, colonne As Integer, lig  As Integer, col As Integer
Dim c As Range

Ensuite tu fait une recherche et considères comme acquis le fait qu'il trouve au moins une occurrence.
Pour éviter un plantage il est d'usage d'utiliser une conditionnelle

Code:
If Not C is Nothing Then
'...
End If

Puis il y a, à mon avis confusion entre les variables ligne et lig, colonne et col. Vérifie ce que valent les deux variables lig et col après la recherche...

[Édition]
Bonjour Cisco, nos posts se sont croisés...
 

Pozaec

XLDnaute Nouveau
Re : Problème écriture de valeur dans une feuille Excel

Merci de vos réponses !

En final c'était un nom de fichier qui n'allait pas je ne sais pourquoi car je l'ai revérifié maintes et maintes fois(idiotbète que je suis).

Cisco:

Je suis vraiment désolé mais le fichier de base n'étant pas de moi et ne connaissant pas du tout excel, je ne saurais tout modifier de fond en comble pour ne rien dévoiler de mon entreprise, et je ne voudrais vraiment pas prendre le risque mais merci de ton attention !

Robert:
Merci de la précision sur les variables je ne le savais pas, le tuto youtube que j'ai regardé ne le précisait pas ou j'ai loupé ce détail ^^
pour moi il ne peut y avoir de problème car si l'opérateur entre correctement le nom de la référence, il ne peut y avoir de problème mais toute sécurité est bonne a prendre !
je pense mettre un message d'erreur entre les deux if pour notifié qu'ils y a un souci ai-je bon ?
je ne comprends pas bien la condition qui se trouve dedans

sinon j'ai un nouveau souci ^^

j'ai cette ligne de code qui me compte le nombre le colonnes d'une feuille, le -3 étant la pour enlever trois colonnes en début qui ne me servent a rien :

nbmatiere1 = (Sheets("coef matière").Cells(1, Columns.Count).End(xlToLeft).Column) - 3

j'ai essayer de la transposé pour qu'elle me compte le nombre de lignes dans un autre fichier :

nbmatiere2 = (Sheets("consommation").Cells(Row.Count, 1).End(xltoDown).Row) - 1

j'ai du me croire dans le monde des bisounours car elle ne passe pas

Merci encore de vos réponses, bonne soirée

Pozaec
 
Dernière modification par un modérateur:

Robert

XLDnaute Barbatruc
Repose en paix
Re : Problème écriture de valeur dans une feuille Excel

Bonjour le fil, bonjour le forum,

Arf ! Les bisounours n'y sont pour rien !...
xltoDown n'existe pas. C'est xlDown ! Sauf que dans ton cas c'est xlUp qu'il faudrait...
Ton code corrigé :
Code:
Sub remplissage_val_conso()
Dim reference As String
Dim surfacetotale As Single, coefmatiere As Single
Dim nbmatiere1 As Integer, nbmatiere2 As Integer, cpt1 As Integer, ligne As Integer, colonne As Integer, lig  As Integer, col As Integer
Dim c As Range

cpt1 = 0
ligne = 2
colonne = 2
'trouve le nombre de matière
nbmatiere1 = Sheets("coef matière").Cells(1, Application.Columns.Count).End(xlToLeft).Column - 3
nbmatiere2 = Sheets("consommation").Cells(Application.Rows.Count, 1).End(xlUp).Row - 1
'trouve la reference et la surface de production, statique pour l'instant mais se modifiera a l'avenir pour pouvoir faire toutes les productions
reference = Sheets("planning informatique").Cells(306, 10)
surfacetotale = Sheets("planning informatique").Cells(306, 15)
'trouve la ligne de la référence dans le fichier coef matière
Set c = Sheets("coef matière").[A:A].Find(reference, LookIn:=xlValues)
If Not c Is Nothing Then
    lig = c.Row
    col = c.Column
    col = col + 3
    'boucle pour écrire dans la feuille valeur de conso(feuille tampon)
    Do While cpt1 < nbmatiere
        coefmatiere = Sheets("coef matière").Cells(lig, col)
        Sheets("valeur de conso").Cells(ligne, colonne).Value = coefmatiere
        cpt1 = cpt1 + 1
        ligne = ligne + 1
        col = col + 1
    Loop
End If
End Sub
 

CISCO

XLDnaute Barbatruc
Re : Problème écriture de valeur dans une feuille Excel

Bonsoir à tous, bonsoir Robert

Bonjour le fil, bonjour le forum,

Arf ! Les bisounours n'y sont pour rien !...
xltoDown n'existe pas. C'est xlDown ! Sauf que dans ton cas c'est xlUp qu'il faudrait...


Les gars qui définissent le VBA ne font pas toujours dans le très didactique, xlUp, xlDown, xltoLeft, xltoRight...

@ plus

P.S : Je me suis fais "avoir" aussi, donc maintenant, je m'en souviens :)
 
Dernière édition:

Pozaec

XLDnaute Nouveau
Re : Problème écriture de valeur dans une feuille Excel

Bonjour à tous,

Yes ça marche nickel !

Mais je n'ai toujours pas bien assimilé la ligne If Not c Is Nothing Then, je ne comprend pas bien la condition quelle appose

C'est bizarre car pour moi il devrait compter les lignes de haut en bas non ? c'est pour cela que j'avais mis xlDown

Merci beaucoup Robert et Cisco pour vos réponse qui m'ont été d'une grande aide !

bonne journée !
 

CISCO

XLDnaute Barbatruc
Re : Problème écriture de valeur dans une feuille Excel

Bonjour

Si c est vide, c Is Nothing renvoie VRAI et Not c Is Nothing est FAUX, donc la macro ne fait pas les calculs correspondant aux lignes après le Then, jusqu'au End If.
Code:
lig = c.Row
    col = c.Column
    col = col + 3
    'boucle pour écrire dans la feuille valeur de conso(feuille tampon)
    Do While cpt1 < nbmatiere
        coefmatiere = Sheets("coef matière").Cells(lig, col)
        Sheets("valeur de conso").Cells(ligne, colonne).Value = coefmatiere
        cpt1 = cpt1 + 1
        ligne = ligne + 1
        col = col + 1
    Loop


Si il y a quelque chose dans c, c Is Nothing renvoie FAUX et Not c Is Nothing est VRAI et les calculs correspondant aux lignes précitées sont effectués.

En fait, il faut lire Not c Is Nothing comme signifiant Not (c Is Nothing).

@ plus
 

CISCO

XLDnaute Barbatruc
Re : Problème écriture de valeur dans une feuille Excel

Rebonjour

Bonjour à tous,

C'est bizarre car pour moi il devrait compter les lignes de haut en bas non ? c'est pour cela que j'avais mis xlDown

bonne journée !

On peut obtenir le n° de la dernière ligne de plusieurs façons, en partant du haut et en utilisant xlDown, ou du bas avec xlUp. A voir en fonction de la présence ou non de cellule vide, d'une ou plusieurs plages utilisées les unes en dessous des autres...


@ plus
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Problème écriture de valeur dans une feuille Excel

Bonjour le fil, bonjour le forum,

C'est bizarre car pour moi il devrait compter les lignes de haut en bas non ? c'est pour cela que j'avais mis xlDown

Pour compléter les explications de Cisco, comme dans ton code tu partais de la dernière ligne (Application.Rows.Count) , ça ne pouvait être que xlUp, sinon il te fallait partir de la première ligne de ton tableau et là, tu pouvais utiliser xlDown...


 

Discussions similaires

Statistiques des forums

Discussions
312 104
Messages
2 085 332
Membres
102 863
dernier inscrit
Selemani