Mélange Range, cells et if else

Résolu
scribetout - 2 févr. 2013 à 13:42
 scribetout - 19 févr. 2013 à 11:07
Bonjour,

For Each cel In pl.Offset(0, 2).SpecialCells(xlCellTypeVisible)         
    Set dest IIf(o.Range("A7").Value "", o.Range("A7"), o.Cells(Application.Rows.Count, 1).End(xlUp).Offset(1, 0)) 'définit la cellule de destination
    'dest.Value = cel.Value 'récupère dans dest la valeur de la cellule cel (code initial)
    dest.Value = cel.Offset(1, 0) & Chr(10) & "PK" & cel.Offset(0, 3) & Chr(10) & cel.Offset(0, 7)
      
    Next cel 


Débutant en VBA, avec le code ci-dessus je parviens à récupérer des données d'une base de données vers d'autres feuilles dont le nom est issu des valeurs d'une colonne de la feuille"BD".
Je voudrai effectuer cette récupération avec condition:
-vérifier si la cellule cel.offset(0, 3) est vide alors on récupère dans dest.value =cel.offset(1,0) & Chr(10) & cel.offset(0,7)
ç-à-d sans la concatenation de "PK" & cel.offset(0,3)

- si elle n'est pas vide récupérer comme sur la dernière ligne de code (avec "PK")

je n'ai pas vraiment le code du set dest et encore moins le mèlange des Range et Cells.

Je vous remercie.

38 réponses

ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
4 févr. 2013 à 14:49
Tu as probablement fait une erreur de copier/coller !
Il est normal que cette ligne déclarative :
Private encours As Range, quoi

ne soit pas suivie d'un End Sub ! C'est une déclaration et non une procédure !
Elle doit se trouver en toute première ligne, avant toute procédure.
Montre donc l'intégralité du code que tu as mis dans le module de la feuille BD !


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
code sur feuille BD:
Private encours As Range, quoi

Private Sub ComboBox1_Click()
  If ComboBox1.ListIndex >= 0 Then
    encours.Value = ComboBox1.List(ComboBox1.ListIndex)
  End If
  ComboBox1.Visible = False
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  If Target.Column = 2 Then
    If ComboBox1.ListIndex < 0 And Not encours Is Nothing Then
      encours.Value = quoi
    End If
    derlig = Worksheets("entreprises").Range("A" & Rows.Count).End(xlUp).Row
    With ComboBox1
       .ListFillRange = "entreprises!A1:A" & derlig
       .Top = Target.Top
       .Left = Target.Left
       .Height = Target.Height
       .Width = Target.Width
       .ListIndex = -1
       .Visible = True
    End With
    Set encours = Target
  Else
    Set encours = Nothing
  End If
End Sub


je pense que tu viens de me répondre avant de lire mon dernier message (on était peut-être entrain de rédiger en même temps).

tout est rentré dans l'ordre, je devais simple cliquer sur la colonne B pour que l'activeX se mette en place.
0
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
4 févr. 2013 à 17:42
Bon .
Tu dis plus haut que tu souhaites ne commencer qu'à la ligne 8 de ta feuille BD ===>> simple ===>>
tu transformes
If Target.Column = 2  Then

en
If Target.Column =  2 And Target.Row > 7 Then

et voilà !
Exerce-toi un peu bet reviens, quand tu seras fin prêt et ne verras rien d'autre , pour la 3ème étape.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
Bonsoir,

j'ai essayé de trouver la solution en vain. Je n'aurai jamais pensé qu'il fallait ajouter un "And" condition. c'est super, je suis content. Allons-y pour la 3ème étape.


Merci.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
4 févr. 2013 à 21:48
Bon.
Non (trop fatigué ce soir. La 3ème étape sera pour demain).
Mais nous allons en attendant régler tes petits soucis exprimés pour la feuille entreprises, dont tu vas "écraser" le code par le suivant :
Private Sub Worksheet_Activate()
  bridons
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
  Set encours = ActiveSheet
  If Target.Count > 1 Then Exit Sub
  If Target.Column <> 1 Or Target.Value = "" Then Exit Sub
  On Error Resume Next
  xx = Worksheets(Target.Value).Name
  If Err <> 0 Then
    With Worksheets.Add
      .Name = Target.Value
    End With
    encours.Activate
    On Error GoTo 0
  Else
     MsgBox "cette entreprise a déjà été créée !"
     Target.Value = ""
   End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
   bridons
   On Error Resume Next
   If Target.Column <> 1 Or Target.Count > 1 Then Exit Sub
   If Target.Value <> "" Then
     MsgBox "non modifiale"
   End If
End Sub
Private Sub bridons()
  If Columns(2).EntireColumn.Hidden = False Then
   Range(Cells(1, 2), Cells(Rows.Count, Columns.Count)).EntireColumn.Hidden = True
  End If
End Sub

Et regarde si cela te va, maintenant.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
Merci, c'est plus judicieux de ne laisser qu'une seule colonne.

je te souhaite une bonne nuit.
0
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
5 févr. 2013 à 17:02
Bon. On va passer à la 3ème étape, mais j'ai besoin d'explication sur ceci :
- je filtre dans la BD sur chaque entreprise, et concatène avec condition:
*si en colonne H cellule vide, concaténer D et L sur la feuille de l'entreprise concernée en colonne A (à partir de A7)
*si en colonne H cellule nonvide, concaténer D,H et L sur la feuille de l'entreprise concernée en colonne A (à partir de A7)

