IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Renvoie de n° de ligne de la colonne trouvée


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 22
    Points : 14
    Points
    14
    Par défaut Renvoie de n° de ligne de la colonne trouvée
    Bonjour,

    je suis débutante en VBA Excel , j'ai un petit problème dans mon code , je veux chercher une valeur de ma combobox
    "c = ComboBox1.Value "
    dans la colonne A de la feuille 1
    " Set l = Range("A:A").Find(c, lookat:=xlWhole) "
    , et renvoyer le numéro de la ligne "r = ActiveCell.Row" ,
    aprés copier une valeur d'une cellule de la même ligne et la coller dans la derniere ligne non vide de la feuille 3
    "Sheets("Feuil3").Range("A65521").End(xlUp)(2).Offset(1, 0).Value = Sheets("Feuil1").Cells(r, 23).Value " .
    mais ça marche pas , il fait une copie de la cellule Cells(1,23) non Cells(r, 23).
    SVP aidez moi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
          Dim c As Integer
          Dim r As Integer
          Dim l As Range
         With Worksheets("Feuil1")
              c = ComboBox1.Value
           Set l = Range("A:A").Find(c, lookat:=xlWhole)
           r = ActiveCell.Row
           Sheets("Feuil3").Range("A65521").End(xlUp)(2).Offset(1, 0).Value = Sheets("Feuil1").Cells(r, 23).Value
     
        End With

  2. #2
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Bonsoir,

    sans connaitre le contexte, essayes et adaptes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Dim c As Integer
    Dim l As Range
    With Worksheets("Feuil1")
      c = ComboBox1.Value
      Set l = .Range("A:A").Find(c)
    End With
    If Not l Is Nothing Then
      With Sheets("Feuil3")
        .Range("A" & .Rows.Count).End(xlUp)(2, 1) = l.Offset(0, 23)
      End With
    Else
      MsgBox "pas de valeur trouvée"
    End If
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 22
    Points : 14
    Points
    14
    Par défaut
    Merci casefayere pour votre réponse rapide .
    j'ai essayé avec votre solution , mais la valeur ne s'ajoute pas dans la feuille3 .

  4. #4
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    As-tu le message "pas de valeur trouvée" ? ou bien
    vérifies les adresses de copie et de destination avec des mgsbox car j'ai fait en fonction de ce que tu indiques
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Dim c As Integer
    Dim l As Range
    With Worksheets("Feuil1")
      c = ComboBox1.Value
      Set l = .Range("A:A").Find(c)
      If Not l Is Nothing Then MsgBox l.Address: Exit Sub
    End With
    If Not l Is Nothing Then
      With Sheets("Feuil3")
        MsgBox .Range("A" & .Rows.Count).End(xlUp)(2, 1).Address
        .Range("A" & .Rows.Count).End(xlUp)(2, 1) = l.Offset(0, 23)
      End With
    Else
      MsgBox "pas de valeur trouvée"
    End If
    tu enlèveras les MsgBox après résolution
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  5. #5
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 22
    Points : 14
    Points
    14
    Par défaut
    j ai essayé avec une valeur non existante est ça marche bien le msg s'affiche .
    dans le cas d'une valeur existante, le code s'exécute sans problème mais quand je vérifie dans la feuille 3 je trouve pas la valeur.

  6. #6
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    et cette adresse à vérifier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ...
    MsgBox l.Offset(0, 23).Address
    ...
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  7. #7
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 22
    Points : 14
    Points
    14
    Par défaut
    je pense que le premier code est le plus proche de ma solution , puiske le 2eme me renvoie le msgbox et sans résultat aussi, il me reste seulement l'affichage de la valeur.
    merci beaucoup pour votre aide

  8. #8
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Mais ça ne donne pas le résultat donc il faut bien analyser et comprendre ce que je t'ai envoyé et si tu ne comprends pas, envoies un fichier bidon en Xls ou en compressé (ZIP)
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  9. #9
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 22
    Points : 14
    Points
    14
    Par défaut
    Bonjour,

    Voila un petit exemple de ce que je veux faire , je veux que la date dans la feuille 1 du numéro de dossier selectionné dans le combobox s'ajoute dans la fin de la feuille3

    Classeur1.rar

    Cordialement

  10. #10
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Bonjour le forum, Souline

    je me suis permis de modifier quelque peu ton fichier, j'espère que celui-ci te conviendra si j'ai compris
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  11. #11
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 22
    Points : 14
    Points
    14
    Par défaut
    Pour l'exemple ça marche très bien, dans mon application j'ai changé tous les commandes suivant votre fichier, mais ça marche pas je sais pas où le problème, j'ai donc pensé de changer la bouton imprimer seulement, mais il me génère une erreur 1004 " méthode select de la classe range a échoué "

    voila ci dessus le code de la bouton imprimer , merci beaucoup pour votre aide
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
     
    Private Sub CommandButton3_Click()
    'imprimer
    Dim L As Range
    Dim ligne As Long
    Dim Ctrl As Control
    Dim CelVide As Range
    With Sheets("Feuil3")
      .Cells.ClearContents
      For Each Ctrl In Me.Controls
        If TypeOf Ctrl Is MSForms.CheckBox Then
          If Ctrl = True Then
            .Cells(1.1).Offset(2, 0).Value = " N° de dossier : " + ComboBox1.Value
            ligne = Range("A1").End(xlDown).Row + 1
            .Cells(ligne, 1).Value = "         Prière de rectifier les éléments suivants :"
     
     
        Sheets("Feuil3").Range("A4").Select
        Selection.Font.Bold = True
        Selection.Font.Size = 12
        Selection.Font.Size = 14
            With Selection
            .HorizontalAlignment = xlGeneral
            .VerticalAlignment = xlTop
            .WrapText = False
            .Orientation = 0
            .AddIndent = False
            .IndentLevel = 0
            .ShrinkToFit = False
            .ReadingOrder = xlContext
            .MergeCells = False
        End With
        With Selection
            .HorizontalAlignment = xlCenter
            .VerticalAlignment = xlTop
            .WrapText = False
            .Orientation = 0
            .AddIndent = False
            .IndentLevel = 0
            .ShrinkToFit = False
            .ReadingOrder = xlContext
            .MergeCells = False
        End With
        With Worksheets("feuil3").Range("A3")
            With .Characters(Start:=1, Length:=4).Font
                .Name = "Calibri"
                .FontStyle = "Normal"
                .Size = 16
                .Color = -16776961
            End With
        End With
     
               Set CelVide = .Range("A" & .Rows.Count).End(xlUp)(2, 1)
            CelVide = " *   " + Ctrl.Caption
          End If
        End If
      Next Ctrl
    End With
     
    'troisieme feuille "NA" qui contient d'autre données 
                     Worksheets("NA").Activate
                Range("D2:A" & Range("A65000").End(xlUp).Row).Select
                Selection.Copy
                Worksheets("Feuil3").Activate
                Range("A65000").End(xlUp).Offset(1).Select
                ActiveSheet.Paste
     
     
     
            Sheets("feuil3").Range("A3").Select
        With Selection.Font
            .Name = "Calibri"
            .Size = 20
            .Strikethrough = False
            .Superscript = False
            .Subscript = False
            .OutlineFont = False
            .Shadow = False
            .Underline = xlUnderlineStyleNone
            .ThemeColor = xlThemeColorLight1
            .TintAndShade = 0
            .ThemeFont = xlThemeFontMinor
        End With
         With Selection
            .HorizontalAlignment = xlCenter
            .VerticalAlignment = xlBottom
            .WrapText = False
            .Orientation = 0
            .AddIndent = False
            .IndentLevel = 0
            .ShrinkToFit = False
            .ReadingOrder = xlContext
            .MergeCells = False
        End With
        Selection.Font.Bold = True
        Selection.Font.Underline = xlUnderlineStyleSingle
        'BRODURE
             Sheets("Feuil3").Range("A4:A40").Select
        Selection.Borders(xlDiagonalDown).LineStyle = xlNone
        Selection.Borders(xlDiagonalUp).LineStyle = xlNone
        With Selection.Borders(xlEdgeLeft)
            .LineStyle = xlContinuous
            .ColorIndex = 0
            .TintAndShade = 0
            .Weight = xlThin
        End With
        With Selection.Borders(xlEdgeTop)
            .LineStyle = xlContinuous
            .ColorIndex = 0
            .TintAndShade = 0
            .Weight = xlThin
        End With
        With Selection.Borders(xlEdgeBottom)
            .LineStyle = xlContinuous
            .ColorIndex = 0
            .TintAndShade = 0
            .Weight = xlThin
        End With
        With Selection.Borders(xlEdgeRight)
            .LineStyle = xlContinuous
            .ColorIndex = 0
            .TintAndShade = 0
            .Weight = xlThin
        End With
            With Selection.Font
            .Name = "Calibri"
            .Size = 14
            .Strikethrough = False
            .Superscript = False
            .Subscript = False
            .OutlineFont = False
            .Shadow = False
            .Underline = xlUnderlineStyleNone
            .ThemeColor = xlThemeColorLight1
            .TintAndShade = 0
            .ThemeFont = xlThemeFontMinor
        End With
        Selection.Borders(xlInsideVertical).LineStyle = xlNone
        Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
     
    'cadrage de A1
       With Worksheets("Feuil3")
           Range("A1").Select
        Selection.Borders(xlDiagonalDown).LineStyle = xlNone
        Selection.Borders(xlDiagonalUp).LineStyle = xlNone
        With Selection.Borders(xlEdgeLeft)
            .LineStyle = xlContinuous
            .ColorIndex = 0
            .TintAndShade = 0
            .Weight = xlMedium
        End With
        With Selection.Borders(xlEdgeTop)
            .LineStyle = xlContinuous
            .ColorIndex = 0
            .TintAndShade = 0
            .Weight = xlMedium
        End With
        With Selection.Borders(xlEdgeBottom)
            .LineStyle = xlContinuous
            .ColorIndex = 0
            .TintAndShade = 0
            .Weight = xlMedium
        End With
        With Selection.Borders(xlEdgeRight)
            .LineStyle = xlContinuous
            .ColorIndex = 0
            .TintAndShade = 0
            .Weight = xlMedium
        End With
        Selection.Borders(xlInsideVertical).LineStyle = xlNone
        Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
       End With
     
          Dim c As Integer
     
          With Worksheets("Feuil1")
      c = ComboBox1
      Set L = .Range("A:A").Find(c)
    End With
    With Sheets("Feuil3")
      .Range("A" & .Rows.Count).End(xlUp)(2, 1) = L.Offset(0, 23)
    End With
          Sheets("feuil3").PrintOut
    End Sub

  12. #12
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Bonjour souline,

    Tu renvoies un code qui n'a plus rien à voir avec le problème d'origine, je pense que tu t'empêtres avec des "Select" ou "Activate" qui ne servent à rien. Maintenant, à part nettoyer ton code de toutes ces instructions inutiles, je ne peux pas faire grand-chose sans connaitre la structure de ton fichier. Il a déjà fallu que je nettoie sérieusement ton fichier exemple.
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  13. #13
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Bonjour Dominique, Souline

    Le code de Dominique est fonctionnel, rien à dire +1

    Une autre variante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    Option Explicit
     
    Private Sub UserForm_Initialize()
     
    With Worksheets("Feuil1")
        Me.ComboBox1.List = .Range("A2").Resize(.Range("A" & .Rows.Count).End(xlUp).Row - 1).Value
    End With
    End Sub
     
    Private Sub ComboBox1_Change()
    Dim Ligne As Long
    Dim i As Byte
     
    If Me.ComboBox1.ListIndex = -1 Then
        For i = 1 To 3
            Me.Controls("Checkbox" & i) = False
        Next i
    Else
        Ligne = Me.ComboBox1.ListIndex + 2
        For i = 1 To 3
            Me.Controls("Checkbox" & i) = Worksheets("Feuil1").Cells(Ligne, i + 1) = "*"
        Next i
    End If
    End Sub
     
    Private Sub CommandButton1_Click()
    Dim NewLig As Long                                    'NewLig = N° de ligne de la dernière cellule non vide de la colonne +1
    Dim i As Byte
     
    If MsgBox("Confirmez-vous l’insertion de ce nouveau dossier ?", vbYesNo, "Demande de confirmation d’ajout") = vbYes Then
        With Worksheets("Feuil1")
            NewLig = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
     
            If Me.ComboBox1 = "" Then
                MsgBox "Entrer le code de dossier s'il vous plait "
                Exit Sub
            Else
                If Me.ComboBox1.ListIndex = -1 Then
                    .Cells(NewLig, 1).Value = Me.ComboBox1
                    For i = 1 To 3
                        .Cells(NewLig, i + 1).Value = IIf(Me.Controls("CheckBox" & i), "*", "")
                    Next i
                    .Cells(NewLig, "E").Value = "Ajouté le " & Format(Now, "DD/MM/YY HH:MM:SS")
                    Me.ComboBox1.AddItem .Cells(NewLig, 1).Value
                Else
                    MsgBox "Dossier déja existant"
                End If
            End If
        End With
    End If
    End Sub
     
    Private Sub CommandButton2_Click()
    Dim Tb(1 To 4, 1 To 1) As String
    Dim i As Byte, j As Byte
    Dim Code As String
    Dim Lig As Long
    Dim c As Range
     
    If Me.ComboBox1.ListIndex > -1 Then
        Code = Me.ComboBox1
        With Worksheets("Feuil1")
            Set c = .Range("A:A").Find(Code, LookIn:=xlValues, lookat:=xlWhole)
            If Not c Is Nothing Then
                Lig = c.Row
                Set c = Nothing
            End If
     
            If Lig > 0 Then
                Tb(1, 1) = "N° de dossier : " & Code
     
                For i = 1 To 3
                    If .Cells(Lig, i + 1) = "*" Then
                        j = j + 1
                        Tb(j + 1, 1) = " * " & .Cells(1, i + 1)
                    End If
                Next i
     
            End If
        End With
     
        With Worksheets("Feuil3")
            .UsedRange.ClearContents
            .Range("A3").Resize(4) = Tb
        End With
    Else
        MsgBox "Veuillez choisir un code dossier existant"
    End If
    End Sub

    Edit!
    Ah! déjà a locomotive est ailleurs. Je n'ai pas vu les 2 derniers posts
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  14. #14
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Re mercatog,

    Excuses-moi mais je n'ai pas analysé ta proposition pensant que si souline ne s'en sort pas, c'est qu'elle ne comprends pas la démarche, maintenant le problème a l'air d'être autre.

    Je lui proposerais bien d'expliquer pas à pas mon code afin qu'elle puisse l'adapter à ses nouvelles prérogatives mais je la laisse étudier ta nouvelle proposition.
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  15. #15
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 22
    Points : 14
    Points
    14
    Par défaut
    Bonjour,

    Merci à vous deux pour l'aide, je suis débutante en VBA Excel c'est pour ça que je n'arrive ni à bien appliquer vos propositions dans mon application ni d'identifier la source du problème.
    En tous cas, merci une autre fois.

    Cordialement

  16. #16
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    En attendant, je te renvoie les codes de l'usf, correspondant au premier fichier avec explications,

    Essaies de les adapter à ton problème, si tu n'y arrive pas, renvoies un fichier bidon mais avec les mêmes structures que ton fichier original (nbre de colonnes, nbre de feuilles, nom des feuilles) et si possible consacrer un endroit où tu expliques ce que tu veux exactement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    'les variables ci-dessous sont déclarées en début de module pour être reconnues_
    'dans procédure de celui-ci
    Dim tbl 'variable tableau
    Dim CelVide As Range 'variable objet (Range) représentant la 1ère cellule vide
    Dim i As Integer, Ctrl As Control 'Ctrl pour les boucles dans les contrôles
    'ci-dessous, une procédure subsidiaire faite pour montrer le résultat
    Private Sub CommandButton3_Click()
    Sheets("Feuil1").Activate
    End Sub
    'ci-dessous, une autre procédure subsidiaire faite pour montrer le résultat
    Private Sub CommandButton4_Click()
    Sheets("Feuil3").Activate
    End Sub
     
    Private Sub CommandButton5_Click()
    Unload Me 'fermeture de l'USF
    End Sub
     
    Private Sub UserForm_Initialize()
    remplir_combo 'au chargement de l'USF va vers la procédure "remplir_combo"
    End Sub
     
    Private Sub ComboBox1_Change()
    Dim ligne As Range
    'ci-dessous, on remet tous les checkbox à false
    For Each Ctrl In Me.Controls
      If TypeOf Ctrl Is MSForms.CheckBox Then Ctrl = False
    Next Ctrl
    'ci-dessous on remplit les controles
    With Sheets("Feuil1") 'donc, inutile les "Select" ou "Activate"
      'ci-dessous "CelVide" représente la variable objet correspondant à la 1ère cellule vide en A
      Set CelVide = .Range("A" & .Rows.Count).End(xlUp)(2, 1) 'avec With, toujours un "." devant "Range" et "Rows"
      Set ligne = .Range("A1", CelVide).Find(ComboBox1) 'ligne est la variable Range où se situe la cellule recherchée
      If ligne Is Nothing Then Exit Sub 'par précaution, evitons les erreurs
      'ci-dessous, on teste les CheckBox
      For i = 1 To 3
        If ligne(1, i + 1) = "*" Then Me.Controls("Checkbox" & i) = True
      Next i
    End With
    End Sub
    'ci-dessous, pour l'ajout de données
    'non expliqué car tu l'as fait en bonne partie
    Private Sub CommandButton1_Click()
     
    If MsgBox("Confirmez-vous l’insertion de ce nouveau dossier ?", vbYesNo, "Demande de confirmation d’ajout") = vbNo Then Exit Sub
     
    With Sheets("Feuil1")
      If ComboBox1 <> "" Then
        If WorksheetFunction.CountIf(.Range("A2", CelVide(0)), ComboBox1) > 0 Then
          MsgBox "le dossier existe déjà"
          ComboBox1 = ""
          Exit Sub
        Else
          Set CelVide = .Range("A" & .Rows.Count).End(xlUp)(2, 1)
          CelVide = ComboBox1
          For i = 1 To 3
            If Me.Controls("CheckBox" & i) = True Then CelVide(1, i + 1) = "*"
          Next i
          CelVide(1, 5) = "Ajouté le " & Format(Now, "DD/MM/YY HH:MM:SS")
        End If
      Else
        MsgBox (" Entrer le code de dossier s'il vous plait ")
        Exit Sub
      End If
    End With
    'et on actualise ci-dessous le combobox
    remplir_combo
    End Sub
    'ci-dessous transfère données en feuille 3
    Private Sub CommandButton2_Click()
    Dim L As Range
    With Sheets("Feuil3")
      .Cells.ClearContents 'ça, c'est toi qui décides
      For Each Ctrl In Me.Controls
        If TypeOf Ctrl Is MSForms.CheckBox Then
          If Ctrl = True Then
            .Cells(1, 1).Offset(2, 0).Value = " N° de dossier : " + ComboBox1.Value
            'ci-dessus, tu pourrais écrire => .Range("A3)= " N° de dossier : " + ComboBox1.Value
            Set CelVide = .Range("A" & .Rows.Count).End(xlUp)(2, 1) 'pour la cellule suivante en boucle
            CelVide = " *   " + Ctrl.Caption
          End If
        End If
      Next Ctrl
    End With
    With Worksheets("Feuil1")
      c = ComboBox1
      Set L = .Range("A:A").Find(c)
    End With
    With Sheets("Feuil3")
      .Range("A" & .Rows.Count).End(xlUp)(2, 1) = L.Offset(0, 4) 'donc = cellule recherchée décalée de 5 colonnes (col 1=>0,col 2=>1, col 3 =>2, etc.)
    End With
     
     
    End Sub
    Private Sub remplir_combo()
    With Sheets("Feuil1")
      Set CelVide = .Range("A" & .Rows.Count).End(xlUp)(2, 1)
      tbl = .Range("A2", CelVide) 'on remplit le tableau des données en A
    End With
    ComboBox1.List = tbl 'et on rend les valeurs au combobox
     
    End Sub
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  17. #17
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 22
    Points : 14
    Points
    14
    Par défaut
    1. j'ai dans l'historique des dossiers de 1 à 30, quand je remplace le code correspondant à la liste déroulante de combobox par la fonction remplir_combo , je rencontre un problème c'est lorsque je saisi un n° de dossier déjà existant par ex 2 il me sélectionne 20 (0 sélectionné en bleu) j'arrive pas à supprimer le zéro.

    2. voila un fichier ci-dessous avant toute modification, qui contient les mêmes informations et le même code que mon application, alors lorsque je clique sur imprimer je veux que la date de la dernière modification ou ajout s'ajoute automatiquement à la fin du document feuille 3

    3. pour ma liste déroulante de combobox ça marche bien, sauf quand je veux ajouter un nouveau dossier par ex 10 il me saisi automatiquement les infos de 1 , j’ai essayé de changer le MatchEntry (Catégorie > Comportement) en n°2 , dans ce cas le saisie automatique s’arrête , mais lorsque je tape un numéro de dossier déjà existant pour le modifier , ses données ne s’affichent pas , et je risque de perdre les données déjà enregistrés de ce dossier, lorsque je modifie quelque chose.

    J’espère que vous m'avez compris.


    bidon.rar

    merci beaucoup.

    Cordialement.

  18. #18
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    ton dernier fichier n'ayant pas la même structure, ton USF non plus, il va me falloir ou trouver un peu de temps pour décortiquer tout ça.

    quand tu dis
    ... je suis débutante en VBA Excel...
    je pense donc que ce n'est pas toi qui a élaboré ce fichier, du moins les codes de l'USF, surtout quand je vois ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    ...
    Private Declare Function GetWindowLongA Lib "User32" _
        (ByVal hWnd As Long, ByVal nIndex As Long) As Long
     
    Private Declare Function SetWindowLongA Lib "User32" _
        (ByVal hWnd As Long, ByVal nIndex As Long, _
        ByVal dwNewLong As Long) As Long
     
    Private Declare Function FindWindowA Lib "User32" _
        (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
     
    ...
    sinon tu aurais adapter plus facilement
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  19. #19
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    Option Explicit
     
    Private Sub UserForm_Initialize()
     
    With Worksheets("Feuil1")
        Me.ComboBox1.List = .Range("A2").Resize(.Range("A" & .Rows.Count).End(xlUp).Row - 1).Value
    End With
    Me.MultiPage1.Value = 0
    End Sub
     
    Private Sub ComboBox1_Change()
    Dim Ligne As Long
    Dim i As Byte
     
    If Me.ComboBox1.ListIndex = -1 Then
        INITIALISER
    Else
        Ligne = Me.ComboBox1.ListIndex + 2
        For i = 1 To 21
            Me.Controls("Checkbox" & i) = Worksheets("Feuil1").Cells(Ligne, i + 1) = "*"
        Next i
    End If
    End Sub
     
    'Ajouter
    Private Sub CommandButton1_Click()
    Dim NewLig As Long                                    'NewLig = N° de ligne de la dernière cellule non vide de la colonne +1
    Dim i As Byte
     
    If MsgBox("Confirmez-vous l’insertion de ce nouveau dossier ?", vbYesNo, "Demande de confirmation d’ajout") = vbYes Then
        With Worksheets("Feuil1")
            NewLig = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
     
            If Me.ComboBox1 = "" Then
                MsgBox "Entrer le code de dossier s'il vous plait "
                Exit Sub
            Else
                If Me.ComboBox1.ListIndex = -1 Then
                    .Cells(NewLig, 1).Value = Me.ComboBox1
                    For i = 1 To 21
                        .Cells(NewLig, i + 1).Value = IIf(Me.Controls("CheckBox" & i), "*", "")
                    Next i
                    .Cells(NewLig, "W").Value = "Ajouté le " & Format(Now, "DD/MM/YY HH:MM:SS")
                    Me.ComboBox1.AddItem .Cells(NewLig, 1).Value
                Else
                    MsgBox "Dossier déja existant"
                End If
            End If
        End With
    End If
    End Sub
     
    'Modifier
    Private Sub CommandButton2_Click()
    Dim Code As String
    Dim Lig As Long
    Dim c As Range
    Dim i As Byte
     
    If Me.ComboBox1.ListIndex > -1 Then
        Code = Me.ComboBox1
        With Worksheets("Feuil1")
            Set c = .Range("A:A").Find(Code, LookIn:=xlValues, lookat:=xlWhole)
            If Not c Is Nothing Then
                Lig = c.Row
                Set c = Nothing
                For i = 1 To 21
                    .Cells(Lig, i + 1) = IIf(Me.Controls("CheckBox" & i), "*", "")
                Next i
                .Cells(Lig, "W").Value = "Modifié le " & Format(Now, "DD/MM/YY HH:MM:SS")
            End If
        End With
    Else
        MsgBox "Veuillez choisir un code dossier existant"
    End If
    End Sub
     
    'Imprimer
    Private Sub CommandButton3_Click()
    Dim Tb(1 To 24, 1 To 1) As String
    Dim i As Byte, j As Byte
    Dim Code As String
    Dim Lig As Long
    Dim c As Range
     
    If Me.ComboBox1.ListIndex > -1 Then
        Code = Me.ComboBox1
        With Worksheets("Feuil1")
            Set c = .Range("A:A").Find(Code, LookIn:=xlValues, lookat:=xlWhole)
            If Not c Is Nothing Then
                Lig = c.Row
                Set c = Nothing
            End If
     
            If Lig > 0 Then
                Tb(1, 1) = "N° de dossier : " & Code
                Tb(2, 1) = "         Prière de rectifier les éléments suivants :"
     
                For i = 1 To 21
                    If .Cells(Lig, i + 1) = "*" Then
                        j = j + 1
                        Tb(j + 2, 1) = " * " & .Cells(1, i + 1)
                    End If
                Next i
                Tb(j + 3, 1) = .Cells(Lig, 23)
            End If
        End With
     
        With Worksheets("Feuil3")
            .Activate
            .UsedRange.ClearContents
            .Range("A3").Resize(24) = Tb
        End With
        Unload Me
    Else
        MsgBox "Veuillez choisir un code dossier existant"
    End If
    End Sub
     
    'Quitter
    Private Sub CommandButton4_Click()
     
    Unload Me
    End Sub
     
    'Ouvrir second onglet
    Private Sub CommandButton10_Click()
     
    Me.MultiPage1.Value = 1
    End Sub
     
    'Retour premier onglet
    Private Sub CommandButton11_Click()
     
    Me.MultiPage1.Value = 0
    End Sub
     
    'Initialiser
    Private Sub CommandButton13_Click()
     
    Me.ComboBox1.ListIndex = -1
    End Sub
     
    'Déselectionner Chechboxs
    Private Sub CommandButton15_Click()
     
    INITIALISER
    End Sub
     
    Private Sub INITIALISER()
    Dim i As Byte
     
    For i = 1 To 21
        Me.Controls("Checkbox" & i) = False
    Next i
    End Sub
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  20. #20
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Oh lala ! tu as été bien plus vite que moi mercatog, bravo !

    je laisse souline tester, on verra bien et j'espère que ça ira, moins de boulot pour moi
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 2
    Dernier message: 25/01/2011, 12h04
  2. [FN]En lignes ou en colonnes ?
    Par m-mas dans le forum Schéma
    Réponses: 6
    Dernier message: 27/04/2006, 10h36
  3. Excel VBA - Dernière ligne d'une colonne
    Par sat478 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 14/12/2005, 17h33
  4. Réponses: 3
    Dernier message: 26/09/2005, 22h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo