Si une colonne vide alors ..

Résolu/Fermé
julien - 6 avril 2016 à 11:27
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 7 avril 2016 à 13:02
Bonjour,

Ci joint mon programme qui fonctionne parfaitement,

Après modification du cahier des charges j'aimerais que ce programme s'exécute que si la colonne 21 n'est pas vide ..

J'ai essayé avec des for , des if et rien ne marche je n'arrive pas à ce que je veux ..


Pouvez vous m'aider s'il vous plait ?
A voir également:

3 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 752
6 avril 2016 à 11:53
Bonjour,

Ci joint mon programme qui fonctionne parfaitement
Malheureusement, pas de fichier joint au message.


Pour joindre un fichier sur les forums de ccm il faut:
________________________________________________________
- se rendre sur le site : https://www.cjoint.com/
- cliquer sur parcourir
- rechercher le fichier
- cliquer sur ouvrir
- cliquer sur créer le lien Cjoint
- copier le lien
- revenir ici le coller dans une réponse
________________________________________________________


0
http://www.cjoint.com/c/FDgkF0prswp

Désolé j'ai oublié de mettre le lien ^^ merci de ta réponse ;)
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 752
6 avril 2016 à 12:40
Alors, si j'ai bien compris, tu as une ,Sub principale (appelons là Sub Main()) qui lance ta Sub Message.
Or tu souhaites qu'elle ne se lance que si et seulement si la colonne 21 n'est pas vide.
Si oui, ta Sub Main() devient :

Sub Main()
'code
'du code
'encore du code
With Sheets("Feuil1") 'ADAPTE LE NOM DE LA FEUILLE
    If WorksheetFunction.CountA(.Columns(21)) > 0 Then Call Message
End With
'le reste du code
'encore du code
'encore un peu de code
'fini
End Sub

0
Enfait , je veux qu'elle ne traite que la ligne pour la quelle la colonne 21 n'est pas vide ..

Ton programme c'est ce que je faisais mais ca converti toutes les lignes .. je te fourni un programme complet cette fois : http://www.cjoint.com/c/FDgluPyk6dp

Merci de ton aide ..
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 752 > julien
Modifié par pijaku le 6/04/2016 à 14:04
Teste ceci :

Sub Main()
'code
'du code
'encore du code
Call Message_2
'le reste du code
'encore du code
'encore un peu de code
'fini
End Sub

Sub Message_2()

' Ce programme va chercher, pour chaque FMC, le message de panne qui lui correspond si il existe et l'afficher sur la deuxieme page


Application.ScreenUpdating = False     'Désactivation de l'actualisation de l'écran pour exécution plus rapide
Dim j As Integer                       'Déclaration de la variable j
Dim i As Integer                       'Déclaration de la variable i
Dim DL As Integer

With Sheets("Feuil1")
    DL = derlig_reelle(.Columns(15))   'dernière ligne non vide de la colonne O
    For j = 3 To DL
        For i = 3 To DL
            If .Cells(i, 18).Value = .Cells(j, 15).Value And .Cells(i, 21).Value <> "" Then
                .Cells(j, 16) = .Cells(i, 18).Offset(0, -1).Value
                Exit For
            End If
        Next i
        If .Cells(j, 16).Value = "" Then .Cells(j, 16).Value = "No messages available"
    Next j
End With
Call tri                               ' Appel de la fonction de tri
Application.ScreenUpdating = True      ' Réactivation de l'actualisation de l'écran
End Sub

Private Function derlig_reelle(plage As Range) As Long
   'cas d'absence de données dans la plage à traiter :
   If WorksheetFunction.CountA(plage) = 0 Then derlig_reelle = 1: Exit Function
   'dans tous les autres cas :
   derlig_reelle = plage.Find("*", , , , , xlPrevious).Row
End Function

Sub tri()
' Ce programme a pour but d'effectuer un "tri" afin de ne plus afficher les données inutiles comme les "zéros"
' créés lors de l'application de l'algorithme. Ca permettera de présenter les résultats de manière claire et sans données superflues

Dim i As Integer            'Déclaration de la variable i

i = 3                       'La valeur i prend la valeure 3
Do While i < 382 And ActiveCell.Value <> ""  ' Boucle , tant que i est inférieur a 382 et que la valeur de la cellule active est non nulle
    If Cells(i, 15).Value = 0 Then                 ' Si la cellule active est égale à 0
        Cells(i, 15).EntireRow.Hidden = True        ' Masquage de la ligne
    End If                  ' Fin de la condition
    i = i + 1               ' La variable i prend la valeure i+1
Loop                        ' Boucle
Cells(3, 1).Select          ' Selection de la cellule (3,1)
End Sub


0
Merci de ton aide ,
mais cela ne fonctionne toujours pas :/
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 752 > julien
6 avril 2016 à 14:05
J'ai modifié mon code dans le message précédent...
remplacer
And .Cells(j, 21).Value <> "" Then
par
And .Cells(i, 21).Value <> "" Then
0
Toujours pas .. rien ne se passe dans ton code , la colonne reste blanche ..

Je viens de remarquer que dans la colonne équipement il y 'a un espace donc les instructions ne doivent pas être "" mais " " ;;