on voit bien ce que tu veux mettre en colonne A de chaque entreprise, mais on ne sait pas ce que tu y mets dans les autres colonnes. Si rien d'autre : confirme-le de sorte à ce que je ne travaille pas deux fois.

J'attends.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
Bonsoir, je m'excuse pour mon retard. Je suis resté plombé au lit (une grippe carabinée).

Ma BD va de la colonne A à la colonne L:
en col A: ID - col B: nom entreprise - col C: corps - col D:région
pour les autres colonnes concernent diverses codes.

sur les feuilles entreprises on récupère toutes les données, sauf celles qui ont été utilisées dans la concaténation en colonne A.
0
excuse, j'ai fait un effort pour mettre sur mon micro et j'ai oublié de te remercier.

bonne soirée.
0
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
6 févr. 2013 à 19:41
Hop-là===>> soyons très précis ===>> si j'ai bien compris ===>>
sur chaque feuille entreprise :
en colonne A :
- si dans BD : H est vide ===>> D et L de la BD, séparés par un retour charriot
- si dans BD : H n'est pas vide ===>> D, H et L de la BD, séparés par un retour charriot
en colonne B : la B de la BD
en colonne C : la C de la BD
continue en remplissant les pointillés, s'il te plait ===>>
en colonne D la ... de la BD
en colonne E la ... de la BD
en colonne F la ... de la BD
en colonne G la ... de la BD
en colonne H la ... de la BD
en colonne I la ... de la BD
en colonne J la ... de la BD
en colonne K la ... de la BD
en colonne L la ... de la BD

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
7 févr. 2013 à 08:32
Pour ta grippe, par ailleurs ===>> mon conseil ===>>
Mange (et mange bien) même si tu es sans appétit.
Et bois beaucoup, également.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
Bonsoir,

je viens de passer une très mauvaise semaine et je ne suis encore remis.
voici pour les précisions que tu m'as demandé:

sur chaque feuille entreprise :
en colonne A :
- si dans BD : H est vide ===>> D et L de la BD, séparés par un retour charriot
- si dans BD : H n'est pas vide ===>> D, H et L de la BD, séparés par un retour charriot
en colonne B : la B de la BD
en colonne C : la C de la BD
en colonne D :la E de la BD
en colonne E :la F de la BD
en colonne F :la G de la BD
en colonne G :la I de la BD
en colonne H :la J de la BD
en colonne I :la K de la BD

Etant donné que les données des colonnes D,H et L sont concaténées en colonne A de chaque feuille entreprise,elles se seront pas transférées.

Je te remercie beaucoup pour ton aide, tes conseils et pour le temps que tu me consacres.
0
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
10 févr. 2013 à 07:49
Je t'écrirai donc cela en fin de matinée. Tu verras : comme je te l'ai dit plus haut, cette étape-là sera la plus simple des trois.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
Bonsoir,

je te remercie pour ta patience et pour toute aide. J'essaierai plus tard ton code car je ne me suis pas encore remis de cette satanée grippe.
je suis persuadé que ton code est bon et t'en remercie beaucoup.
Toute ma gratitude.

Bonne soirée!
0
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
12 févr. 2013 à 18:24
fais quand même savoir si tout va bien, quand tu le pourras, de sorte à permettre de libérer cette discussion.
Bon rétablissement


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
Mon cher Ucfoutu,

je te remercie beaucoup, je te confirme que ton code fonctionne très bien. Je n'ai effectué qu'un petit ajustement de référence (ceci est de ma faute)à cette ligne et aux suivantes:
enA = taborig(i, 4) & Chr(10) & taborig(i, 7) & Chr(10) & taborig(i, 11)

J'ai juste remplacé le 8 par 7 et le 12 par 11.

En effet, malade je n'étais pas vraiment concentré sur mon fichier, je t'ai donc communiqué des références erronées.

Je t'en suis reconnaissant pour ton aide et ton efficacité. Toute ma gratitude.

Malgré une somnolence persistante, je me porte beaucoup mieux pour info.
0
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
17 févr. 2013 à 21:30
Bien.
Et si nous en tirions maintenant une conclusion ?
Je vais le faire, tant pour toi que pour tous ceux qui passeront par là :
L'essentiel , dans cette affaire, n'était pas le code demandé (celui de la toute dernière étape), mais la mise en oeuvre d'une stratégie (les deux premières étapes) pour éviter que l'utilisateur ne puisse saisir n'importe quoi, même involontairement (faute de frappe au clavier, par exemple).
Cette stratégie ne résulte pas de la connaissance de vba, mais d'un travail de réflexion raisonné.
Le code n'est ensuite qu'accessoire et récitation.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
Bonjour, je vais beaucoup mieux.

En effet, une stratégie bien réfléchie du fichier dans sa globalité est très importante. Mais je constante qu'un minimum de connaissance en programmation (maîtrise du langage VBA ou autre) est indispensable. Je travaille bien sur excel par contre je ne maitrise pas du tout le VBA. Par exemple, pour ton dernier code, je m'attendais à un "IF THEN ELSE", pour la concaténation avec condition alors que tu as utilisé la fonction "replace", ça m'a dérouté.
Je te remercie, avec toi j'ai découvert beaucoup de chose.
0