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
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
A voir également:
- Si une colonne vide alors ..
- Déplacer une colonne excel - Guide
- Formule somme excel colonne - Guide
- Comment supprimer une page vide sur word - Guide
- Trier colonne excel - Guide
- Colonne word - Guide
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
6 avril 2016 à 11:53
Bonjour,
Ci joint mon programme qui fonctionne parfaitement
Malheureusement, pas de fichier joint au message.
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
________________________________________________________
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
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 :
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
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
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
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
6 avril 2016 à 14:05
J'ai modifié mon code dans le message précédent...
remplacer
remplacer
And .Cells(j, 21).Value <> "" Thenpar
And .Cells(i, 21).Value <> "" Then
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
6 avril 2016 à 16:21
Donc, tu veux que le contrôle se fasse sur la même ligne?
Si c'est ça, essaie :
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
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
7 avril 2016 à 07:43
Bonjour,
Je reviens, et on va te faire ça...
Tu dis :
Je comprends :
que tu as, en colonnes Q et R une liste des messages en fonctions de code.
Tu dis :
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 :
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???
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???
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 :(
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 :(
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
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...
> 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...
6 avril 2016 à 12:32
Désolé j'ai oublié de mettre le lien ^^ merci de ta réponse ;)