Même après correction cela ne marche pas .. :'(
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 752
6 avril 2016 à 16:21
Donc, tu veux que le contrôle se fasse sur la même ligne?

Si c'est ça, essaie :

Sub Main()
'code
'du code
'encore du code
Call Message_2
'le reste du code
'encore du code
'encore un peu de code
'fini
End Sub

Sub Message_2()

' Ce programme va chercher, pour chaque FMC, le message de panne qui lui correspond si il existe et l'afficher sur la deuxieme page


Application.ScreenUpdating = False     'Désactivation de l'actualisation de l'écran pour exécution plus rapide
Dim j As Integer                       'Déclaration de la variable j
Dim i As Integer                       'Déclaration de la variable i
Dim DL As Integer

With Sheets("Feuil1")
    DL = derlig_reelle(.Columns(15))   'dernière ligne non vide de la colonne O
    For j = 3 To DL
        If .Cells(j, 18).Value = .Cells(j, 15).Value And .Cells(j, 19).Value <> "" Then
            .Cells(j, 16) = .Cells(j, 17).Value
        End If
        'If .Cells(j, 16).Value = "" Then .Cells(j, 16).Value = "No messages available"
    Next j
End With
Call tri                               ' Appel de la fonction de tri
Application.ScreenUpdating = True      ' Réactivation de l'actualisation de l'écran
End Sub

Private Function derlig_reelle(plage As Range) As Long
   'cas d'absence de données dans la plage à traiter :
   If WorksheetFunction.CountA(plage) = 0 Then derlig_reelle = 1: Exit Function
   'dans tous les autres cas :
   derlig_reelle = plage.Find("*", , , , , xlPrevious).Row
End Function

Sub tri()
' Ce programme a pour but d'effectuer un "tri" afin de ne plus afficher les données inutiles comme les "zéros"
' créés lors de l'application de l'algorithme. Ca permettera de présenter les résultats de manière claire et sans données superflues

Dim i As Integer            'Déclaration de la variable i

i = 3                       'La valeur i prend la valeure 3
Do While i < 382 And ActiveCell.Value <> ""  ' Boucle , tant que i est inférieur a 382 et que la valeur de la cellule active est non nulle
    If Cells(i, 15).Value = 0 Then                 ' Si la cellule active est égale à 0
        Cells(i, 15).EntireRow.Hidden = True        ' Masquage de la ligne
    End If                  ' Fin de la condition
    i = i + 1               ' La variable i prend la valeure i+1
Loop                        ' Boucle
Cells(3, 1).Select          ' Selection de la cellule (3,1)
End Sub


0
Rien ne se passe , rien ne se copie dans la colonne ...

Je doit partir je reviens demain matin , en espérant que tu n'en ai pas marre ^^

A demain et bonne soirée .. MERCI
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 752 > julien
7 avril 2016 à 07:43
Bonjour,

Je reviens, et on va te faire ça...

Tu dis :
Ce programme à pour but d'afficher le message relatif au code , deux colonne cachées ( Q et R ) contiennent les référence ( Q = message , R = code ) , le programme doit afficher en colonne P le message du code contenu dans la colonne O.

Je comprends :
que tu as, en colonnes Q et R une liste des messages en fonctions de code.

Tu dis :
De la ligne 3 à la dernière ligne , Si la valeur de la cellule de la colonne O et la même que celle de la colonne R et que la cellule de la colonne S n'est pas vide , alors faire un offset de 1 et copier la valeur de la colonne Q dans la colonne P

Je comprends :
> SI O3 = R3 ET S3 Non Vide ALORS => on copie le message.
> SI O4 = R4 ET S4 Non Vide ALORS => on copie le message.
> SI O5 = R5 ET S5 Non Vide ALORS => on copie le message.
> etc...
Mais je suis sur que ce n'est pas ce que tu veux.

Tu dis :
Si la colonne est vide on ne fait pas cette opération ==> la cellule reste donc vide .

Oui, mais là, ta colonne dans le fichier communiqué, est remplie... Donc tu souhaites qu'on efface son contenu quand la condition n'est pas vérifiée???
0
Désolé du retard , j'ai répondu mais apparemment le message s'est perdu ^^

Tu as presque tout compris , à un détail ,

Les code contenus dans la colonne O peuvent se trouver n'importe ou dans la colonne R et le but est de rechercher la ligne de la colonne R qui correspond au code présent dans 03 ( par exemple ) et copier le message associé ..

Si la colonne S est vide , il ne faut rien faire ( donc si on ne fait rien les cases seront vide)

Il ne faut pas effacer puisqu'il y aura d'autre données dedans ^^

...

Je m'emmêle les pinceaux moi-même :(
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 752 > julien
7 avril 2016 à 11:24
Si je comprends bien :

> SI O3 est dans R ET S3 Non Vide ALORS => on copie le message.
> SI O4 est dans R ET S4 Non Vide ALORS => on copie le message.
> SI O5 est dans R ET S5 Non Vide ALORS => on copie le message.
> etc...
0
Exact ,

> SI 03 est dans R ET S3 Non Vide ALORS ==> On copie le message correspondant au code (Offset de -1 par rapport à R )
0