Problème avec les cellules vides !

Résolu
GUGUSSE2 Messages postés 76 Statut Membre -  
GUGUSSE2 Messages postés 76 Statut Membre -
Bonjour,

Les cellules "C6" et "C8" contiennent soit "rien" (cellules effacées), soit un nombre venant d'une copie;
Je galère pour écrire une macro du genre :

sub GRAPH()

si "C6" vide alors
"D8"=1
'ce "D8"=1 est juste pour voir le fonctionnement !
sinon
si "C8" non vide alors
"D8"=2
'idem ci-dessus
fin
fin
"D8"=3
'idem ci-dessus
end sub

Je n'arrive pas à trouver une écriture qui colle avec le "si cellule "X" vide" et qui fonctionne !

Merci d m'aider,
cordialement,
GUGUSSE.

10 réponses

  1. ccm81 Messages postés 11033 Statut Membre 2 434
     
    re

    Const nomF = "Feuil1"
    
    Public Sub essai()
    With Sheets(nomF)
      If .[C6] = "" Then
        .[D8] = 1
      Else
        .[D8] = 2
      End If
    End With
    End Sub

    bonne suite
    0
  2. GUGUSSE2 Messages postés 76 Statut Membre 7
     
    Bonjour,

    Encore moi!
    J'ai tout plein d'interrrogations :

    - je ne comprend pas l'utilité de "with sheet(nomF)" puisqu'il n'y a qu'une feuille sur laquelle opèrera la macro et sur laquelle sont situées les cellules à tester.
    - il y avait trois cas avec trois actions différentes. Peut-être que je me suis mal exprimé ou que mon énonce comportait une erreur. Le voici formulé d'une autre façon :

    SI "C6" vide, alors "D8"=1
    sinon
    si "C8" vide, alors "D8"=4
    sinon
    "D7"=2 'j'ai changé "D8" en "D7" pour visualiser car en fait il y aura trois appels de macros (les "1", "2" & "4")
    "D8"=4 'comme tu peux le voir, "D8"=4 est exécuté depuis deux endroits différents, c'est peut-être là que j'ai fait une erreur dans l'énoncé du problème !
    Fin

    J'espère ne pas abuser de ta bonne volonté, mais ce n'est pas facile d'apprendre, uniquement avec "F1" !

    Cordialement,
    GUGUSSE.
    0
  3. ccm81 Messages postés 11033 Statut Membre 2 434
     
    Q1. l'utilité de "with sheet(nomF)" puisqu'il n'y a qu'une feuille sur laquelle opèrera la macro
    Si le code est placé dans le module de la feuille à manipuler, tu n'as effectivement pas besoin du "with sheets(nomF), les références aux cellules se feront alors sans le point par exemple [D6].value = 5 ou simplement [D6]=5
    Par contre, si le code est dans un module général (Module 1 par exemple) ou dans le module d'une autre feuille, il est indispensable d'indiquer dans quelle feuille on va opérer, tu as alors le choix entre
    sheets(nomF).[D6] ou sheets(nomF).Range("D6") ou sheets(nomF).cells(6,4)
    sheets(1).[D6] ou ...
    activesheet.[D6] ou ...
    comme il va y avoir pas mal d'accès à la feuille de travail, on précise une fois pour toutes la feuille avec with sheets(nomF), les références aux cellules sont alors précédées d'un point .[D6]
    ne pas oublier le end with à la fin du traitement
    RQ. le fait de mettre le nom de la feuille dans une constante (Const nomF = "Feuil1"), permet en cas de changement du nom de la feuille de n'intervenir qu'une fois, en début de code

    Q2. SI "C6" vide, alors "D8"=1
    sinon
    si "C8" vide, alors "D8"=4
    sinon
    "D7"=2 '
    pas très clair
    est ce qu'on doit lire
    Si C6=""   
    alors   
      D8=1   
    sinon   
      si C8=""   
      alors   
        D8=4   
      sinon   
        D7=2   
      fin (du 2° si)   
    fin (du 1° si

    s'écrira
    if [C6] = "" then   
      [D8] = 1   
    else   
      if [C8]="" then   
        [D8]=4   
      else   
        [D7]=2   
      end if   
    end if

    RQ. il faut soigner la mise en page du code en "indentant" (décalant) les blocs de code selon leur "niveau"
    bonne suite
    0
  4. GUGUSSE2 Messages postés 76 Statut Membre 7
     
    Bonjour,

    J'apprécie ta patience.
    Le langage écrit joue bien des tours si on ne le connais pas parfaitement !
    (je me suis encore mal exprimé, il manque une "écriture" à la fin).
    Essayons une autre méthode :

    https://www.cjoint.com/?BIhk3U5rV3C

    Est-ce limpide ?
    Cordialement,
    GUGUSE.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. GUGUSSE2 Messages postés 76 Statut Membre 7
     
    Salut,

    Il manquait une liaison (voir pièce jointe).
    Y a-t-il un moyen plus élégant que d'appeler deux fois
    la même macro (symbolisée dans l'exemple par D8=3) ?

    https://www.cjoint.com/?BIhlPzMapXT

    Sinon, ça marche !
    A+,
    GUGUSSE.
    0
  7. ccm81 Messages postés 11033 Statut Membre 2 434
     
    Si tu veux que dans le cas ou C6<>"" et C8<>"", Macro3 soit exécutée APRES Macro2, il n'y a rien à faire

    sinon (mais ce n'est plus le même organigramme)

    si C6=""  
    alors   
      Macro1  
    sinon  
      Macro3  
      si C8 <> ""  
      alors  
        Macro2  
      fin  
    fin

    bon courage
    0
  8. GUGUSSE2 Messages postés 76 Statut Membre 7
     
    Bonjour,
    J'ai pas tout compris, mais cela ne fait rien, j'appellerai deux fois ma macro !

    Pour en revenir à mon problème précédent (amélioration d'un graphique), comme j'avance peu à peu, je me suis dit qu'un graphe qui ne prendrait que les plages renseignées serait un plus (ta solution N° 4).
    Seulement, voilà, j'ai des problèmes pour donner le nom : rien ne correspond à ce que tu écrit.

    https://www.cjoint.com/?BIhn2EF00Uv

    Et comment donner ces noms au plages du graphique ?
    Je travaille avec Excel 2007 et peut-être ne pourras-tu pas me donner la démarche.

    Encore merci de ta patience.
    Cordialement,
    GUGUSSE.
    0
  9. ccm81 Messages postés 11033 Statut Membre 2 434
     
    1. quand je dis : Si tu veux que dans le cas ou C6<>"" et C8<>"", Macro3 soit exécutée APRES Macro2, il n'y a rien à faire , c'est pour dire que ce que tu as écrit est la seule solution
    2. pour les poulies, quelques explications supplémentaires pour définir les plages de données du graphique
    https://www.cjoint.com/?3IhquZlpxPC

    bonne suite
    0
  10. GUGUSSE2 Messages postés 76 Statut Membre 7
     
    Bonjour,
    Merci pour tout, tout fonctionne, mais le fichier commence à être un sapin de noël vu les appels aux différentes pages !

    J'ai quand même galéré un max pour définir mes plages dynamiquement et créer le graphe qui va avec : cela tenait plus des compétences de Mac GYVER que d'un pro du VBA ! (changement de nom de ton fichier, copie des codes des plages et valeurs dans word, modification (il ne voulait qu'un nom de feuille et pas de classeur !)de ces codes (plus facile que dans Excel !) et réintroduction des codes= OUF !

    Tu comprendra que parfois je ne fais pas exprès de ne pas comprendre.

    En ce qui concerne mon algorithme, j'ai trouvé la solution :

    si C6 vide
    alors D8 = "copie 1"
    sinon
    si C8 non vide
    alors D7 = "transfert 2"
    fin
    D8 = "copie 3"
    fin

    A+,
    cordialement,
    GUGUSSE
    0