Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/08/2011, 11h59   #1
 
Inscription : janvier 2011
Messages : 1
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 1
Points : -1
Points : -1
Par défaut Récupération donnée dans une cellule

Bonjour,

J'ai un probleme avec ma programmation dans VBA
j'ai besoin de récupéré des données des cellules d'excel et de m'en servir pour pouvoir faire ma boucle.


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Sub Acier()
 
' Donnée à récupérée dans excel
    P1.Value = Range("Données!I10") 
    P5.Value = Range("Données!I11")
 
    acier = P1
 
'Donnée à récupéré dans excel    
   N_int.Value = Range("Module4!E8")
   N_ext.Value = Range("Module4!E9")
   E_int.Value = Range("Module4!E10")
   E_ext.Value = Range("Module4!E11")
 
 
  Do While (N_int < N_ext And E_int < E_ext Or P1 = P5)
       acier = acier + 0.0005
       Range("Données!I5").Value = acier
' On range la valeur de la cellule nommé acier dans la case correspondante et on fait une boucle par rapport à celle ci.
  Loop
 
End Sub
Merci par avance et j'espere que c'est compréhensible.

Macarons
macarons est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 26/08/2011, 12h18   #2
Responsable
Office & Excel

 
Avatar de Pierre Fauconnier
 
Homme Pierre Fauconnier
Formateur et développeur informatique indépendant
Inscription : novembre 2003
Messages : 8 198
Détails du profil
Informations personnelles :
Nom : Homme Pierre Fauconnier
Âge : 45
Localisation : Belgique

Informations professionnelles :
Activité : Formateur et développeur informatique indépendant
Secteur : Enseignement

Informations forums :
Inscription : novembre 2003
Messages : 8 198
Points : 14 398
Points : 14 398
Envoyer un message via Skype™ à Pierre Fauconnier
Salut...

Et le problème est?

Je pose la question parce Madame Irma vient de quitter le bureau...

Plus sérieusement:
Sub Acier suivi de acier=... pose forcément un problème à l'exécution, car tu ne peux pas avoir une procédure qui porte le même nom qu'une variable.

Comme l'un porte une majuscule et l'autre pas, cela signifie que tu n'as probablement pas réalisé un copier/coller de ton code => comment être certain que c'est ce code qui pose problème?

De plus, je ne vois pas de déclaration de variables. P-1, P_1, N_Int ... semblent être des objets de type Range, mais en l'absence de déclaration, c'est sans certitude...


Peux-tu donner le vrai code utilisé et dire en quoi il ne fonctionne pas?

Aide-toi et le DVP t'aidera.
__________________
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------

Ma nouvelle vidéo: comparer des listes via une MFC - Mes articles sur DVP
Vous souhaitez rédiger pour DVP? Contactez-moi
Amoureux de la langue française? Venez corriger nos ressources
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
N'oubliez pas de VOTER (en bas à droite d'un message)

---------------
Pierre Fauconnier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/08/2011, 12h18   #3
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
Bonjour
P1, P5, N_int... sont elles des variables ou autres (textes box par exemple)?
Dans ta boucle, tu quand tu changes la variable acier dans I5, tes autres variables sont figées. direct vers une boucle infinie ou sans boucle.
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 11
Vieux 26/08/2011, 12h21   #4
Responsable
Office & Excel

 
Avatar de Pierre Fauconnier
 
Homme Pierre Fauconnier
Formateur et développeur informatique indépendant
Inscription : novembre 2003
Messages : 8 198
Détails du profil
Informations personnelles :
Nom : Homme Pierre Fauconnier
Âge : 45
Localisation : Belgique

Informations professionnelles :
Activité : Formateur et développeur informatique indépendant
Secteur : Enseignement

Informations forums :
Inscription : novembre 2003
Messages : 8 198
Points : 14 398
Points : 14 398
Envoyer un message via Skype™ à Pierre Fauconnier
Salut.

Citation:
Envoyé par mercatog Voir le message
...
Dans ta boucle, tu quand tu changes la variable acier dans I5, tes autres variables sont figées. direct vers une boucle infinie ou sans boucle.
Si une de ces variables est un objet Range pointant vers I5 ou une cellule dépendante de I5, les valeurs changent à chaque boucle...
__________________
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------

Ma nouvelle vidéo: comparer des listes via une MFC - Mes articles sur DVP
Vous souhaitez rédiger pour DVP? Contactez-moi
Amoureux de la langue française? Venez corriger nos ressources
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
N'oubliez pas de VOTER (en bas à droite d'un message)

---------------
Pierre Fauconnier est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 26/08/2011, 12h25   #5
Membre actif
 
Inscription : novembre 2008
Messages : 188
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 188
Points : 194
Points : 194
Bonjour, pour initialiser les variables au début de ton code, il vaut mieux faire comme cela je pense (en supposant que c'est bien la valeur de la cellule que tu veux récupérer).



Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
Sub Acier()
 
' Donnée à récupérée dans excel
    P1 = Range("Données!I10") .Value
    P5 = Range("Données!I11").Value
 
    acier = P1
 
'Donnée à récupéré dans excel    
   N_int.= Range("Module4!E8").Value
   N_ext = Range("Module4!E9").Value
   E_int = Range("Module4!E10").Value
   E_ext = Range("Module4!E11").Value
D'ailleurs il est toujours préférable de déclarer explicitement ses variables et leur type, plutôt que de laisser VB se débrouiller avec:

Code :
1
2
3
4
5
6
7
8
9
 
Option Explicit
 
Sub machin()
 
Dim maVariable As Long 'si c'est un entier
Dim maVariable As Double 'si c'est un flottant (nombre à virgule)
 
'...
Et sinon ta boucle va tourner soit jamais soit indéfiniment vu que tu ne modifie pas les conditions de test au sein de ta boucle.
Sclarckone est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 26/08/2011, 14h12   #6
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
Citation:
Envoyé par Pierre Fauconnier Voir le message
Salut.


Si une de ces variables est un objet Range pointant vers I5 ou une cellule dépendante de I5, les valeurs changent à chaque boucle...

Salut

Je ne vois pas quelque part une initialisation de P1 par exemple comme étant un range avec
Code :
Set P1 = Worksheets(YYY).Range(YYY)
Pour moi P1 dans son code ne peut pas être un Range sans initialisation initiale de la variable P1 avec cette écriture
Code :
P1.Value = Range("Données!I10")
.
Mais avec des Si, tu connais la suite.
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/08/2011, 14h26   #7
Responsable
Office & Excel

 
Avatar de Pierre Fauconnier
 
Homme Pierre Fauconnier
Formateur et développeur informatique indépendant
Inscription : novembre 2003
Messages : 8 198
Détails du profil
Informations personnelles :
Nom : Homme Pierre Fauconnier
Âge : 45
Localisation : Belgique

Informations professionnelles :
Activité : Formateur et développeur informatique indépendant
Secteur : Enseignement

Informations forums :
Inscription : novembre 2003
Messages : 8 198
Points : 14 398
Points : 14 398
Envoyer un message via Skype™ à Pierre Fauconnier
Citation:
Envoyé par mercatog Voir le message
Salut

Je ne vois pas quelque part une initialisation de P1 par exemple comme étant un range avec
Code :
Set P1 = Worksheets(YYY).Range(YYY)
Pour moi P1 dans son code ne peut pas être un Range sans initialisation initiale de la variable P1 avec cette écriture
Code :
P1.Value = Range("Données!I10")
.
Mais avec des Si, tu connais la suite.
Ce peut être une variable globale déclarée ailleurs. Rien ne laisse croire non plus que c'est un textbox et que le code est placé dans le module d'un userform, par exemple (puisque P1 non préfixé)... Donc, tu as raison: Supposer que c'est une cellule est aussi vain que supposer que c'est un textbox.

C'est pourquoi j'ai proposé à Macarons de compléter l'info.

Ma remarque sur la boucle infinie veut juste souligner qu'il ne faut pas se fier au code en dehors du contexte. C'est tout ce qu'il faut en retenir.

Et de toute façon, le problème initial vient de l'ambiguïté de acier qui empêche le code de fonctionner dès le lancement de la macro, à la compilation. Résoudre ce problème (en renommant la variable) permettra à Macarons de pouvoir avancer dans son code, de voir s'il pose toujours problème ou pas, et si oui, où et pourquoi.
__________________
"Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
---------------

Ma nouvelle vidéo: comparer des listes via une MFC - Mes articles sur DVP
Vous souhaitez rédiger pour DVP? Contactez-moi
Amoureux de la langue française? Venez corriger nos ressources
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
N'oubliez pas de VOTER (en bas à droite d'un message)

---------------
Pierre Fauconnier est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h06.


 
 
 
 
Partenaires

Hébergement Web