Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1412 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Problème syntaxe VBA

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème syntaxe VBA

n°2301469
or78
Posté le 02-06-2017 à 16:28:25  profilanswer
 

Bonjour à tous, je n'arrive pas à comprendre pourquoi cette ligne ne fonctionne pas:
J'ai changé les variable en variant au lieu de integer, j'ai essayé sans range, avec range et il y a quelque chose que je fais mal , mais je ne trouve pas mon erreur... une bonne âme peut-elle m'aider et m'expliquer ?
 
 
 
Sub correc()
 
Dim valeur As Variant
Dim i As Integer 'ligne
Dim j As Integer 'colonne
Dim valeurmax As Variant
 
 
i = 4
j = 3
 
For j = 3 To 110
  For i = 4 To 23
     
    valeurmax = Workbooks("Temps 1.xlsm" ).Sheets("Tableau" ).Range("D1" ).Value
 
     
     If (Cells(i, j)) > valeurmax Then
       Range(Cells(i, j)).Value = valeurmax              ''' c'est celle-là qui me bloque
       
     End If
  Next i
Next j
 
End Sub


Message édité par or78 le 02-06-2017 à 16:29:17
mood
Publicité
Posté le 02-06-2017 à 16:28:25  profilanswer
 

n°2301485
Marc L
Posté le 03-06-2017 à 00:14:09  profilanswer
 

 
            Bonjour,
 
            le Range est de trop, juste voir la ligne précédente …
 

n°2301486
or78
Posté le 03-06-2017 à 07:06:49  profilanswer
 

Merci Marc, mais j'ai déjà essayé. Je te montre:
 
Si je le mets comme ça  
(Cells(i, j)) = valeurmax, ça ne marche pas
 
(Cells(i, j)).value = valeurmax, non plus
 
       

n°2301493
Marc L
Posté le 03-06-2017 à 09:41:26  profilanswer
 

 
            Pas besoin de parenthèses encadrant l'instruction, l'utiliser juste comme dans l'exemple de l'aide VBA interne !
 
            Autre point :  comme cette variable valeurmax est fixe, l'affecter avant la boucle et contrôler sa cellule source (pas d'erreur) …
 

n°2301496
or78
Posté le 03-06-2017 à 10:19:29  profilanswer
 

Super Marc
 
Cells(i, j).Value = valeurmax
ou bien
Cells(i, j) = valeurmax
 
 
Comme ça ça marche, grâce à toi, mais j'aimerais bien que tu m'expliques pourquoi avec le if, il faut des parenthèses et pas après.
 
De plus, j'avais essayé de réutiliser une syntaxe qui marchait dans un autre de mes codes:
Sheets("SAISIES" ).Range("C" & derniereLigne).Value = OFSuivi
 
Et c'est pour ça que j'avais mis un range que j'avais écrit à peu près comme ça:
range( colonne & derniereLigne).value et ça ne marchait pas non plus.
 
Je ne sais pas quand il faut lui mettre range ou non, ni du coup à quoi sert value, puisque avec ou sans ne dérange pas dans ce cas...
En tout cas, merci pour tes conseils ! :jap:

n°2301508
Marc L
Posté le 03-06-2017 à 14:51:38  profilanswer
 

 
            Tout fonctionne quand c'est bien écrit !
 
            As-tu essayé au moins dans la ligne du If sans les parenthèses supplémentaires ?   Pour moi elles sont là aussi inutiles !
 
            Sans propriété précisée en lecture, souvent VBA choisit la propriété Value mais parfois il choisit la propriété Text
            pouvant donc avoir une conséquence certaine pour une donnée numérique !
 
            Sinon juste en consultant l'aide VBA interne  - tout y est ! -  de Range  &  Cells  :
            pour une seule cellule combiner Range & Cells est une erreur car c'est soit l'un soit l'autre …
 

n°2301519
or78
Posté le 03-06-2017 à 17:35:34  profilanswer
 

Non, dans le if, je n'avais rien changé puisque ça marchait.
En revanche, je ne suis pas sûr de comprendre ta dernière remarque. J'avais pas mal surfé pour essayer de me dépanner et il y a plein de pages avec range et cells combinés
 
https://msdn.microsoft.com/fr-fr/li [...] 96273.aspx  par exemple, donc j'essayais de faire pareil


Message édité par or78 le 03-06-2017 à 17:36:25
n°2301580
patrice337​40
Avec la réponse, c'est facile.
Posté le 04-06-2017 à 20:49:15  profilanswer
 

« En revanche, je ne suis pas sûr de comprendre ta dernière remarque. »
Il faut bien lire la réponse de MarcL, notamment : ... pour une seule cellule ...
 
Edit : Dans l'exemple de Microsoft, au lieu de :
If r.Cells(n, 1) = r.Cells(n + 1, 1) Then
Pour éviter tout problème, il est préférable de préciser :
If r.Cells(n, 1).Value = r.Cells(n + 1, 1).Value Then
ou
If r.Cells(n, 1).Text = r.Cells(n + 1, 1).Text Then


Message édité par patrice33740 le 04-06-2017 à 20:54:47

---------------
Cordialement, Patrice
n°2301586
or78
Posté le 05-06-2017 à 08:02:32  profilanswer
 

OK, merci Patrice :)

n°2301686
Marc L
Posté le 06-06-2017 à 18:10:41  profilanswer
 

 
            Merci Patrice.
 
            En affectation (écriture) il n'y a pas de souci car Value est bien la propriété par défaut d'une cellule.
 
            C'est en lecture où cela peut poser un souci de ne pas spécifier de propriété car, même si souvent
            Value est la propriété choisie à l'exécution, à de rares occasions cela peut être la propriété Text
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Problème syntaxe VBA

 

Sujets relatifs
[résolu]problème comparaison Php/MySqlProblème de paramètres Java en SQLJ (JDBC)
Problème de parsing JSONProblème de code HTML/CSS + Hébergement chez soi
[C] Problème de compilation entre emcc et OpenSSL (Résolu)problème avec dialobox sur condition (JS)
Problème utilisation librairie externe[Résolu] Problème curieux sur bouton Partager
Problème d'encodage de liste chainée[VBA] --> Problème rapide ( erreur de syntaxe )
Plus de sujets relatifs à : Problème syntaxe VBA


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR