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

Delphi Discussion :

[Excel] Nombre de caractères dans une plage


Sujet :

Delphi

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Février 2007
    Messages : 15
    Par défaut [Excel] Nombre de caractères dans une plage
    bonsoir,
    voilà je débute en delphi et je crée ma première application.
    donc j'ouvre un classeur excel et récupère à l aide d 'une boite de dialogue " ouvrir" un fichier csv.
    par contre apres il me faut vérifier le contenu des cellules dans les colonnes E,F,G pour que les données inscrite dans chaque cellules ne comportent pas plus de 31 caractéres .
    ma question est :
    comment parcourir la plage ['E2','G100'] et avec la fonction Length verifier le nombre de caractère à l intérieur de cette plage et si il y a plus dans une cellule alors un showmessage me disant qu il y une cellule quia plus de 31 caractères et en mettant la cellule en couleur .
    merci d'avance

  2. #2
    Membre émérite Avatar de PadawanDuDelphi
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2006
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2006
    Messages : 678
    Par défaut
    Salut et bienvenue sur developpez,

    Tu trouveras tout ce que tu souhaite, et même plus, dans la FAQ:
    http://delphi.developpez.com/faq/?page=exceldelphi

    A+.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Février 2007
    Messages : 15
    Par défaut
    merci pour ton lien.
    je l'ai deja consulter, seulement comme je débute j ai duy mal à tout compiler.
    si tu pouvais m aider en me donnant un début cela serait sympa.
    merci d avance

  4. #4
    Membre émérite Avatar de PadawanDuDelphi
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2006
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2006
    Messages : 678
    Par défaut
    Qu'est-ce que tu as fait déjà?
    L'ouverture de ton fichier et la lecture dans une cellule c'est ok ?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Février 2007
    Messages : 15
    Par défaut
    j arrive a ouvrir mon fichier csv via excel et faire autofit des colonnes E,F,G il me reste a parcourir la plage E2,G100 et voir si une ou des cellules comportent plus de 31 caracteres

  6. #6
    Membre émérite Avatar de PadawanDuDelphi
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2006
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2006
    Messages : 678
    Par défaut
    Voici un bout de code pour lire une plage de cellule, tirée de la FAQ:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    MaPlage : ExcelRange;
    ...
    rMaPlage:=ExcelApplication1.mafeuille.Range['E2','G100'];
     
    Ensuite pour parcourir la plage il faut utiliser la propriété ExcelRange.Areas.
     
    for compteur:=1 to rMaPlage.Count do      showmessage(rMaPlage.Item[compteur].Address[true,true,xlR1C1,false,false]);
    Pas tester...

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Février 2007
    Messages : 15
    Par défaut
    ok merci, je vais tester pour voir !!!
    je te tiens au courant et si tu trouves autre chose n hesite pas je suis preneur

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Février 2007
    Messages : 15
    Par défaut
    bon j'essai ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure TForm1.Button4Click(Sender: TObject);
    var
       MaPlage : ExcelRange;
    begin
       MaPlage:=OleApplication.oleworksheet.Range['E2','G100'];
       OleApplication.Range['E1','G100'].columns.Autofit;
       for compteur:=1 to MaPlage.count do
       showmessage(Maplage.item[compteur].adress[true.true.xlR1C1,false,false]);
     
    end;
    mais cela ne fonctionne pas car si je comprend bien il y a une erreur de syntaxe.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Février 2007
    Messages : 15
    Par défaut
    voilà comment sa se passe en vba excel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Dim cell As Range
    Const limit As Integer = 31
    For Each cell In Range("E2:G100") 'parcourir cette plage
    If Len(cell) > limit Then
    MsgBox "la cellule comporte : " & Len(cell.Text) & "  caractères  " 'permet de connaitre le nombre de caractère dans la cellule
    cell.Interior.ColorIndex = 27 'met la cellule en couleur jaune
    End If
    Next
    si cela peu t aider a comprendre

  10. #10
    Membre émérite Avatar de PadawanDuDelphi
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2006
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2006
    Messages : 678
    Par défaut
    Quelle est l'erreur que tu as, sur quelle ligne ?

    J'ai pas Excel ici pour faire des tests désolé, mais essaye de récupérer les codes de la FAQ et de les appliqués à ton cas...

    A+.

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Février 2007
    Messages : 15
    Par défaut
    bon aprés plusieurs recherche et tentative j'en suis là.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    procedure TForm1.Button4Click(Sender: TObject);
    var
       aValue, aRange  :ansiString;
       vCells          :variant;
    begin
       OleApplication.Range['E1','G100'].columns.Autofit;
        aRange:=OleApplication.Range['E2:G100'].select;
        vCells:=OleApplication.Range[aRange];
        if length(vCells)>31 then
        aValue:=vCells.value;
        showmessage(aValue)
    end;
    ou est mon erreur ?????????

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Février 2007
    Messages : 15
    Par défaut
    sinon j ai ça mais probleme ole
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    procedure TForm1.Button4Click(Sender: TObject);
    var
       aRange  :ansiString;
       vCells  :variant;
    begin
       OleApplication.Range['E1','G100'].columns.Autofit;
        aRange:=OleApplication.Range['E2:G100'].Areas.count;
        vCells:=OleApplication.Range[aRange];
        if length(vCells.text)>31 then
        showmessage(vCells.text);
        vCells.interior.indexcolor:=27;
    end;
    AU SECOURS

  13. #13
    Membre éclairé Avatar de MelkInarian
    Profil pro
    Inscrit en
    Février 2007
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 260
    Par défaut
    Je ne voudrais pas t'induire en erreur, mais j'ai l'impression que ton code comporte une erreur. aRange est définie en tant que chîne Ansi.
    aRange :ansiString;
    et ensuite utilisée en tant qu'entier.
    aRange:=OleApplication.Range['E2:G100'].Areas.count;
    Voici l'aide d'Excel pour Areas:
    Collection des zones ou de blocs contigus de cellules à l'intérieur d'une sélection. Il n'existe pas d'objet Area simple, les membres respectifs de la collection Areas étant des objets Range. La collection Areas contient un objet Range pour chaque plage de cellules contiguës discrètes à l'intérieur de la sélection. Si la sélection contient une seule zone, la collection Areas contient un seul objet Range correspondant à cette sélection.
    Utilisation de la collection Areas
    Utilisez la propriété Areas pour renvoyer la collection Areas. L'exemple suivant montre comment annuler la sélection en cours si elle contient plusieurs zones.

    If Selection.Areas.Count <> 1 Then Selection.Clear
    Pour renvoyer un seul objet Range à partir d'une collection, utilisez Areas(index), où index correspond au numéro d'index de la zone. Les numéros d'index correspondent à l'ordre dans lequel les zones ont été sélectionnées. L'exemple suivant montre comment annuler la première zone dans la sélection en cours dans le cas où la sélection contient plusieurs zones.
    If Selection.Areas.Count <> 1 Then
    Selection.Areas(1).Clear
    End If
    Certaines opérations ne peuvent pas être effectuées simultanément sur plusieurs zones d'une sélection. Vous devez donc parcourir les zones respectives de la sélection de manière séquentielle et effectuer les opérations sur chacune de manière séparée. L'exemple suivant montre comment effectuer l'opération intitulée « myOperation » dans la plage sélectionnée si la sélection ne contient qu'une seule zone. Si la sélection contient plusieurs zones, « myOperation » est appliquée à chaque zone de la sélection.
    Set rangeToUse = Selection
    If rangeToUse.Areas.Count = 1 Then
    myOperation rangeToUse
    Else
    For Each singleArea in rangeToUse.Areas
    myOperation singleArea
    Next
    End If
    Donc si j'ai raison:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vCells:=OleApplication.Range[aRange];
    vCells contiendra un entier et je ne suis pas sûr que ce soit ce que tu souhaite!

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Février 2007
    Messages : 15
    Par défaut
    donc comment je dois faire ????moi débutant !!!!

  15. #15
    Membre éclairé Avatar de MelkInarian
    Profil pro
    Inscrit en
    Février 2007
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 260
    Par défaut
    Voila un bout de code qui fonctionne mais avec un Compo ExcelApplication car je n'ai pas de OleApplication.
    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
     
    var
       vCells  :variant;
       i, J : Integer;
       MonClasseur : _workbook;
       MaFeuille :_Worksheet;
       C                  : String;
    begin
    ...
    ExcelApplication1.Connect;                        // Connection à Excel
          MonClasseur:=ExcelApplication1.Workbooks.Open('NomDuFichier',False,False,
                EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,
                EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,0);
          ExcelApplication1.Visible[0]:=true;     // Mettre false pour cacher excel
          MaFeuille:=MonClasseur.Worksheets[1] as _worksheet;
        For I := 1 to 3 do begin        // Colonnes
          case I of
          1 : C := 'E';
          2 : C := 'F';
          3 : C := 'G';
          end;
          For J := 2 to 100 do begin    // lignes
              vCells := VarToStr(MaFeuille.Range[ C + IntToStr(J),C + IntToStr(J)].Value);
              if length(vCells)>31 then begin
                showmessage(vCells);
                //MaFeuille.Range[i,j].interior.indexcolor:=27;
              end;
          end;
        end;
        MonClasseur.Close(False, emptyparam,emptyparam,0);
        ExcelApplication1.Disconnect;
    ]
    Je ne me suis pas penché sur la coloration, il est tard!!

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Février 2007
    Messages : 15
    Par défaut
    Bonjour,
    merci pour ton code, donc moi je l'ai adapté à mon appli, ce qui donne :

    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
     
    procedure TForm1.Button4Click(Sender: TObject);
    var
       i,j :integer;
       vCells  :variant;
       c :string;
     
    begin
       OleApplication.Range['E1','G100'].columns.Autofit;
       for i:=1 to 3 do begin
       case i of
       1:C:='E';
       2:C:='F';
       3:C:='G';
       end;
       for j:=2 to 100 do begin
       vCells:=VarToStr(OleApplication.Range[ C +IntToStr(j),C+IntToStr(j)].value);
       if length(vCells)>31 then begin
       showmessage(vCells);
        //vCells.interior.indexcolor:=27;
    end;
    end;
    end;
    end;
    cela fonctionne trés bien maintenant comme tu le dis reste la colorisation des cellules détectées.
    je cherche de mon coté !!!!!

  17. #17
    Membre émérite Avatar de PadawanDuDelphi
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2006
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2006
    Messages : 678
    Par défaut
    Tiens ça devrait t'aider, et éviter de chercher...

    http://www.developpez.net/forums/sho...d.php?t=282141

    A+.

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Février 2007
    Messages : 15
    Par défaut
    merci je vais voir ce que je peu faire avec ça

  19. #19
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Février 2007
    Messages : 15
    Par défaut
    bon !!!!!
    malgrés le lien que tu m'as donné et j 'ai beau retourné la question dans tous les sens , je n'y arrive pas .
    Pourtant ce n'est pas faute du mettre du coeur à l'ouvrage
    je continu à chercher .
    si quelqu'un à une réponse je suis preneur......

  20. #20
    Membre éclairé Avatar de MelkInarian
    Profil pro
    Inscrit en
    Février 2007
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 260
    Par défaut
    Allez parce que c'est toi...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaFeuille.Range[ C + IntToStr(J),C + IntToStr(J)].interior.ColorIndex :=6;

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 06/02/2014, 20h43
  2. [POI] limiter le nombre de caractères dans une cellule Excel
    Par Médéric_t dans le forum Documents
    Réponses: 0
    Dernier message: 18/06/2013, 11h19
  3. Réponses: 1
    Dernier message: 12/04/2007, 16h54
  4. Réponses: 2
    Dernier message: 17/08/2006, 12h36
  5. limite du nombre de caractères dans une requete
    Par pheno82 dans le forum Access
    Réponses: 3
    Dernier message: 01/06/2006, 22h12

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